Ok, ça me dérange, et je n'arrive pas à comprendre ce qui ne va pas ...
J'ai fait deux formes. La première forme a juste un simple bouton dessus, qui ouvre l’autre comme un dialogue comme ceci:
using (Form2 f = new Form2())
{
if (f.ShowDialog() != DialogResult.OK)
MessageBox.Show("Not OK");
else
MessageBox.Show("OK");
}
Le second, qui est ce Form2
, a deux boutons dessus. Tout ce que j'ai fait est de définir les formes AcceptButton à un, et CancelButton à l'autre. Dans ma tête, c'est tout ce qui devrait être nécessaire pour que cela fonctionne. Mais quand je le lance, je clique sur le bouton qui ouvre Form2. Je peux maintenant cliquer sur celui défini en tant que CancelButton et je reçois la boîte de message "Pas OK". Mais lorsque je clique sur celui défini en tant que AcceptButton, rien ne se passe? Le code InitializeComponent de Form2 ressemble à ceci:
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(211, 13);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
//
// button2
//
this.button2.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.button2.Location = new System.Drawing.Point(130, 13);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(75, 23);
this.button2.TabIndex = 1;
this.button2.Text = "button2";
this.button2.UseVisualStyleBackColor = true;
//
// Form2
//
this.AcceptButton = this.button1;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.button2;
this.ClientSize = new System.Drawing.Size(298, 59);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Name = "Form2";
this.Text = "Form2";
this.Load += new System.EventHandler(this.Form2_Load);
this.ResumeLayout(false);
}
Je n'ai rien fait d'autre que d'ajouter ces deux boutons et de définir AcceptButton et CancelButton. Pourquoi ça ne marche pas?
Le simple fait de définir AcceptButton/CancelButton ne suffit pas. Cela indique simplement quel bouton doit être invoqué sur Enter/Esc. Vous devez définir DialogResult dans le gestionnaire de boutons.
Essayez de définir DialogResult
sur button1
this.button1.DialogResult = System.Windows.Forms.DialogResult.OK;
Essayez certainement le tutorielComment appliquer facilement AcceptButton et CancelButton pour une boîte de dialogue personnalisée dans Winform.
J'avais un problème avec AcceptButton qui ne fonctionnait pas et bien que la suggestion de DialogResult faisait partie du correctif, il me restait 2 autres choses à changer:
J'espère que ça aidera quelqu'un.
Vous devez définir la propriété KeyPreview du formulaire sur True. La valeur par défaut est False. Rappelez-vous que si le focus est défini sur un autre bouton plutôt que sur le bouton AcceptButton, la touche Entrée exécutera ce bouton.