我的Winform應用程序具有3種形式:MainForm,Form1和Form2。 MainForm有一個UserControl;應用程序啓動時,它調用的MainForm,MainForm中會被加載並添加Form1中到用戶控件:如何使用委託在UserControl上從活動窗體獲取值到另一窗體
private void MainForm_Load(object sender, EventArgs e)
{
Form1 frm = new Form1() { Dock = DockStyle.Fill, TopLevel = false, Visible = true };
xtraUserControl1.Controls.Add(frm);
}
在Form1上,我使用委託:
public delegate void Tranferdata(string txt);
public Tranferdata _tranfer;
private void Gettxt(string txt)
{
tbx_Recieve.Text = txt;
}
Form1上有一個按鈕來調用窗體2:
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.ShowDialog(this);
}
將Form2的Form2上後關閉值發送到Form1,代碼:
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
using (Form1 frm1 = (Form1)this.Owner)
{
frm1._tranfer(tbx_Numb.Text);
}
}
private void button1_Click_1(object sender, EventArgs e)
{
this.Close();
}
但我的代碼無法正常工作。它在'使用(Form1 frm1 =(Form1)this.Owner)'並且顯示System.InvalidCastException時崩潰。 我該如何解決這個問題?
可能重複[怎麼回事從C#中的窗體?](http://stackoverflow.com/questions/5233502/how-to-return-a-value-from-a-form-in-c) – Melvin
不要把它放在'使用'語句時,如果你這樣做,否則你將處置傳遞給閉合方法的'Form1'實例。當你想完成它時想要銷燬對象,只能使用'using'。還有其他一些原因,爲什麼它不起作用('sender'是一個Form2,而不是Form1),雖然你正在使用大錘與代表一起拍照,然後轉移到... –
感謝您的關心,但我不想那樣。我最好使用委託@Melvin – Camambeou