关于窗体继续问题。

ruhong 2014-01-31 03:15:55
为了减少调整窗体的时间,
我作了一人窗体模板,上面有两个按钮,一个确认,一个退出,
可是我发现继续了这个窗体模板之后,这两个按钮的click事件,我没有办法控制啊,
应该怎么做?本来就是为了图省事,现在反而更复杂了?
...全文
456 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruhong 2014-02-07
  • 打赏
  • 举报
回复
使用模板和设计模板都是我一个人啊。
tcmakebest 2014-02-05
  • 打赏
  • 举报
回复
鱼和熊掌楼主想兼得啊? 设计模板的人和使用模板的人,总有一个需要多干点活的。 设计的时候复杂一点,用的时候就简单啊!
youzelin 2014-02-05
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
不用定义事件,只需要让子类可以重写两个默认的处理方法即可。
当然需要定义事件,调用的不一定都是子类,况且作为可扩展性的一部分,应该用到事件。 如果是子类重写 On*** 方法就行,如果是外部操作需要绑定事件。
  • 打赏
  • 举报
回复
引用 7 楼 devmiao 的回复:
最简单的 (this.Controls["button1"] as Button).PerformClick();
lz应该是想在子类中写 button_click 事件处理方法,而不是触发。
  • 打赏
  • 举报
回复
如果定义事件,那么其实你就无需把两个方法声明为virtual的。(也就是说,可以禁止重写。这样才能保证事件触发行为可靠地维系到子类中) 但是这样,实际上子类对象需要注册监听自己的两个事件,这在概念上是“沉重”的。不如删除两个事件只留两个“空的”方法允许子类去重写,更轻更明确。
devmiao 2014-01-31
  • 打赏
  • 举报
回复
最简单的 (this.Controls["button1"] as Button).PerformClick();
  • 打赏
  • 举报
回复
不用定义事件,只需要让子类可以重写两个默认的处理方法即可。
youzelin 2014-01-31
  • 打赏
  • 举报
回复
假设你的 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();
}
  • 打赏
  • 举报
回复
引用 3 楼 ruhong 的回复:
我就是在新窗体中双击 确定按钮,然后输点代码,他就出错了。
已经更你说过了,点击按钮的事件处理是在baseform中完成的,根本不是在“新窗体”中。你首先要搞明白,代码应该在哪里写。
ruhong 2014-01-31
  • 打赏
  • 举报
回复
我就是在新窗体中双击 确定按钮,然后输点代码,他就出错了。 他就提示,设计器显示出错,是否继续?如果我继续,他还是能运行,但肯定不对啊。 我现在就是在软件开发中,要会用到很多提示框,然后基本上都有一个确定,一个退出按钮,其他内容我再自己加吧。 可是现在就是这简单的按钮事件我都控住不了,我哪错了。
  • 打赏
  • 举报
回复
首先你要在baseform中定义清楚两个按钮的行为,在子类中尽量不要重写它们的行为。 如果实在是无法预先定义,你可以定义两个可重写方法,例如
public virtual void OnOkClicked()
{
}

public virtual void OnCancelClicked()
{
} 
然后在子类中再去重写。 但是要知道,编程当然要尽量少写代码、尽量少定义class。实际上之所以需要“面向对象设计”,是因为我们确实需要它。因此将来你会发现目前这种(想出的内容还很)贫乏地进行继承,实际上繁琐和多余的。你应该长远一点研究出窗体的业务行为,然后才进行抽象。不能刚有一丁点概念就滥用继承。
bdmh 2014-01-31
  • 打赏
  • 举报
回复
怎么没法控制,新建窗体继承自模板窗体,双击新窗体的确定按钮,代码中不要执行base窗体的代码

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧