1.所有的控件全部封装成Control.dll,比如TBTextBox是重写的一个继承了微软的TextBox的自己定义TextBox。
2.定义一个BaseForm : Windows.Form,这个也放在Control.dll里面。在设计时,所有的窗体都是继承了BaseForm的,所有的控件都是从Control.dll里面拖上来的。要实现一个功能:做一个FormA,Using Control;如果窗体FormA的控件的内容发生过改变,那么在关闭时提示是否保存,如果没发生改变,不提示保存。这个就和Word的工作原理是一样的。不能遍历FormA的所有控件然后判断取值,不能对每个控件的TextChange等事件中写代码,只能修改基类,修改Control.dll里面的TBTextBox,重写KeyUp事件。可以修改BaseForm。因为可能有上百个窗体,每个窗体上有上百个控件。尝试用委托做了,可是重写了TBTextBox的OnKeyUp事件后就不知道怎么去对FormA产生影响了,在OnKeyUp这个事件里面我怎么才能传一个东西出去并且保存在一个变量里面?
2.定义一个BaseForm : Windows.Form,这个也放在Control.dll里面。在设计时,所有的窗体都是继承了BaseForm的,所有的控件都是从Control.dll里面拖上来的。要实现一个功能:做一个FormA,Using Control;如果窗体FormA的控件的内容发生过改变,那么在关闭时提示是否保存,如果没发生改变,不提示保存。这个就和Word的工作原理是一样的。不能遍历FormA的所有控件然后判断取值,不能对每个控件的TextChange等事件中写代码,只能修改基类,修改Control.dll里面的TBTextBox,重写KeyUp事件。可以修改BaseForm。因为可能有上百个窗体,每个窗体上有上百个控件。尝试用委托做了,可是重写了TBTextBox的OnKeyUp事件后就不知道怎么去对FormA产生影响了,在OnKeyUp这个事件里面我怎么才能传一个东西出去并且保存在一个变量里面?
解决方案 »
- C#程序的界面在win7和xp下不一样啊
- SOS!!!怎么加入app.config后窗体中的控件全都成空白了?
- 如何在调用控制台程序的时候不显示窗口
- socket服务器端如何接收数据?
- 关于发送邮件的问题,请大家帮帮忙!!急啊!!!
- 我们知道,在从数据库中读取Image字段的二进制数据时, 可以用Byte[]设定大小分次写入到文件流中,读取完毕后 就是一个完整文件了.....可是,把文件分段
- 装好水晶报表9.2,注册后,在VS的工具栏里只看到两 个和水晶报表有关的控件.
- mediaplayer是灰色的
- 哪位大哥有ComponentOne studio for dotnet 2006 V3的注冊碼.
- 请教一个关于BitBlt函数的问题
- C#里为何不支持在方法中定义方法
- 如果让多个程序共享配置文件(配置项)啊
--------------------------
为什么?FormA里的控件只会有自己定义的TBTextBox吗?如果不是,这个要求是实现不了的。
1. BaseForm和TBTextBox的命名空间都是Control,这是两个不同的类。
2. FormA是继承的BaseForm,判断的时候是判断FormA的某个属性,如果以您的意思,那么我有类似于FormA的100个窗体,每个窗体上有20个控件,其中10个是TextBox,还有其他类型控件,这又怎么做?
你可以这样来做:
//在控件类的修改事件中编写如下的代码
BaseForm bf=this.FindForm() as BaseForm;
if (bf!=null)
{
bf.Modified=true;
}
1、这样的结果是一但被编辑过,modified就为true,不管编辑的结果是否与原先相等。
2、必须自己重写所用到的控件,或者为每个控件添加事件,通用性不好。
优点就是效率高,要求不高的时候比较好用。