關于Form中引用繼承Form中方法的問題
我有一個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事件,有沒有其它比較簡單的方法?
...全文
相关推荐
动态引用DLL:运行类/打开DLL窗体
**动态引用DLL**: 在VB.NET中,我们通常使用`System.Reflection`命名空间中的`Assembly.LoadFrom`或`Assembly.LoadFile`方法来动态加载DLL
c# 美化窗口科直接继承源码 多彩皮肤
如果这个源码是基于Windows Forms,那么可能涉及了自定义Control或Form类,覆盖OnPaint方法,使用Graphics对象绘制皮肤元素。
Form2调用Form1控件的解决方案
#### 解决方案概述本文将详细介绍一种通过使用C#中的引用参数(`ref`)来实现跨窗体控件调用的方法。
Form1调用Form2 ,From2回传值或调用Form1内的方法。
在C#中,委托是一种类型,它代表了一个方法的引用。你可以把它想象成函数指针,但更安全且类型安全。委托允许我们将方法作为参数传递,或者存储在变量中,这为实现事件处理提供了基础。
FORM表单中文乱码问题分析与解决
解决方法:解决中文乱码问题的方法有两种,一种是使用POST方式,另一种是使用GET方式。


