關于Form中引用繼承Form中方法的問題

cnjack cnjack 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我有一個Form類BaseForm,其中有一個方法:
protected void control_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
/*
SendKeys.Send直接在control内部处理消息,不再向外转发;
而ProcessDialogKey则不一定,会转发到control的parent。
*/
if(e.KeyCode==Keys.Enter)
SendKeys.Send("{Tab}");//ProcessDialogKey(Keys.Tab);
}

我所新建的Form都是繼承到BaseForm,Form中的TextBox類,我都會為KeyDown事件的注冊方法如下:
this.txtPostalCode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.control_KeyDown);

以上代碼都是在.Net2003中完成的,正常運行,打開的Form的設置界面也正常;
現在項目升級到.Net2005,程序編譯后運行正常,control_KeyDown事件也能實現需求,但只要打開的Form中的TextBox有引用control_KeyDown方法的,Form的設置界面就不會顯示控件,只會顯示以下信息:

載入設計工具時發生一或多個錯誤。錯誤列示如下。部分錯誤可以藉由重建專案來修復,但其他錯誤可能需要變更程式碼才行。

方法 'control_KeyDown' 不可以是事件的方法,因為衍生此類別的來源類別已經定義該方法。
隱藏

於 Microsoft.VisualStudio.Shell.Design.Serialization.CodeDom.CodeDomEventBindingService.UseMethod(IComponent component, EventDescriptor e, String methodName)
於 System.ComponentModel.Design.EventBindingService.EventPropertyDescriptor.SetValue(Object component, Object value)
於 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeAttachEventStatement(IDesignerSerializationManager manager, CodeAttachEventStatement statement)
於 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement)

我不想自己去重寫一個TextBox類,也不想每個Form中都有control_KeyDown事件,更不想將control_KeyDown事件寫成一個public事件,每個地方都去調用這個public事件,有沒有其它比較簡單的方法?
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
cnjack
C# 111,128 成员 642,536 内容