我有一個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事件,有沒有其它比較簡單的方法?
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事件,有沒有其它比較簡單的方法?
解决方案 »
- IEnumerator对数组直接赋值的问题
- 我做了一个UDP协议的聊天程序,但有些问题请教。
- 水晶报表问题
- 用C#打开一个word,并向里面插入文本
- 结束线程问题
- 如何将远程调用与反射结合在一起,RemotingConfiguration 是否可以注册Assembly.GetType("")的类型,如果不可以,有什么方法可以注册一个由反Assembly.GetType("")得来的类型?
- delphi 中BinToHex()对应c#语言该怎么写?
- winform 的socket 疑问
- c/s模式开发软件,请大家帮推荐下那个报表插件好用?
- 在C#中如何用textbox控件边输入边提示功能啊?
- 大家知道后缀名为A03的文件是什么格式吗?可以用什么软件可以打开?
- 问个莫名其妙的问题
/// <summary>
/// 引發控件的KeyDown事件
/// </summary>
/// <param name="e">KeyEventArgs事件資料</param>
protected override void OnKeyDown(KeyEventArgs e)
{
/*
SendKeys.Send直接在control内部处理消息,不再向外转发;
而ProcessDialogKey则不一定,会转发到control的parent。
*/
if (this.ActiveControl.GetType().Equals(typeof(System.Windows.Forms.TextBox))
|| this.ActiveControl.GetType().Equals(typeof(System.Windows.Forms.ComboBox))
)
{
if (e.KeyCode == Keys.Enter)
SendKeys.Send("{Tab}");//ProcessDialogKey(Keys.Tab);
else
base.OnKeyDown(e);
}
else
base.OnKeyDown(e);
}
对性能是否有什么影响呀?
this.txtPostalCode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.control_KeyDown);
改成
this.txtPostalCode.KeyDown += new System.Windows.Forms.KeyEventHandler(class.control_KeyDown);
是否简单,也不会性能有什么影响呀?