我想在两个表单之间传递值(c#都处于活动状态)。我该怎么办?
我有两种形式:Form1和Form2。
Form1包含一个富文本框和一个按钮。当我单击该按钮时,Form2应该打开,富文本框中的文本应该发送到Form2中的文本框,Form1应该保持打开状态,并且在Form2的背面。
Form2包含一个文本框和一个按钮,用户在文本框中编辑文本,当用户单击按钮时,编辑后的文本应该发送回Form1中的富文本框,Form2应该关闭/保持打开状态和Form1应该在富文本框中突出显示更新的文本。
我该怎么办?有人可以通过一个简单的例子帮助我做到这一点吗?
答案 0 :(得分:0)
请根据需要更改字段名称。以下代码将在form2中的textfield值更改时同时更新富文本框值。您可能希望进行微小更改以在按钮更改事件中触发它。
将以下方法添加到From1
private void SetChildFromValueToParent(object obj, EventArgs args)
{
//Read the child form's control value and set it to parent form field
txtBox.Text = ((TextBox)(obj)).Value.ToString();
}
在Form1
按钮点击中添加以下逻辑,打开Form2
private void button1_Click(object sender, EventArgs e)
{
ChildForm childForm = new ChildForm();
//Find the textbox control in the child form
Control[] controls = childForm.Controls.Find("textBox", true);
if (null != controls[0])
{
//Bind the method in the parent form to child form text control's TextChanged event
controls[0].TextChanged += new System.EventHandler(SetChildFromValueToParent);
}
childForm.ShowDialog();
}
编辑 - 在按钮上获取价值
private void SetChildFromValueToParent(object obj, EventArgs args)
{
//Read the child form's control value and set it to parent form field
Form2 from2 = new Form2();
string richTextBox.Text = ((TextBox)form2.Controls["textBox1"]).Text;
}
答案 1 :(得分:0)
在某些方面,我更喜欢第一个答案,但这里的方法可以帮助您理解两种形式之间的关系。注意:要使其正常工作,需要将两个richtextbox从私有更改为内部:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnEditOnForm1_Click(object sender, EventArgs e)
{
var form2 = new Form2(richTextBoxOnForm1);
form2.richTextBoxOnForm2.Text = richTextBoxOnForm1.Text;
form2.ShowDialog(this);
}
}
和
public partial class Form2 : Form
{
private readonly RichTextBox _rtb;
public Form2(RichTextBox pRTB)
{
InitializeComponent();
_rtb = pRTB;
}
private void btnOkOnForm2_Click(object sender, EventArgs e)
{
_rtb.Text = richTextBoxOnForm2.Text;
this.Close();
}
private void btnCancelOnForm2_Click(object sender, EventArgs e)
{
this.Close();
}
}
请注意Form2如何需要引用回Form1上的richtextbox才能更新它,因此您需要调整构造函数以接受该引用。
或者,您可以在Form1中创建一个合适的函数来更新那里的richtextbox,并使用
调用它。 private void btnOkOnForm2_Click(object sender, EventArgs e)
{
((Form1)this.Owner).UpdateRichTextBoxOnForm1(richTextBoxOnForm2.Text);
this.Close();
}
利用您在ShowDialog调用中包含发件人('this')的事实
form2.ShowDialog(this);