2012-04-26 46 views

回答

30

事實上,你正在改變錯誤的屬性。你肯定希望AcceptButton是確定按鈕。此屬性決定哪個是Windows條款中的默認按鈕。這是當您按鍵盤上的ENTER時按下的按鈕。通過更改AcceptButton,您只需將鍵盤界面切換到對話框。您不會以任何方式影響按鈕被按下時發生的情況。

你需要做的是將你的按鈕的DialogResult屬性設置爲DialogResult.None,因爲這決定了按鈕按下是否關閉窗體。然後,在按鈕的點擊處理程序中,您需要決定如何響應按鈕按下。我預計,如果對話框的驗證成功,您應該通過設置窗體的DialogResult屬性來關閉對話框。例如,

private void OKbuttonClick(object sender, EventArgs e) 
{ 
    if (this.CanClose()) 
     this.DialogResult = DialogResult.OK; 
} 
1

您還需要刪除按鈕本身的DialogResult,並在按鈕的屬性窗口中將其設置爲None

http://msdn.microsoft.com/en-us/library/system.windows.forms.button.dialogresult.aspx

如果此屬性的DialogResult設置爲比 無其他任何東西,如果是通過ShowDialog的 方法顯示父窗體,單擊按鈕關閉父窗體,而你不必 掛鉤任何事件。

顯然,現在您的按鈕不會執行任何操作,因此您需要爲Click事件註冊處理程序。

7

停止此行爲的最佳方法是在設計時在屬性窗口中將OK按鈕的DialogResult屬性更改爲DialogResult.None

另外,如果您已經在OK按鈕的單擊事件中有一些代碼,則可以更改DialogResult窗體。

private void comOK_Click(object sender, EventArgs e) 
{ 
    // your code ..... 

    // Usually this kind of processing is the consequence of some validation check that failed 
    // so probably you want something like this 
    if(MyValidationCheck() == false) 
    { 
     // show a message to the user and then stop the form closing with 
     this.DialogResult = DialogResult.None; 
    } 
} 
1

最佳做法是將Ok按鈕設置爲禁用而不是對用戶輸入做出響應。

根據窗體的不同,DialogResult屬性應該設置爲Ok或Yes,AcceptButton也應鏈接到Ok。

我通常在所有對話框上創建一個函數,並在用戶與數據交互時調用它。

void RefreshControls() { button.Enabled = this.ValidateInput(); }

-1
static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 

      Form2 fLogin = new Form2(); 
      if (fLogin.ShowDialog() == DialogResult.OK) 
      { 
       Application.Run(new Form1()); 
      } 
      else 
      { 
       Application.Exit(); 
      } 
     } 
    } 

public partial class Form2 : Form 
    { 
     public Form2() 
     { 
      InitializeComponent(); 
     } 

     private void btnKlik_Click(object sender, EventArgs e) 
     { 
      this.DialogResult = DialogResult.OK; 
     } 
    } 

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
    } 
相關問題