前幾天在網上找的資料可以把表單整個載入到選項卡中(見上一篇),這樣實現起來非常好用,多視窗顯示也方便了很多。
在把視窗都加入後,我想能不能在主表單上傳遞參數給載入到選項卡上的表單呢,比如傳遞查詢的參數之類。
1、建立2個表單: 主表單Form1, 子表單Form2
設定Form1上的textBox1為public,便於把textBox1直接傳遞過去,當然也可以只傳遞字串
首先使用上一篇的代碼將form2加入到form1的選項卡中,這裡設定點擊generatefm按鈕時執行這個事件
private void generatefm_Click(object sender, EventArgs e) { tbMobile = new TabPage("中國"); tbMobile.Name = "tbmobile"; tabControl1.Controls.Add(tbMobile); Form form2 = new Form2(textBox1); //傳遞textBox1過去 // Form2 form = new Form2(); form2.TopLevel = false; form2.BackColor = Color.White; form2.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; form2.FormBorderStyle = FormBorderStyle.None; form2.Show(); tbMobile.Controls.Add(form2); tabControl1.SelectedIndex = 2; }
在Form2中使用建構函式接受參數:
public partial class Form2 : Form { public Form2() { InitializeComponent(); } public Form2(TextBox ts) { InitializeComponent(); textBox2.Text = ts.Text; }
}
這樣就可以實現載入form2的時候把form1中輸入的內容直接傳遞過去,這是初始狀態。如果要在載入後修改輸入內容同時改變form2中的內容呢,繼續:
private void button1_Click(object sender, EventArgs e) { form2.textBox2.Text = textBox1.Text; } private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) { form2.textBox2.Text = textBox1.Text; }
這裡使用的from2變數,需要在form1中開始的地方先聲明一下就可以了,對應的加入選項卡中的代碼只需簡單改一下,Form1的最終的代碼:
public partial class Form1 : Form { private TabPage tbMobile = null; private TabPage tbUnion = null; Form2 form2 = null; //先在這裡聲明,便於載入後引用 public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { form2.textBox2.Text = textBox1.Text; //這裡就可以引用了,form2的textBox2必須先設定成public } private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) { form2.textBox2.Text = textBox1.Text; //切換選項卡時也擷取最新的輸入參數 } private void generatefm_Click(object sender, EventArgs e) { tbMobile = new TabPage("中國"); tbMobile.Name = "tbmobile"; tabControl1.Controls.Add(tbMobile); form2 = new Form2(textBox1); // Form2 form = new Form2(); form2.TopLevel = false; form2.BackColor = Color.White; form2.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; form2.FormBorderStyle = FormBorderStyle.None; form2.Show(); tbMobile.Controls.Add(form2); tabControl1.SelectedIndex = 2; } }
這個例子只是實現了單向的參數傳遞,如果反過來需要在載入的表單中將參數傳給主表單呢?繼續研究,你有什麼好方法一同探討。