英语不是我的母语,所以请耐心等待。
我的问题的意思是,如何使表单(例如form 2
(显示从form 1
键入的内容,就像实时一样。我假设 将使用TextChanged
事件,但下一步是什么?
为了保持简单和OOP友好,我会在Form2
中创建一个属性,并在Form1.TextChanged
事件中更新它:
表单1.cs
public partial class Form1 : Form
{
private Form2 _form2;
public Form1()
{
InitializeComponent();
this.textBox1.TextChanged += (sender, e) =>
{
_form2.TextBoxValue = textBox1.Text;
};
_form2 = new Form2();
_form2.Show();
}
}
表格2.cs
public partial class Form2 : Form
{
public string TextBoxValue
{
get => textBox1.Text;
set => textBox1.Text = value;
}
public Form2()
{
InitializeComponent();
}
}
请注意,您需要将Form1
和Form2
名称更改为应用程序中的实际表单类名称(以及textBox1
名称(。
编辑: 按照注释中的要求,如果要在两个窗体中更新对任一文本框的更改,则需要将 TextBoxValue
属性添加到两个窗体中,并使两个窗体中的事件处理程序更改该属性。我还清理了一点代码。
表单1.cs
public partial class Form1 : Form
{
private Form2 _form2;
public string TextBoxValue
{
get => textBox1.Text;
set => textBox1.Text = value;
}
public Form1()
{
InitializeComponent();
this.textBox1.TextChanged += (sender, e) =>
{
_form2.TextBoxValue = textBox1.Text;
};
_form2 = new Form2();
_form2.Show();
}
}
表格2.cs
public partial class Form2 : Form
{
private Form1 _form1;
public string TextBoxValue
{
get => textBox1.Text;
set => textBox1.Text = value;
}
public Form2()
{
InitializeComponent();
this.textBox1.TextChanged += (sender, e) =>
{
_form1.TextBoxValue = textBox1.Text;
};
this.Shown += (sender, e) =>
{
_form1 = (Form1)Application.OpenForms["Form1"];
};
}
}
在 form2 上抛出一个事件并从 form1 调用它
在表单 1 上:
private Form2 frm2;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var text = Textbox1.Text;
frm2.TextChanged.Invoke(text , new EventArgs());
}
private void Form1_Load(object sender, EventArgs e)
{
frm2 = new Form2();
frm2.Show();
}
在表格 2 上:
public EventHandler TextChanged;
public Form2()
{
InitializeComponent();
TextChanged += HandleTextChanged;
}
private void HandleTextChanged(object sender, EventArgs e)
{
label1.Text = (string) sender;
}
我宁愿不让这两种形式相互了解。 您可以改为执行以下操作:
static class Program
{
private static Form _form1;
private static Form _form2;
public static void Main()
{
_form1 = new MyForm();
_form2 = new MyForm();
_form1.MyTextbox.OnTextChanged += Form1_MyTextBox_TextChanged;
}
private void Form1_MyTextBox_TextChanged(object sender, EventArgs e)
{
_form2.MyTextBox.Text = _form1.MyTextbox.Text;
}
}
}
public class MyForm : Form
{
public TextBox MyTextBox {get;set;}
}