深入理解C#编程中的组件

深入理解C#编程中的组件,第1张

深入理解C#编程中的组件,第2张

理解组件编程中的事件非常重要,C#中的“事件”是一个类在对象发生有趣的事情时向其客户提供通知的一种方式。与事件关系最密切的是委托。委托可以在委托对象中封装方法引用。为了理清组件-事件-委托之间的关系,我就用实际例子来说说小弟的理解。

首先,创建一个Windows控件项目,并添加以下控件模板。

当事件被触发时,EventArgs类型参数将被传递给事件处理方法。为了传递自定义信息,我们可以创建一个从EventArgs继承的事件参数类,定义如下:

公共类EventLoginArgs:System。EventArgs
{
public string strUserID;
公共字符串strUserName
公共字符串strUsERPWD
public bool b valid;
public event loginargs(string userID,string userName,string user pwd)
{
strUserID = userID;
struser name = userName;
struser pwd = user pwd;

}

再声明两个委托,它们是EventLoginArgs和EventArgs对象中的信息封装,如下所示:

公共委托void UserLoginEventHandler(对象发送方,EventLoginArgs e);
公共委托void CancelEventHandler(对象发送方,EventArgs e);

在组件中,为了允许用户自定义事件的处理方法,组件必须提供事件接口。如果它仅从单个现有的Windows控件继承,则可以重载已知的方法以添加您自己的处理,或者可以声明自定义事件接口。如果组件包含多个控件,则应根据实际需要声明事件接口。这里,我声明了两个自定义事件接口供两个按钮使用,如下所示:

公共事件UserLoginEventHandler submit log in;
公共事件CancelEventHandler Cancel
protected virtual void OnSubmitLogin(EventLoginArgs e)
{
if(this。提交登录!= null)
{
submit log in(this,e);
}

}
protected virtual void on cancel(EventArgs e)
{
if(this。取消!=null)
{
Cancel(this,e);
}

事实上,SubmitLogin是UserLoginEventHandler的委托的一个例子。令人不解的是,这个事件是如何触发、传递和处理的?

在此示例中,submitLogin事件由OK按钮触发:

私有void btnOK_Click(对象发送方,系统。EventArgs e)
{
if(txtID。文字!= ""&&txtName。文字!=""&&txtPWD。文字!= " ")
{
intlog in time++;
OnSubmitLogin(new event loginargs(txtID。文本,txtName。文本,txtPWD。正文));
bLogin = TestUserInDB(new event loginargs(txt id。文本,txtName。文本,txtPWD。正文));
MessageBox。Show("这是btnOK_click函数!"“在控制中”,MessageBoxButtons。OK);
如果(!bLogin)
MessageBox。Show("登录失败!",“登录错误”,MessageBoxButtons。OK);
}
else
{
MessageBox。Show("你必须输入所有的项目!",“登录信息”,MessageBoxButtons。OK);
}
}

请注意,本例中的对话框是为了帮助您理解事件的过程。真正有用的是第二个例子。

在响应btnOK_Click事件时,首先要检查的是有效性,并建议实际工作中要加强和改进。intLoginTime变量是登录尝试的次数。TestUserInDB是通过已知信息在数据库中搜索相关记录,判断用户是否合法。因为组件的测试是通过客户端程序进行的,所以我们应该创建最简单的客户端程序。这是一个Windows应用程序,将已编译的组件添加到用户控制栏,将它们拖到工作区,并添加SubmitLogin事件的响应程序,如下所示:

private void user control 1 _ submit log in(对象发送方,Userlogin。e)
{
MessageBox。Show("这是测试形式!"+ userControl1.bLogin +"\ns登录次数为
"+user control 1 . intlog in time+" \ n的strUserID="+e.strUserID," Test ",MessageBoxButtons。OK);
}

此时运行客户端程序会得到以下结果:

这是测试形式!
这是DB中的进程
这是btnOK_click函数!

结果显示,当单击btnOK按钮时,onSubmitLogin(new event logs(txt id . text,txtName。文本,txtPWD。Text))执行,这个方法还调用SubmitLogin(this,e),触发提交登录事件,userControl1_SubmitLogin响应,所以打印第一行。

然后执行TestUserInDB,打印出第二行。

最后返回btnOK_Click输出最后一行。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 深入理解C#编程中的组件

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情