请问C# winform如何实现将一个不规则形状的图片弄成按键? 50

编译软件是visualstudio,想自己用PS或其它绘图软件画两个不规则图形A与B,然后将这两个不规则图形放到winform里面充当按键,当鼠标离开按键的时候显示图形A... 编译软件是visual studio,想自己用PS或其它绘图软件画两个不规则图形A与B,然后将这两个不规则图形放到winform里面充当按键,当鼠标离开按键的时候显示图形A,当鼠标悬停或点击的时候显示图形B。请问如何能做到这种效果? 展开
 我来答
瑛甸
2023-02-11 · TA获得超过214个赞
知道答主
回答量:138
采纳率:0%
帮助的人:5万
展开全部
您可以使用自定义控件来实现这种效果。首先,创建一个继承自System.Windows.Forms.Control的类,然后重写其OnPaint方法来绘制不规则形状的图片。然后,通过在控件上附加鼠标事件处理器,来切换显示图形A和图形B。以下是一个简单的代码示例:
using System;
using System.Drawing;
using System.Windows.Forms;

public class IrregularButton : Control
{
private Image _imageA;
private Image _imageB;

public IrregularButton()
{
this.BackColor = Color.Transparent;
this.MouseEnter += new EventHandler(IrregularButton_MouseEnter);
this.MouseLeave += new EventHandler(IrregularButton_MouseLeave);
this.MouseDown += new MouseEventHandler(IrregularButton_MouseDown);
this.MouseUp += new MouseEventHandler(IrregularButton_MouseUp);
}

public Image ImageA
{
get { return _imageA; }
set { _imageA = value; }
}

public Image ImageB
{
get { return _imageB; }
set { _imageB = value; }
}

protected override void OnPaint(PaintEventArgs e)
{
if (_imageA != null)
{
e.Graphics.DrawImage(_imageA, new Rectangle(0, 0, this.Width, this.Height));
}
}

private void IrregularButton_MouseEnter(object sender, EventArgs e)
{
if (_imageB != null)
{
this.Invalidate();
}
}

private void IrregularButton_MouseLeave(object sender, EventArgs e)
{
if (_imageA != null)
{
this.Invalidate();
}
}

private void IrregularButton_MouseDown(object sender, MouseEventArgs e)
{
if (_imageB != null)
{
this.Invalidate();
}
}

private void IrregularButton_MouseUp(object sender, MouseEventArgs e)
{
if (_imageA != null)
{
this.Invalidate();
}
}
}

您可以在WinForm窗体中使用这个自定义控件,并设置ImageA和ImageB属性来设置图形A和图形
创作者zUzVB1Sl31
2021-07-10 · 编程类资料、英语学习资料
创作者zUzVB1Sl31
采纳数:1332 获赞数:5968

向TA提问 私信TA
展开全部
一看你就不是C++转过来的,最简单的办法是winform按钮设置省flag然后把边设置为0。这种是有缺点的,你按他的时候不怎么生动,要生动点那就给他按钮事件,鼠标enter、leave、mouseup、mousedown、mousemove全部给全,每一个事件按钮的样子要先P好。然后设置按钮弧度。有人说为什么不用图片去处理,你不要自作聪明,图片是要缓冲的,多了你就头痛了。
这样做你会发现每个按钮都要去写,很头痛,那就做成自定义控件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
纳西妲的罐装知识
2022-01-08 · 讲述身边事,发布作文,传播学习知识
纳西妲的罐装知识
采纳数:26 获赞数:62

向TA提问 私信TA
展开全部
涉及知识:控件重绘、自定义控件(User Control类继承)
先创建自定义控件,
1、让后将backcolor设置为transparents(透明),
2、再为控件添加Mouse_Enter和Mouse_Leave事件,
3、定义重绘函数,例如RePaint(object sender,PaintEventArgs e)(名字随便起,参数要一样)
4、定义int变量用于指示状态,一个数字表示一个状态,例如0表示普通状态,1表示悬停状态,2表示按下后状态......
3、Mouse_Enter时先修改自定义变量,再执行Validate(RePaint)函数
4、再在重绘函数中画图,如果是提前ps好的,可以直接加载图片绘制
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
咪咪yo
2023-02-01 · 超过13用户采纳过TA的回答
知道答主
回答量:167
采纳率:0%
帮助的人:5.9万
展开全部
可以使用 Visual Studio 的图形控件将不规则图形 A 和 B 作为图片放到 Winform 控件中,然后使用事件 MouseLeave 和 MouseDown 来设置不同图片的显示效果。代码如下:
Private Sub PictureBox1_MouseLeave(sender As Object, e As EventArgs) Handles PictureBox1.MouseLeave
PictureBox1.Image = Image.FromFile("path-to-image-A")
End Sub
Private Sub PictureBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseDown
PictureBox1.Image = Image.FromFile("path-to-image-B")
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
魔法软糖&#x2122;
2021-12-14 · TA获得超过836个赞
知道小有建树答主
回答量:822
采纳率:94%
帮助的人:121万
展开全部
这个实现起来比较麻烦。首先做两个透明png图片,然后获取图片的不透明区域的region,然后每隔25ms获取鼠标位置,判断该点是否在region内部,如果是就切换图片并将Enable设为true,离开区域就切换回来。
PS:其他人的方法点击区域是矩形而不是不规则图形。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(10)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式