簡體   English   中英

在表單之間傳遞數據

[英]Passing data between forms

我有兩種形式。 首先, Form1有一個組框、一些標簽和一個列表框。 我按下一個按鈕並打開新的Form2並包含一些文本。 我想將Form2中的文本傳輸到Form1中的列表框。

到目前為止,我所做的是將listbox的修飾符設為public ,然后將此代碼放在Form2的按鈕中

Form1 frm = new Form1();
frm.ListBox.items.Add(textBox.Text);

但令人驚訝的是,這並沒有增加任何價值。 我以為我在插入時弄錯了,所以我做了同樣的程序。 這一次,我公開了一個標簽並將文本框值添加到它的Text屬性中,但它失敗了。

有任何想法嗎?

嘗試將參數添加到第二種形式的構造函數(在您的示例中為 Form1)並以這種方式傳遞值。 調用 InitializeComponent() 后,您可以將參數添加到列表框作為選擇。

public Form1(String customItem)
{
  InitializeComponent();
  this.myListBox.Items.Add(customItem);
}

// In the original form's code:
Form1 frm = new Form1(this.textBox.Text);

假設 Form1 調用 Form2。 請看代碼:

表格1:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2();
        frm.Show();
        frm.VisibleChanged += formVisibleChanged;


    }

    private void formVisibleChanged(object sender, EventArgs e)
    {
        Form2 frm = (Form2)sender;
        if (!frm.Visible)
        {
            this.listBox1.Items.Add(frm.ReturnText);
            frm.Dispose();
        }


    }

}

表格2:

 public partial class Form2 : Form
{

    public string ReturnText { get; set; }

    public Form2()
    {
        InitializeComponent();

    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.ReturnText = this.textBox1.Text;
        this.Visible = false;

    }


}

答案是在 Form2 和表單被隱藏時聲明公共屬性。 訪問同一個實例並檢索值。

下面的代碼在我的機器上完美運行。

private void button1_Click(object sender, EventArgs e)
{
    Form1 f1 = new Form1();
    f1.listBox1.Items.Add(textBox1.Text );//ListBox1 : Modifier property made public
    f1.ShowDialog();
}

好的,如果你是調用序列,Form1->Form2 和 Form2 更新 Form1 的值,那么你必須使用ParentForm () 或Delegate來更新之前的表單。

Form1 frm = new Form1();

frm 現在是 Form1 類的新實例。

frm 不引用向用戶顯示的 Form1 的原始實例。

一種解決方案是,在創建 Form2 的實例時,將引用傳遞給您當前的 Form1 實例。

請避免像您說的那樣公開任何成員的概念>>我所做的是將列表框的修飾符公開,然后在按鈕代碼中的form2中<<這不是一個好習慣,另一方面,好的做法是在布拉德佳士得郵報,希望你明白。

此代碼將在包含 myListBox 的表單內,可能在按鈕單擊處理程序內。

Form2 frm2 = new Form2();
frm2.ShowDialog();
this.myListBox.Items.Add(frm2.myTextBox.Text);
frm2.Dispose();

暫無
暫無

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

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