2012-04-26 50 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(); 
     } 
    } 
相关问题