- 最後登錄
- 2022-11-24
- 在線時間
- 1 小時
- 註冊時間
- 2008-9-2
- 閱讀權限
- 20
- 精華
- 0
- UID
- 4896884
- 帖子
- 541
- 積分
- 212 點
- 潛水值
- 13707 米
| 所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。 我之前為了回答某論壇的問題,寫了這個範例,這個程式包含觸發事件、傳值等內容。
這是Form1- public partial class Form1 : Form
- {
- //使用靜態欄位,方便多視窗時使用
- //button1的觸發條件布林值
- public static bool btnflag = false;
- //可以從Form2直接指定的值
- public static string textValue = "";
- //從Form2輸入並傳過來的值
- public static int a = 0;
- //使用Timer來貫穿整個程式的事件、數值、文字的傳遞
- private Timer timer1 = new Timer();
- public Form1()
- {
- InitializeComponent();
- //Timer觸發間隔為四分之一秒
- timer1.Interval = 250;
- //指定Timer的出發事件函式
- timer1.Tick += new EventHandler(timer1_Tick);
- //啟動Timer
- timer1.Enabled = true;
- }
- //記住!這個按鈕不要連結觸發事件,所以在Fomr1直接按是沒有作用的
- private void button1_Click(object sender, EventArgs e)
- {
- MessageBox.Show("這是從Form2控制Form1按鈕觸發");
- }
- //這個按鈕開啟Form2
- private void button2_Click(object sender, EventArgs e)
- {
- Form2 f2 = new Form2();
- f2.Show();
- }
- //秀出從Form2輸入並傳過來的值,如果還沒有叫出Form2之前會秀出0
- private void button3_Click(object sender, EventArgs e)
- {
- MessageBox.Show("這是從Form2輸入的數值: " + a.ToString());
- }
- //Timer的處裡函式
- private void timer1_Tick(object sender, EventArgs e)
- {
- //如果從Form2按下按鈕並傳來正確的值,就做出相應的動作
- if (btnflag)
- {
- //按鈕按一次只觸發一次
- btnflag = false;
- //立即改變文字框的值
- textBox1.Text = textValue;
- //直接觸發button1
- button1_Click(new object(), new EventArgs());
- }
- //沒事就使用閒置函式,這樣程式同時可以做其他事
- Application.DoEvents();
- }
複製代碼 }
這是Form2- public partial class Form2 : Form
- {
- public Form2()
- {
- InitializeComponent();
- //靜態的變數可以直接使用
- textBox1.Text = Form1.a.ToString();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- //沒輸入資料或是格式有錯就重新輸入
- //這裡的int.TryParse將輸入的值輸出給Form1的a
- if ((textBox1.Text.Length == 0) ||
- (int.TryParse(textBox1.Text, out Form1.a) == false))
- {
- MessageBox.Show("請輸入任意數字");
- return;
- }
- //觸發Form1的button1
- Form1.btnflag = true;
- //指定Form1.Text1的值
- Form1.textValue = "從Form2直接指定的文字資料";
- //關閉Form2
- this.Dispose();
- }
- }
複製代碼 ... |
|