2012-03-30 11 views
1

Ich fand ein seltsames ToolStripButton Doppelklick-Problem. Mit diesen Schritten wird das Problem reproduziert:Seltsame ToolStripButton klicken, um ein OpenFileDialog-Verhalten zu öffnen

  1. Erstellen Sie eine Windows Form Application.
  2. Fügen Sie eine auf dem Hauptformular hinzu.
  3. Fügen Sie eine ToolStripButton auf der ToolStrip hinzu.
  4. Fügen Sie eine OpenFileDialog auf dem Hauptformular hinzu.
  5. Doppelklicken Sie auf das ToolStripButtonClick Ereignis in der Eigenschaft-Toolbox.
  6. Fügen Sie diese in toolStripButton1_Click Methode:

    openFileDialog1.ShowDialog(); 
    
  7. Debug starten.
  8. Doppelklicken Sie schnell auf die ToolStripButton.

Hier kommt das Problem. Zuerst erscheint ein geöffneter Dateidialog und ich schließe ihn, dann erscheint ein weiterer Dialog. Dies sollte nicht passieren. Ich schließe es wieder, dann könnte das Hauptformular ein Problem mit dem Neuzeichnen haben. Schließlich schließe ich das Hauptformular, aber das Programm läuft noch.

Bitte versuchen Sie es selbst und lassen Sie mich wissen, wenn all dies passiert.

Warum passiert das? Was soll ich tun, um es zu lösen?

diese Weise können Sie das Problem zu reproduzieren:

using System; 
using System.ComponentModel; 
using System.Windows.Forms; 

namespace WinForm 
{ 
    class MyForm : Form 
    { 
     private IContainer components = null; 

     protected override void Dispose(bool disposing) 
     { 
      if (disposing && (components != null)) 
      { 
       components.Dispose(); 
      } 
      base.Dispose(disposing); 
     } 

     private void InitializeComponent() 
     { 
      openFileDialog1 = new OpenFileDialog(); 
      toolStrip1 = new ToolStrip(); 
      toolStripButton1 = new ToolStripButton(); 
      toolStrip1.SuspendLayout(); 
      this.SuspendLayout(); 
      toolStrip1.Items.AddRange(new ToolStripItem[] { toolStripButton1 }); 
      toolStripButton1.Text = "toolStripButton1"; 
      toolStripButton1.Click += new EventHandler(toolStripButton1_Click); 
      this.Controls.Add(toolStrip1); 
      toolStrip1.ResumeLayout(false); 
      toolStrip1.PerformLayout(); 
      this.ResumeLayout(false); 
      this.PerformLayout(); 

     } 

     private OpenFileDialog openFileDialog1; 
     private ToolStrip toolStrip1; 
     private ToolStripButton toolStripButton1; 

     public MyForm() 
     { 
      InitializeComponent(); 
     } 

     private void toolStripButton1_Click(object sender, EventArgs e) 
     { 
      openFileDialog1.ShowDialog(); 
     } 

     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new MyForm()); 
     } 
    } 
} 
+0

Du Toolstripbutton des 'Click' Ereignis verwenden, die einzigen Klick * * warum bist du dann * Doppelklick * auf sie reagiert? – Coder

+0

Ich habe es versehentlich angeklickt, dann habe ich dieses Problem gefunden.Ich meine, wenn jemand auf den Button doppelklickt, sollte es kein Problem verursachen, oder? – EFanZh

+0

Ja, aber das erklärt nicht, warum App immer noch läuft, wenn OP es schließt (es passiert, ich habe es versucht) – Marco

Antwort

1

ich beschlossen, dass dies (vorerst) zu verwenden:

private void toolStripButton1_Click(object sender, EventArgs e) 
{ 
    toolStripButton1.Enabled = false; 
    openFileDialog1.ShowDialog(); 
    toolStripButton1.Enabled = true; 
} 
1

Warum denen geschieht?

Ich weiß es wirklich nicht, es ist eine Überraschung für mich !!

Was soll ich tun, um es zu lösen?

Dies ist eine einfache Abhilfe:

private bool clicked = false; 
private void toolStripButton1_Click(object sender, EventArgs e) 
{ 
    if (clicked) return; 
    clicked = true; 
    openFileDialog1.ShowDialog(); 
    clicked = false; 
} 

EDITED:
Ich nehme an, dass Problem nicht ist doppelklicken Sie selbst, sondern OpenFileDialog Verhalten.
Wenn Sie versuchen, diesen Code der Fehler verschwindet sogar für (versehentlichen) Doppelklick:

private void toolStripButton1_Click(object sender, EventArgs e) 
{ 
    using (OpenFileDialog dlg = new OpenFileDialog() 
    { 
     Title = "Open file", 
     Filter = "PDF files|*.pdf|All files|*.*" 
    }) 
    { 
     dlg.ShowDialog(); 
     Debug.WriteLine(dlg.FileName); 
    } 
} 

Wenn Sie tsb1.DoubleClickEnabled = true der Fehler verschwinden verwenden ... aber ich bin nicht sicher, dass dies eine gute Lösung

+0

@EFanzH: Hast du meinen Code probiert? Es löste das Problem auf meinem PC ... jetzt suche ich, warum app nicht richtig schließt – Marco

+0

Ja, es scheint, dass Ihr Code funktioniert, aber das für jeden ToolStripButton? Es gibt viel zu tun. – EFanZh

+0

@EFanzH: Ich denke, das Problem ist innerhalb 'OpenFileDialog', nicht in der Schaltfläche selbst ... Ich gehe mit etwas Forschung weiter ... – Marco

Verwandte Themen