0

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

我有两种形式:Form1 和 Form2。

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

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

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

4

2 回答 2

0

请根据需要更改字段名称。当 form2 中的文本字段值更改时,以下代码还将同时更新富文本框的值。您可能希望进行细微的更改以在按钮更改事件上触发它。

将以下方法添加到您的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;            
        }
于 2013-09-18T09:32:58.900 回答
0

在某些方面我更喜欢第一个答案,但这里有一种方法可以帮助您理解这两种形式之间的关系。注意:要使其正常工作,两个富文本框都需要从私有更改为内部:

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);
于 2013-09-18T09:51:17.483 回答