日期:2014-05-20  浏览次数:20773 次

(急,今天就要交了)重写的控件事件如何影响窗体的某个属性?
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这个事件里面我怎么才能传一个东西出去并且保存在一个变量里面?

------解决方案--------------------
不能遍历FormA的所有控件然后判断取值
--------------------------
为什么?FormA里的控件只会有自己定义的TBTextBox吗?如果不是,这个要求是实现不了的。
------解决方案--------------------
控件不是都有FindForm()方法查找它所在的窗体吗?
你可以这样来做:


//在控件类的修改事件中编写如下的代码
BaseForm bf=this.FindForm() as BaseForm;
if (bf!=null)
{
bf.Modified=true;
}