我寫了一個框架應用程序,它是一個窗體應用程序作爲父窗體。當它啓動時,它會在/ modules中找到dll並將它們作爲擴展裝載。當我點擊父窗體中的menuItem時,具體的DLL會工作。如果DLL是一個表單應用程序,它會顯示。但是當我嘗試使用快捷鍵(只有內置插件,例如:CTRL-C ... )在childForm中,熱鍵不起作用。任何人都會告訴我爲什麼以及如何解決這個問題?這裏是我的代碼:如何在子窗體中啓用快捷方式
//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屬性進行賦值的符號。 –
感謝漢斯。我已經在childform中設置了EnableShortcuts propers。我想要的只是讓windows內置熱鍵(ctr-c,ctrl-x,ctrl-v)工作,而不是用戶定義的熱鍵。我給代碼片斷,因爲我想我用一個醜陋和奇怪的方法來連接孩子和MDIparent.Maybe因爲這個,問題來了。 – user622851
子窗體是否有熱鍵的事件處理程序,或者您希望父窗口能夠捕捉熱鍵嗎?如果您希望父窗體捕獲熱鍵,則需要將子項的關鍵事件中繼到父項或使用鉤子來捕獲按鍵(使用dllimport)。 –