2016-05-23 2 views
0

私はMDI winformsプロジェクトで作業していますが、F3のショートカットを使用して、アプリケーション内のすべての場所で検索フォームを開きます。私MDI親フォーム内のコードと設定、親フォームのKeyPreviewtrueへ:winフォームアプリケーションのすべての形式で動作するショートカットを定義します

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

ショートカットはMDI親と子の形で動作しますが、私はMDI子フォームのいずれかからフォームを開くとショートカットが」doesnの.ShowDialog()を使用して最後の形での作業、つまり、ショートカットは、で動作します:

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

が、grandChildForm形式では動作しません:

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

どのように私はすべての形式でProcessCmdKey()方法を繰り返すことなく、問題を解決することができますか?

答えて

0

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

とフォームがそれを継承するすべてのあなたの他人てみましょう:あなたが望む任意の共通の機能は、ベースフォームに追加することができます次に

public partial class Form1 : baseForm 

を。

関連する問題