Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WinForms AcceptButton not working?

Ok, this is bugging me, and I just can't figure out what is wrong...

I have made two forms. First form just has a simple button on it, which opens the other as a dialog like so:

using (Form2 f = new Form2()) {     if (f.ShowDialog() != DialogResult.OK)         MessageBox.Show("Not OK");     else         MessageBox.Show("OK"); } 

The second, which is that Form2, has two buttons on it. All I have done is to set the forms AcceptButton to one, and CancelButton to the other. In my head this is all that should be needed to make this work. But when I run it, I click on the button which opens up Form2. I can now click on the one set as CancelButton, and I get the "Not OK" message box. But when I click on the one set as AcceptButton, nothing happens? The InitializeComponent code of Form2 looks like this:

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); } 

I have done nothing else than add those two buttons, and set the AcceptButton and CancelButton. Why doesn't it work?

like image 707
Svish Avatar asked Jan 28 '09 15:01

Svish


People also ask

What is the replacement for WinForms?

In fact, even the team at Microsoft created an alternative to WinForms based on the . NET Framework called WPF (Windows Presentation Foundation).

Will WinForms be deprecated?

WinForms is based on the user32/GDI technology that has existed since the dawn of modern Windows. It is not going to go anywhere, in all senses of the phrase: it won't get new features; it won't get support dropped.


2 Answers

Just setting the AcceptButton/CancelButton is not enough. This just tells which button should be invoked on Enter/Esc. You have to set the button's DialogResult property.

like image 144
Martin Moser Avatar answered Oct 04 '22 14:10

Martin Moser


Try setting DialogResult on button1

this.button1.DialogResult = System.Windows.Forms.DialogResult.OK; 
like image 25
Samuel Avatar answered Oct 04 '22 13:10

Samuel