关于窗体继续问题。 怎么没法控制,新建窗体继承自模板窗体,双击新窗体的确定按钮,代码中不要执行base窗体的代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 首先你要在baseform中定义清楚两个按钮的行为,在子类中尽量不要重写它们的行为。如果实在是无法预先定义,你可以定义两个可重写方法,例如public virtual void OnOkClicked(){}public virtual void OnCancelClicked(){} 然后在子类中再去重写。但是要知道,编程当然要尽量少写代码、尽量少定义class。实际上之所以需要“面向对象设计”,是因为我们确实需要它。因此将来你会发现目前这种(想出的内容还很)贫乏地进行继承,实际上繁琐和多余的。你应该长远一点研究出窗体的业务行为,然后才进行抽象。不能刚有一丁点概念就滥用继承。 已经更你说过了,点击按钮的事件处理是在baseform中完成的,根本不是在“新窗体”中。你首先要搞明白,代码应该在哪里写。 假设你的 Form 叫 OkCancelDialogForm,两个 Button 叫 btnOK, btnCancel。首先,就像楼上各位所说的一样,你的按钮的 Click 事件触发操作是在 OkCancelDialogForm 内部暗箱作业的,跟外部没有关系,外部只是在 OkCancelDialogForm 暴露出的对外的 Event 上挂载对应的方法从而得到相应的执行。你想想,你平时随便拖个按钮然后绑定一个 Click 事件不都是这样的吗?至于怎么去触发 Click Event,由你外部控制吗?不是的。// 先要在外部定义public event EventHandler OkClick, CancelClick;// 构造函数中btnOK.Click += (sender, eventargs) => { OnOkClick();}btnCancel.Click += (sender, eventargs) => { OnCancelClick();}// 类方法public virtual void OnOkClick(){ if (OkClick != null) OkClick();}public virtual void OnCancelClick(){ if (CancelClick != null) CancelClick();} 最简单的(this.Controls["button1"] as Button).PerformClick(); 如果定义事件,那么其实你就无需把两个方法声明为virtual的。(也就是说,可以禁止重写。这样才能保证事件触发行为可靠地维系到子类中)但是这样,实际上子类对象需要注册监听自己的两个事件,这在概念上是“沉重”的。不如删除两个事件只留两个“空的”方法允许子类去重写,更轻更明确。 lz应该是想在子类中写 button_click 事件处理方法,而不是触发。 c#简单正则问题..急求解 菜鸟问题 创建组件"AXHOST"失败 C#基于ole方式调用mapinfo 各路朋友看过来?怎么得到Ctrl字串? 关于C#请求与解析Ascii格式的ModBus数据问题 发布一个可扩展基本模板的代码生工具 想要使用xml在不同的数据库之间传输交换数据,有没有相关资料? 如何做一个不规则界面(Form),等........................ 请问c#+ado.net程序源码 winform如何拖动chart控件中的cursor? 当前上下文中不存在名称“”
{
}public virtual void OnCancelClicked()
{
} 然后在子类中再去重写。但是要知道,编程当然要尽量少写代码、尽量少定义class。实际上之所以需要“面向对象设计”,是因为我们确实需要它。因此将来你会发现目前这种(想出的内容还很)贫乏地进行继承,实际上繁琐和多余的。你应该长远一点研究出窗体的业务行为,然后才进行抽象。不能刚有一丁点概念就滥用继承。
已经更你说过了,点击按钮的事件处理是在baseform中完成的,根本不是在“新窗体”中。你首先要搞明白,代码应该在哪里写。
首先,就像楼上各位所说的一样,你的按钮的 Click 事件触发操作是在 OkCancelDialogForm 内部暗箱作业的,跟外部没有关系,外部只是在 OkCancelDialogForm 暴露出的对外的 Event 上挂载对应的方法从而得到相应的执行。
你想想,你平时随便拖个按钮然后绑定一个 Click 事件不都是这样的吗?至于怎么去触发 Click Event,由你外部控制吗?不是的。// 先要在外部定义
public event EventHandler OkClick, CancelClick;// 构造函数中
btnOK.Click += (sender, eventargs) =>
{
OnOkClick();
}
btnCancel.Click += (sender, eventargs) =>
{
OnCancelClick();
}// 类方法
public virtual void OnOkClick()
{
if (OkClick != null) OkClick();
}
public virtual void OnCancelClick()
{
if (CancelClick != null) CancelClick();
}
(this.Controls["button1"] as Button).PerformClick();
lz应该是想在子类中写 button_click 事件处理方法,而不是触发。