C#Windows窗体中的图形按钮状态
我正在用VS2008在C#中构建一个windows窗体。我有大约32个按钮,我在默认按钮上放置了一个图像,但我希望每个按钮都有一个悬停/向上/向下的效果,我似乎在任何地方都找不到这些信息C#Windows窗体中的图形按钮状态,c#,button,C#,Button,我正在用VS2008在C#中构建一个windows窗体。我有大约32个按钮,我在默认按钮上放置了一个图像,但我希望每个按钮都有一个悬停/向上/向下的效果,我似乎在任何地方都找不到这些信息 也许我在寻找错误的术语,任何方向都是值得赞赏的。对我来说,这听起来像是一份继承的工作。我将对button类进行子类化,并通过重写OnHover、OnPress、OnLeave和OnPaint方法来处理hover、press和leave。在OnPaint中绘制按钮。对我来说,这听起来像是一项继承工作。我将对but
也许我在寻找错误的术语,任何方向都是值得赞赏的。对我来说,这听起来像是一份继承的工作。我将对button类进行子类化,并通过重写OnHover、OnPress、OnLeave和OnPaint方法来处理hover、press和leave。在OnPaint中绘制按钮。对我来说,这听起来像是一项继承工作。我将对button类进行子类化,并通过重写OnHover、OnPress、OnLeave和OnPaint方法来处理hover、press和leave。在OnPaint中绘制按钮。我制作了一个程序,需要使用一些标签,结果是(添加AddHandles()-void以形成加载):
请注意,我最初将其用于标签,因此可能需要进行一些更改。我制作了一个程序,需要将其用于一些标签,结果是(添加AddHandles()-void以形成加载):
请注意,我最初将其用于标签,因此可能需要进行一些更改。从System.Windows.Forms.Button类继承,并重写以下方法:
- 在MouseDown上,这将处理“按下的图像”
- 在MouseCenter上,这将处理“悬停图像”
- OnMouseLeave,这将处理您的原始图像
public class MyButton : System.Windows.Forms.Button {
public MyButton()
: base() {
// No default implementation
}
protected override void OnMouseDown(Object sender, MouseEventArgs e) {
this.Image = Properties.Resources.PressedImage;
}
protected override void OnMouseEnter(Object sender, MouseEventArgs e) {
this.Image = Properties.Resources.HoveringImage;
}
protected override void OnMouseLeave(Object sender, MouseEventArgs e) {
this.Image = Properties.Resources.DefaultImage;
}
}
既然有多个按钮,当然可以将资源获取转换为属性
public Image DefaultImage {
get;
set;
}
public Image PressedImage {
get;
set;
}
public Image HoveringImage {
get;
set;
}
并在重写的虚拟方法中使用这些方法。这可能是你最好的方法。我会避免下面的答案(无意冒犯Phoexo),因为这是一个非常不寻常和混乱的解决方案
编写和编译新按钮后,可以执行简单的查找和替换来更改现有按钮的类型。您需要进行一些清理,将每个按钮的三个属性设置为相应的图像,并清理一些设计器代码,但如果您必须添加更多按钮,从长远来看,这将使您的生活更加轻松。继承自System.Windows.Forms.button类,并覆盖以下方法:
- 在MouseDown上,这将处理“按下的图像”
- 在MouseCenter上,这将处理“悬停图像”
- OnMouseLeave,这将处理您的原始图像
public class MyButton : System.Windows.Forms.Button {
public MyButton()
: base() {
// No default implementation
}
protected override void OnMouseDown(Object sender, MouseEventArgs e) {
this.Image = Properties.Resources.PressedImage;
}
protected override void OnMouseEnter(Object sender, MouseEventArgs e) {
this.Image = Properties.Resources.HoveringImage;
}
protected override void OnMouseLeave(Object sender, MouseEventArgs e) {
this.Image = Properties.Resources.DefaultImage;
}
}
既然有多个按钮,当然可以将资源获取转换为属性
public Image DefaultImage {
get;
set;
}
public Image PressedImage {
get;
set;
}
public Image HoveringImage {
get;
set;
}
并在重写的虚拟方法中使用这些方法。这可能是你最好的方法。我会避免下面的答案(无意冒犯Phoexo),因为这是一个非常不寻常和混乱的解决方案
编写和编译新按钮后,可以执行简单的查找和替换来更改现有按钮的类型。您需要做一些清理,将每个按钮的三个属性设置为相应的图像,并清理一些设计器代码,但从长远来看,如果您必须添加更多按钮,这将使您的生活更轻松。我曾经实现过与David Anderson的解决方案非常相似的功能,但我保留了实际状态的记录,并重写了OnPaint方法来绘制正确的图像。我不知道它在任何方面是否更好,这只是我如何做到的。我曾经实现过它,非常类似于David Anderson的解决方案,但我记录了实际状态,并覆盖了OnPaint方法来绘制正确的图像。我不知道这是否更好,只是我是如何做到的。使用复选框或单选按钮,然后将外观更改为Button。您可以像普通按钮一样将图像添加到复选框或单选按钮 可以在设计器中或通过以下代码设置设置: 复选框=新复选框();
checkBox.Appearance=Appearance.Button 使用复选框或单选按钮,然后将外观更改为“按钮”。您可以像普通按钮一样将图像添加到复选框或单选按钮 可以在设计器中或通过以下代码设置设置: 复选框=新复选框();
checkBox.Appearance=Appearance.Button 有34个实例需要继承,而不在for循环中分配事件处理程序!有34个实例需要继承,而不在for循环中分配事件处理程序!