方式一:使用變量傳值
使用靜態(tài)變量傳值,可實現(xiàn)雙向傳值,但靜態(tài)變量在類加載的時候分配內(nèi)存,存儲于方法區(qū),一般不會被銷毀,在系統(tǒng)不夠內(nèi)存情況下會自動回收靜態(tài)內(nèi)存,這樣就會引起訪問全局靜態(tài)錯誤。
public partial class frmMain : Form
{
//聲明name為公共靜態(tài)變量
public static string name= "";
//給靜態(tài)變量賦值
name= "張三";
}
子窗體frmChild中代碼
private void frmChild_Load(object sender, EventArgs e)
{
this.txtname.Text= frmMain.name.Trim();
//賦值
frmMain.name= "李四";
}
使用公共變量,只可實現(xiàn)單向傳值。
public partial class frmMain : Form
{
//聲明name為公共變量,并賦值
public string name= "張三";
//單擊‘行為’按鈕的時候會給窗體傳值
private void btnChild_Click(object sender, EventArgs e)
{
frmChild f= new frmChild();
//變量傳值 ,注意順序?qū)懺赟howDialog()方法之前
f.stationID = this.name;
f.ShowDialog();
}
}
子窗體frmChild中代碼
public partial class frmChild: Form
{
//定義公共屬性
public string stationID = "";
}
方式二:使用委托傳值
通過子窗體聲明委托,父窗體實現(xiàn)委托,通過子窗體向父窗體傳值。
窗體設(shè)計如下:
public partial class frmChild : Form
{
//1、聲明一個委托
public delegate void setTextValue(string txt);
//2、聲明一個委托類型的事件
public event setTextValue setFormTextValue;
public frmChild()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
setFormTextValue(textBox1.Text);
}
}
父窗體代碼如下:
public partial class frmFather : Form
{
public frmFather()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
frmChild c = new frmChild();
c.setFormTextValue += setLable;
c.Show();
}
public void setLable(string txt)
{
this.label1.Text = txt;
}
}
輸入字符,點擊發(fā)送按鈕,運行結(jié)果如下:
思考一下,如果通過委托實現(xiàn)父窗體向子窗體傳值?
該文章在 2023/5/15 22:00:50 編輯過