2012-04-26 29 views

Respuesta

30

De hecho, está cambiando la propiedad incorrecta. Ciertamente quiere que AcceptButton sea el botón Aceptar. Esta propiedad determina cuál es el botón predeterminado en términos de Windows. Ese es el botón que se presiona cuando toca ENTER en su teclado. Al cambiar AcceptButton, simplemente está rompiendo la interfaz del teclado para su diálogo. No está influyendo de ninguna manera en lo que sucede cuando se presiona el botón.

Lo que debe hacer es establecer la propiedad DialogResult de su botón en DialogResult.None ya que eso es lo que determina si un botón presiona cierra el formulario o no. Luego, dentro del controlador de clic del botón, debe decidir cómo responder al botón presionar. Supongo que, si la validación del diálogo es exitosa, debe cerrar el diálogo configurando la propiedad DialogResult del formulario. Por ejemplo

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

También debe eliminar el DialogResult del botón, en la ventana de propiedades del botón establecerlo en None.

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

Si el DialogResult de esta propiedad se establece en otra cosa que no sea Ninguno, y si el formulario principal se visualiza a través del método ShowDialog , haga clic en el botón se cierra el formulario padre sin tener para conectar cualquier evento.

Obviamente, ahora su botón no hará nada por lo que necesitará para registrar un controlador para el evento Click.

7

La mejor forma de detener este comportamiento es cambiar la propiedad DialogResult de su botón Aceptar al DialogResult.None en la ventana de propiedades en tiempo de diseño.

Además, si ya tiene algún código en el evento click del botón Aceptar, puede cambiar el formulario 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

La mejor práctica es establecer realmente el botón Aceptar para estar deshabilitado en lugar de no responder a la entrada del usuario.

La propiedad DialogResult DEBE establecerse en Ok o Sí, dependiendo del formulario y AcceptButton también se debe vincular a Ok.

Normalmente creo una función en todos los cuadros de diálogo y la llamo cuando el usuario interactúa con los datos.

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(); 
     } 
    } 
Cuestiones relacionadas