簡體   English   中英

如何在不關閉form2的情況下使用來自form2的值更新form1中的富文本框的內容?

[英]How to update contents of rich text box in form1 with values coming from form2 without closing form2?

我想在兩個窗體之間傳遞值(C#都處於活動狀態)。 我該怎么做?

我有兩種形式:Form1和Form2。

Form1包含一個富文本框和一個按鈕。 當我單擊該按鈕時,Form2應該打開,富文本框中的文本應該發送到Form2中的文本框,而Form1應該也保持打開狀態,並且位於Form2的背面。

Form2包含一個文本框和一個按鈕,用戶可以在其中編輯文本框中的文本,當用戶單擊按鈕時,應將已編輯的文本發送回Form1中的富文本框,並且Form2應該關閉/保持打開狀態,而Form1應該突出顯示富文本框中更新了文本。

我該怎么做? 有人可以幫我做一個簡單的例子嗎?

請根據需要更改字段名稱。 同樣,當更改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;            
        }

在某些方面,我更喜歡第一個答案,但這是一種可以幫助您理解兩種形式之間關系的方法。 注意:要使其正常工作,兩個Richtextbox都需要從private更改為internal:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM