肥龍 發表於 2008-12-31 10:53:26

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

c#,winform,show,showdialog,子表單,父表單,傳值,輸入正確
表單的show方法,沒有給調用代碼任何通知,如果需要通知,使用showdialog是一種好的選擇。
在調用show方法後,show方法後面的代碼會立即執行,調用showdialog方法後,調用代碼被暫停執行,等到調用showdialog方法的表單關係後再繼續執行。而且表單可以返回一個dialogresult值,他描述了表單關閉的原因,例如OK,Cancel,yes,no等。為了讓表單返回一個dialogresult,必須設置表單的dialogresult值,或者在表單的一個按鈕上設置dialogresult屬性。
例子:
下面是子表單代碼,要求輸入phone,然後會返回給父表單。
namespace WindowsApplication1
{
    public partial class Phone : Form
    {
      public Phone()
      {
            InitializeComponent();
            btnOK.DialogResult = DialogResult.OK;
            btnOK.DialogResult = DialogResult.Cancel;
      }
      public string PhoneNumber
      {
            get { return textBox1.Text; }
            set { textBox1.Text = value; }
      }
      private void Phone_Load(object sender, EventArgs e)
      {
      }
    }
}不包含任何處理按鈕按一下事件的代碼,因為設置了每個按鈕的dialogresult屬性,所以按一下OK或者Cancel按鈕後,表單就消失了。下面的代碼顯示了父表單中調用Phone對話方塊的方法。
namespace WindowsApplication1
{
    public partial class Form7 : Form
    {
      public Form7()
      {
            InitializeComponent();
      }
      private void button1_Click(object sender, EventArgs e)
      {
            Phone frm = new Phone();
            frm.ShowDialog();
            if (frm.DialogResult == DialogResult.OK)
            {
                label1.Text = "Phone number is " + frm.PhoneNumber;
               
            }
            else if (frm.DialogResult == DialogResult.Cancel)
            {
                label1.Text = "form was canceled";
               
            }
            frm.Close();
      }
    }
}看起來非常簡單,創建新的Phone物件frm,在調用frm.showdialog方法是,代碼停止,等待phone表單返回,接著檢查phone表單的dialogresult屬性,由於表單還沒有釋放,是不可見的,所以仍可以訪問公共屬性phonenumber,一旦獲取了需要的資料,就可以調用表單的close方法。
一切正常,但是如果返回的格式不正確怎麼辦,就要把showdialog方法放在迴圈中,就可以再次調用,讓用戶重新輸入,就可以得到正確的值。
上面的代碼改成下面的即可。
namespace WindowsApplication1
{
    public partial class Form7 : Form
    {
      public Form7()
      {
            InitializeComponent();
      }
      private void button1_Click(object sender, EventArgs e)
      {
            Phone frm = new Phone();
            while (true)
            {
                frm.ShowDialog();
                if (frm.DialogResult == DialogResult.OK)
                {
                  label1.Text = "Phone number is " + frm.PhoneNumber;
                  if (frm.PhoneNumber.Length == 8 || frm.PhoneNumber.Length == 12)
                  {
                        break;
                  }
                  else
                  {
                        MessageBox.Show("");
                  }
                }
                else if (frm.DialogResult == DialogResult.Cancel)
                {
                  label1.Text = "form was canceled";
                  break;
                }
            }
            frm.Close();
      }
    }
}
頁: [1]
查看完整版本: c#,winform,show,showdialog,子表單,父表單,傳值,輸入正確