Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Windows窗体中的图形按钮状态_C#_Button - Fatal编程技术网

C#Windows窗体中的图形按钮状态

C#Windows窗体中的图形按钮状态,c#,button,C#,Button,我正在用VS2008在C#中构建一个windows窗体。我有大约32个按钮,我在默认按钮上放置了一个图像,但我希望每个按钮都有一个悬停/向上/向下的效果,我似乎在任何地方都找不到这些信息 也许我在寻找错误的术语,任何方向都是值得赞赏的。对我来说,这听起来像是一份继承的工作。我将对button类进行子类化,并通过重写OnHover、OnPress、OnLeave和OnPaint方法来处理hover、press和leave。在OnPaint中绘制按钮。对我来说,这听起来像是一项继承工作。我将对but

我正在用VS2008在C#中构建一个windows窗体。我有大约32个按钮,我在默认按钮上放置了一个图像,但我希望每个按钮都有一个悬停/向上/向下的效果,我似乎在任何地方都找不到这些信息


也许我在寻找错误的术语,任何方向都是值得赞赏的。

对我来说,这听起来像是一份继承的工作。我将对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循环中分配事件处理程序!