Cómo modificar un RichTextBox de otra forma en la C # .NET
-
20-09-2019 - |
Pregunta
Estoy construyendo un Bloc de notas. Tengo una forma de buscar y reemplazar. Cuando hago clic en un botón que abre la forma, el usuario da dos entradas en dos cuadros de texto y pulsar un botón. A continuación, los RichTextBoxes de la forma principal se supone que se modifican.
Esta es la forma de la forma FindAndReplace
:
private void btnReplaceAll_Click(object sender, EventArgs e)
{
string findMe = txtFind.Text;
string replaceMe = txtReplace.Text;
Form1 f1 = new Form1();
f1.MainText.Replace(findMe, replaceMe);
//this.Hide();
}
El problema es que no está funcionando .. Me estoy poniendo un NullReferenceException en la línea de f1.MainText.Replace(findMe, replaceMe);
Alguna idea?
Solución
A continuación, se crea una nueva instancia de la forma:
Form1 f1 = new Form1();
Todas las propiedades se inicializan con sus valores por defecto (es decir, cadenas a NULL). A continuación se intenta llamar la href="http://msdn.microsoft.com/en-us/library/fk49wtc1.aspx" rel="nofollow noreferrer"> Replace
método en la propiedad que es MainText
null
y se obtiene la excepción:
f1.MainText.Replace(findMe, replaceMe);
Es necesario inicializar primero esta propiedad:
f1.MainText = "blablabla";
f1.MainText = f1.MainText.Replace(findMe, replaceMe);
ACTUALIZACIÓN:
Cuando se crea la forma FindAndReplace se podía pasar a su constructor el valor actual del texto:
public class Form1 : Form
{
protected void FindAndReplace_Click(object sender, EventArgs e)
{
var findAndReplaceForm = new FindAndReplaceForm(MainText.Text);
findAndReplaceForm.ShowDialog();
MainText.Text = findAndReplaceForm.NewText;
}
}
public class FindAndReplaceForm : Form
{
private readonly string _originalText;
public FindAndReplaceForm(string originalText)
{
_originalText = originalText;
}
public string NewText
{
get
{
return (_originalText ?? string.Empty).Replace(findMe, replaceMe);
}
}
}
Otros consejos
Su forma de buscar y reemplazar debe saber sobre su forma principal. La forma en que lo está haciendo, que está creando una nueva forma principal, la cual no tendrá ningún texto en el área de texto principal. Al crear el Buscar y reemplazar formulario, debe pasar su forma original, o incluso sólo el texto principal, a la forma de buscar y reemplazar, a continuación, busque la forma principal de texto de la forma que acaba de pasar en.
¿Quieres algo como lo siguiente:
public class FindAndReplaceForm
{
private Form1 MainForm;
public FindAndReplaceForm(Form1 parentForm)
{
this.MainForm = parentForm;
//The rest of you constructor here
}
private void btnReplaceAll_Click(object sender, EventArgs e)
{
string findMe = txtFind.Text;
string replaceMe = txtReplace.Text;
//The following line will search the parent form
this.MainForm.MainText.Replace(findMe, replaceMe);
//this.Hide();
}
}
Se podría añadir referencias de forma estática a la clase del Programa.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
static class Program
{
public static Form1 F1 { get; set; }
public static Form2 F2 { get; set; }
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 = new Form1();
Form2 = new Form2();
Application.Run(Form1);
}
}
}
A continuación, de cualquier forma en su aplicación, podrás utilizar Program.Form1
o Program.Form2
como una referencia ya instancia.