InPowerS.Net

 找回密碼
 註冊
搜索
查看: 5374|回復: 0

c#,winform,show,showdialog,子表單,父表單,傳值,輸入正確

[複製鏈接]
發表於 2008-12-31 10:53:26 | 顯示全部樓層 |閱讀模式
c#,winform,show,showdialog,子表單,父表單,傳值,輸入正確
表單的show方法,沒有給調用代碼任何通知,如果需要通知,使用showdialog是一種好的選擇。
在調用show方法後,show方法後面的代碼會立即執行,調用showdialog方法後,調用代碼被暫停執行,等到調用showdialog方法的表單關係後再繼續執行。而且表單可以返回一個dialogresult值,他描述了表單關閉的原因,例如OK,Cancel,yes,no等。為了讓表單返回一個dialogresult,必須設置表單的dialogresult值,或者在表單的一個按鈕上設置dialogresult屬性。
例子:
下面是子表單代碼,要求輸入phone,然後會返回給父表單。

  1. namespace WindowsApplication1
  2. {
  3.     public partial class Phone : Form
  4.     {
  5.         public Phone()
  6.         {
  7.             InitializeComponent();
  8.             btnOK.DialogResult = DialogResult.OK;
  9.             btnOK.DialogResult = DialogResult.Cancel;
  10.         }
  11.         public string PhoneNumber
  12.         {
  13.             get { return textBox1.Text; }
  14.             set { textBox1.Text = value; }
  15.         }
  16.         private void Phone_Load(object sender, EventArgs e)
  17.         {
  18.         }
  19.     }
  20. }
複製代碼
不包含任何處理按鈕按一下事件的代碼,因為設置了每個按鈕的dialogresult屬性,所以按一下OK或者Cancel按鈕後,表單就消失了。下面的代碼顯示了父表單中調用Phone對話方塊的方法。

  1. namespace WindowsApplication1
  2. {
  3.     public partial class Form7 : Form
  4.     {
  5.         public Form7()
  6.         {
  7.             InitializeComponent();
  8.         }
  9.         private void button1_Click(object sender, EventArgs e)
  10.         {
  11.             Phone frm = new Phone();
  12.             frm.ShowDialog();
  13.             if (frm.DialogResult == DialogResult.OK)
  14.             {
  15.                 label1.Text = "Phone number is " + frm.PhoneNumber;
  16.                
  17.             }
  18.             else if (frm.DialogResult == DialogResult.Cancel)
  19.             {
  20.                 label1.Text = "form was canceled";
  21.                
  22.             }
  23.             frm.Close();
  24.         }
  25.     }
  26. }
複製代碼
看起來非常簡單,創建新的Phone物件frm,在調用frm.showdialog方法是,代碼停止,等待phone表單返回,接著檢查phone表單的dialogresult屬性,由於表單還沒有釋放,是不可見的,所以仍可以訪問公共屬性phonenumber,一旦獲取了需要的資料,就可以調用表單的close方法。
一切正常,但是如果返回的格式不正確怎麼辦,就要把showdialog方法放在迴圈中,就可以再次調用,讓用戶重新輸入,就可以得到正確的值。
上面的代碼改成下面的即可。

  1. namespace WindowsApplication1
  2. {
  3.     public partial class Form7 : Form
  4.     {
  5.         public Form7()
  6.         {
  7.             InitializeComponent();
  8.         }
  9.         private void button1_Click(object sender, EventArgs e)
  10.         {
  11.             Phone frm = new Phone();
  12.             while (true)
  13.             {
  14.                 frm.ShowDialog();
  15.                 if (frm.DialogResult == DialogResult.OK)
  16.                 {
  17.                     label1.Text = "Phone number is " + frm.PhoneNumber;
  18.                     if (frm.PhoneNumber.Length == 8 || frm.PhoneNumber.Length == 12)
  19.                     {
  20.                         break;
  21.                     }
  22.                     else
  23.                     {
  24.                         MessageBox.Show("");
  25.                     }
  26.                 }
  27.                 else if (frm.DialogResult == DialogResult.Cancel)
  28.                 {
  29.                     label1.Text = "form was canceled";
  30.                     break;
  31.                 }
  32.             }
  33.             frm.Close();
  34.         }
  35.     }
  36. }
複製代碼
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

小黑屋|Archiver|手機版|InPowerS.Net

GMT+8, 2018-10-17 04:52

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表