2016-05-23 12 views
0

Ich arbeite an einem MDI Winforms-Projekt, ich möchte Benutzer verwendet F3 Verknüpfung, um ein Suchformular in jedem wo in der Anwendung zu öffnen, so habe ich folgende verwendet Code in meinem MDI Eltern Formular und legen Sie die KeyPreview der Mutterform true:Definieren Sie eine Verknüpfung, die in allen Formen einer Win-Formular-Anwendung funktioniert

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData == (Keys.F3)) { 
     //Show search form 
     return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 

die Verknüpfung funktioniert in MDI Eltern und Kind Formen, aber wenn ich eine Form von einem MDI Kind Formulare öffnen mit .ShowDialog() die Abkürzung ‚doesn t arbeiten in der letzten Form, in dem anderen Wort, die Abkürzung, arbeitet in childForm:

//in the parent form 
var childForm = new Form1(); 
childForm.MdiParent = parentForm; 
childForm.KeyPreview = true; 
childForm.Show(); 

aber funktioniert nicht in grandChildForm Form:

//in the child form 
var grandChildForm = new Form2(); 
grandChildForm.KeyPreview = true; 
grandChildForm.ShowDialog(); 

Wie kann ich das Problem lösen, ohne ProcessCmdKey() Verfahren in allen Formen zu wiederholen?

Antwort

0

erstellen baseForm:

public partial class baseForm : Form 
{ 
    public baseForm() 
    { 
     InitializeComponent(); 
    } 

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == (Keys.F3)) 
     { 
      //Show search form 
      return true; 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 

Und lassen Sie alle Ihre anderen Formen von ihm erben:

public partial class Form1 : baseForm 

Dann kann jede gemeinsame Funktionalität Sie können Grundform hinzugefügt werden soll.