【问题标题】:Add similar behavior to a group of WinForms controls向一组 WinForms 控件添加类似的行为
【发布时间】:2015-11-04 15:56:28
【问题描述】:

我有一个带有 6 个按钮的表单。这些按钮用于增加/减少相应文本框的值。现在我正在尝试“动画”按钮。当鼠标悬停在他身上时,我想在按钮上获得另一种效果。

为此,我在资源中有两个不同的图像,我正在执行以下代码:

private void btnHoursDown_MouseHover(object sender, EventArgs e) {
    btnHoursDown.Image = Game_Helper.Properties.Resources.DownHover;
}

private void btnHoursDown_MouseLeave(object sender, EventArgs e) {
    btnHoursDown.Image = Game_Helper.Properties.Resources.Down;
}

这很好用。我的问题是:创建一个类 (ButtonBehaviour.cs) 并将此代码放在该类中是不明智的吗?

所以我会有这样的东西:

ButtonBehaviour buttonBehaviour = new ButtonBehaviour();
private void btnHoursDown_MouseHover(object sender, EventArgs e) {
    buttonBehaviour.buttonDownHover();
}

private void btnHoursDown_MouseLeave(object sender, EventArgs e) {
    buttonBehaviour.buttonDownLeave();
}

类应该是:

public class ButtonBehaviour {
    public void buttonDownHover() {
       // code
    }

    public void buttonDownLeave() {
       // code
    }
}

如何创建这个类行为并让按钮适应这个行为?

【问题讨论】:

  • 你可能想要继承
  • 我会加入那两个 Thomases。

标签: c# winforms button


【解决方案1】:

如果应该为所有按钮应用一种效果,请尝试向它们添加相同的事件处理程序

private void btn_MouseHover(object sender, EventArgs e)
{
    (sender as Button).Image = Game_Helper.Properties.Resources.DownHover;
}

private void btn_MouseLeave(object sender, EventArgs e)
{
    (sender as Button).Image = Game_Helper.Properties.Resources.Down;
}

引发事件的按钮可通过sender 变量获得

这样可以避免每个按钮的代码重复。创建 ButtonBehaviourCustomButton 可能是一种过度设计,除非您需要以多种形式使用它们

【讨论】:

  • 我正在学习 c# 并开始使用类,所以我做了这个小项目来让使用类更舒适。您发布的这段代码是 ButtonBehaviour 类代码吗?编辑:刚刚在我的表单中测试了这段代码,似乎可以工作,但是这样,我不需要类 Behavior 对吗?
  • @F.Carvalho,不,它是form 中的代码,而不是btnHoursDown_MouseHover,btnHoursDown_MouseHoverbtnMinutesDownbtnSecondsDown 有类似的方法吗?对于其中 3 个,您可以重复使用方法 btn_MouseHover,btn_MouseLeave
  • 是的,我愿意。所以我应该将这段代码用于 3 个递减按钮(小时、分、秒),并且我可以使用与递增按钮类似的东西,对吧?
  • @F.Carvalho,我建议是的
  • 谢谢。我将在我的项目中使用这种方法。
猜你喜欢
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多