如何使用来自form2的值更新form1中的富文本框的内容而不关闭form2?

时间:2013-09-18 08:49:46

标签: c# .net winforms richtextbox message-passing

我想在两个表单之间传递值(c#都处于活动状态)。我该怎么办?

我有两种形式:Form1和Form2。

Form1包含一个富文本框和一个按钮。当我单击该按钮时,Form2应该打开,富文本框中的文本应该发送到Form2中的文本框,Form1应该保持打开状态,并且在Form2的背面。

Form2包含一个文本框和一个按钮,用户在文本框中编辑文本,当用户单击按钮时,编辑后的文本应该发送回Form1中的富文本框,Form2应该关闭/保持打开状态和Form1应该在富文本框中突出显示更新的文本。

我该怎么办?有人可以通过一个简单的例子帮助我做到这一点吗?

2 个答案:

答案 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);