フレームアプリケーションを作成しました。これは親フォームとしてWindowsフォームアプリケーションです。起動すると、/ modulesにdllがあり、拡張モジュールとしてロードされます。そして、親フォームのmenuItemをクリックすると、特定のdllが動作します.DLLがフォームアプリケーションの場合、ショートカットを使用しようとすると表示されます(ビルドインのみです:CTRL-C ... )子フォームで、ホットキーが機能しません。なぜ誰に教えてください、どうすれば問題を解決できますか?私のコードは次のとおりです:子フォームでショートカットを有効にする方法
//parent.exe--ModuleEntrance.cs
public abstract class ModuleEntrance {
public abstract string[] GetMenuNames();
public abstract string[] GetMenuItemNames();
public abstract EventHandler[] GetEventHandlers();
}
//parent.exe--ParentForm.cs
public partial class MDIParent : Form {
public MDIParent() { //CTOR
InitializeComponent();
ModuleEntrance oneEntrance;
string oneMenuName, oneMenuItemName;
ToolStripMenuItem theMenu, theMenuItem;
for(){ //iterate dlls in /modules, if it implement ModuleEntrance, load it.
//And 1)load menu&menuItem.
//2) connect handler to menuItem.click through
//<code:theMenuItem.Click += new EventHandler(oneEntrance.GetEventHandlers()[i]);>
}
}
//--------------
//child.dll-- EntranceImp.cs //implement AC
public class EntranceImp : ModuleEntrance {
public override string[] GetMenuNames() {
return new string[] { "MENU"};
}
public override string[] GetMenuItemNames() {
return new string[] { "OpenChildForm"};
}
public override EventHandler[] GetEventHandlers() {
return new EventHandler[]{
(EventHandler)delegate(object sender, EventArgs e) { //Anonymous method
childForm form = new childForm();
//find MDIparent and connect them
ToolStripMenuItem mi = (ToolStripMenuItem)sender;
form.MdiParent = (Form)(mi.OwnerItem.Owner.Parent); //It works!
form.Show();
}
};
}
}
//child.dll--childForm.dll
//...
動作しないコードはスニペットに含まれていません。 ShortcutKeysプロパティへの割り当ての兆候はありません。 –
ありがとうHans。私はすでにchildform.WhatにEnableShortcutsのプロッサーを設定しているだけで、Windowsのホットキー(ctr-c、ctrl-x、ctrl-v)は、ユーザー定義のホットキーではなく、機能します。コードスニペットを与えるのは、私が子供とMDIparentを接続するために醜く奇妙な方法を使うと思うからです。おそらく、問題が起こるからです。 – user622851
子フォームにホットキー用のイベントハンドラがありますか、または親がホットキーをキャッチできると思いますか?親フォームがホットキーをキャッチすることを期待している場合は、子から親にキーイベントをリレーするか、フックを使用して(dllimportを使用して)キー押下をキャッチする必要があります。 –