C# WinForms中的自定义按钮

3
我已经做了一些研究,但似乎找不到我要的东西。
我想做的是在Windows表单中制作一个“自定义”按钮。 这基本上只是将默认的“灰色”背景更改为自定义图像的问题。 当悬停和单击按钮时,也将使用自定义图像。
这不仅仅是更改背景图像,因为我想使用的图像具有透明背景和圆角边缘,并且我希望悬停/点击时使用自定义图像。 我希望按钮的其他所有内容都像普通按钮一样运行。
这可行吗?

1
听起来更像是你想使用WPF。但是,你有转移到WPF的选项吗?还是你被困在Windows Forms中了? - Brad Semrad
对于这个问题,我基本上只能使用Windows Forms。 - Jpin
从这里到那里最快的途径可能是许可所需的控件,而不是从头开始编写。 - Bevan
4
在Winforms中,Button类有些不寻常,它有很少的选项可以通过代码来改变其外观。有四个不同的按钮渲染器类,但它们都是私有的。你需要从ButtonBase派生出自己的类。这个基类提供了足够的管道让你的类像一个按钮一样运作,但不足以使它看起来像一个按钮。这就是你想要改变的东西。 - Hans Passant
@BradSemrad 这与WPF无关。 - SE13013
2个回答

4
我找到的解决方案是将按钮的FlatStyle设置为Flat,并将所有边框都设为0。然后我遇到了一个问题,就是按钮的焦点(它显示了一个小边框)。为了解决这个问题,我按照这个教程操作:

http://dotnetstep.blogspot.com/2009/06/remove-focus-rectangle-from-button.html

有了这个设置,我只需要为按钮添加事件,以便在进行某些动作时更改图像:

    private void button1_MouseLeave(object sender, EventArgs e)
    {
        this.button1.Image = Properties.Resources._default;
    }

    private void button1_MouseEnter(object sender, EventArgs e)
    {
        this.button1.Image = Properties.Resources._hover;
    }        

    private void button1_MouseDown(object sender, MouseEventArgs e)
    {
        this.button1.Image = Properties.Resources._clicked;
    }

    private void button1_MouseUp(object sender, MouseEventArgs e)
    {
        this.button1.Image = Properties.Resources._default;
    }

希望这能帮助到其他人!

3

谢谢回复。嗯,这看起来像是一个漫长的任务!我会去研究一下。 - Jpin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接