如何在Windows窗体中使用.png文件作为按钮?(使用C# - Visual Studio 2013)

6
我需要使用一个.png文件作为按钮。我只想向用户展示一张图片(没有任何额外的区域)。我的问题在于设计和指定应该响应点击的区域。我改变了一些按钮的属性,但是我无法实现我的目的。我将FlatStyle更改为Flat或BackColor更改为Transparent,但是按钮周围仍然有彩色背景。我需要完全删除背景。
我还尝试了PictureBox,但是我再次无法通过属性删除背景。

你走在正确的道路上。你应该使用 PictureBox(或者)创建一个用户控件。 - Rahul
2
@HighCore 不是真的。WinForms 支持自定义 UI 设计,但实现起来比较困难。WPF 更容易实现,并且使用 GPU 而非 CPU。 - Matin Lotfaliee
@MatinLotfaliee,请,拜托了,请给我展示你的winforms版本的这个。Winforms是无用的。而且很愚蠢。 - Federico Berasategui
@HighCore 请看一下这个。这是我使用Winforms .net 2.0编写的。当你不相信某件事情时,你就不会在它上面取得任何成功。 - Matin Lotfaliee
1
@HighCore,我看到了你的第一条评论。你说WinForms不支持自定义UI,这是错误的。接下来我告诉你它是支持的,但要困难得多,我也同意这一点。如果你不想分享如何在WPF中创建自定义按钮的知识作为答案,请不要误导其他人关于你不知道的事情。 - Matin Lotfaliee
显示剩余3条评论
1个回答

9
使用Button代替PictureBox。因为它还可以使用键盘和切换,而PictureBox则不可以。
在您的表单中添加一个Button并设置以下属性:
Image = optionalPNGImage //should be 32bpp (alpha channel enabled)
BackColor = Color.Transparent;
FlatStyle = FlatStyle.Flat;
FlatAppearance.BorderSize = 0;
FlatAppearance.MouseDownBackColor = Color.Transparent;
FlatAppearance.MouseOverBackColor = Color.Transparent;
ForeColor = System.Drawing.Color.White;
Text = "Hello";

结果会是这样: result 接下来,如果你想在鼠标悬停或点击时更改Button的图片,请创建这些事件:
//happens when your mouse enters the region of the button.
private void button1_MouseEnter(object sender, EventArgs e)
{
    button1.Image = picMouseOver;
}

//happens when your mouse leaves the region of the button.
private void button1_MouseLeave(object sender, EventArgs e)
{
    button1.Image = picRegular;
}

//happens when your mouse button is down inside the region of the button.
private void button1_MouseDown(object sender, MouseEventArgs e)
{
    button1.Image = picMouseDown;
}

//happens when your mouse button goes up after it went down.
private void button1_MouseUp(object sender, MouseEventArgs e)
{
    button1.Image = picRegular;
}

我按照您说的通过属性更改了所有内容,但按钮仍然具有方形背景!http://upload7.ir/imgs/2014-07/22846469106631005728.png - Reyhaneh Sharifzadeh
如果您正在使用PictureBox作为背景,那么您应该将按钮的父级更改为PictureBox而不是窗体。在构造函数或FormLoad方法中,使用以下代码:button1.Parent = pictureBox1。但最好的方法是在窗体的backgroundImage属性中设置背景,而不添加额外的代码。 - Matin Lotfaliee
是的,在按钮下面有一个PictureBox。正如你所说,我已经把它删除了,现在只剩下表格的BackgroundImage,但按钮还是和以前一样! - Reyhaneh Sharifzadeh
是的,我亲自测试了一下,你说得对。我改变了我的答案,使用Transparent BackColor和FlatAppearances,应该可以完成任务。 - Matin Lotfaliee
按钮的外观现在正是我想要的,谢谢。但是它仍然通过点击方形区域来响应!我希望它只通过点击图像来响应。 - Reyhaneh Sharifzadeh
1
@ReyhanehSH 你可以设置 ControlRegion。http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.region(v=vs.110).aspx - jordanhill123

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