[英]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.