`
hududanyzd
  • 浏览: 815601 次
文章分类
社区版块
存档分类
最新评论

C# 在winform画面上点击某个区域造成按钮按下效果的方法

 
阅读更多

在Winform的窗体中,存在背景图的情况下,不想在画面上加入按钮,只希望利用窗体自身的几个事件来实现按钮按下的效果,怎么样实现呢?

其实这也不难,只需要按照下列步骤即可实现,首先确定要按下的几个区域的坐标点和大小,准备好按下和弹出的图片,将这些坐标点和大小

组成一个个区域(使用GraphicsPath来完成)。然后使用几个Flage标志,标识是否区域的按下。具体实现的代码如下:

/// <summary>
/// 实时监控,酒位展示,酒柜介绍,网络订购4个按钮的位置参数
/// </summary>
int[,] BtnLocation = new int[4, 2]{{637,161},{683,269},{714,374},{637,478}};
/// <summary>
/// 4个按钮的Size参数
/// </summary>
Size BtnSize = new Size(285,92);
/// <summary>
/// 实时监控按钮是否按下的标志
/// </summary>
bool FlageMouseDownRealTime = false;
/// <summary>
/// 酒位展示按钮是否按下的标志
/// </summary>
bool FlageMouseDownWinePos = false;
/// <summary>
/// 酒柜介绍按钮是否按下的标志
/// </summary>
bool FlageMouseDownCupIntrol = false;
/// <summary>
/// 网络订购按钮是否按下的标志
/// </summary>
bool FlageMouseDownNetPurchase = false;
/// <summary>
/// 实时监控按钮的位置范围
/// </summary>
GraphicsPath gpRealTime = new GraphicsPath();
/// <summary>
/// 酒位展示按钮的位置范围
/// </summary>
GraphicsPath gpWinePos = new GraphicsPath();
/// <summary>
/// 酒柜介绍按钮的位置范围
/// </summary>
GraphicsPath gpCupIntrol = new GraphicsPath();
/// <summary>
/// 网络订购按钮的位置范围
/// </summary>
GraphicsPath gpNetPurchase = new GraphicsPath();

Graphics dc = null;


/// <summary>
/// 获取4个按钮的区域范围
/// </summary>
private void GetButtonGraphicPath()
{
FlageMouseDownRealTime = false;
FlageMouseDownWinePos = false;
FlageMouseDownCupIntrol = false;
FlageMouseDownNetPurchase = false;

Point[] pt = new Point[]{
new Point(BtnLocation[0,0],BtnLocation[0,1]),
new Point(BtnLocation[0,0]+BtnSize.Width,BtnLocation[0,1]),
new Point(BtnLocation[0,0]+BtnSize.Width,BtnLocation[0,1]+BtnSize.Height),
new Point(BtnLocation[0,0],BtnLocation[0,1]+BtnSize.Height)
};
gpRealTime.AddLines(pt);
pt = new Point[]{
new Point(BtnLocation[1,0],BtnLocation[1,1]),
new Point(BtnLocation[1,0]+BtnSize.Width,BtnLocation[1,1]),
new Point(BtnLocation[1,0]+BtnSize.Width,BtnLocation[1,1]+BtnSize.Height),
new Point(BtnLocation[1,0],BtnLocation[1,1]+BtnSize.Height)
};
gpWinePos.AddLines(pt);
pt = new Point[]{
new Point(BtnLocation[2,0],BtnLocation[2,1]),
new Point(BtnLocation[2,0]+BtnSize.Width,BtnLocation[2,1]),
new Point(BtnLocation[2,0]+BtnSize.Width,BtnLocation[2,1]+BtnSize.Height),
new Point(BtnLocation[2,0],BtnLocation[2,1]+BtnSize.Height)
};
gpCupIntrol.AddLines(pt);
pt = new Point[]{
new Point(BtnLocation[3,0],BtnLocation[3,1]),
new Point(BtnLocation[3,0]+BtnSize.Width,BtnLocation[3,1]),
new Point(BtnLocation[3,0]+BtnSize.Width,BtnLocation[3,1]+BtnSize.Height),
new Point(BtnLocation[3,0],BtnLocation[3,1]+BtnSize.Height)
};
gpNetPurchase.AddLines(pt);

}


private void InitialButtonsStyle()
{
GetButtonGraphicPath();

pxControl.Location = new Point(0,0);
pxControl.Size = new Size(1024,768);
SetBackGroudImg();
this.Controls.Add(pxControl);
dc = pxControl.CreateGraphics();
pxControl.MouseDoubleClick +=new MouseEventHandler(this.Main_MouseDoubleClick);
pxControl.MouseDown+=new MouseEventHandler(this.pxControl_MouseDown);
pxControl.MouseUp += new MouseEventHandler(this.pxControl_MouseUp);
pxControl.MouseMove += new MouseEventHandler(this.pxControl_MouseMove);
pxControl.MouseClick += new MouseEventHandler(this.pxControl_MouseClick);

}

/// <summary>
///按下4个按钮时的状态变化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pxControl_MouseDown(object sender,MouseEventArgs e)
{
if (gpRealTime.IsVisible(e.Location))
{
using(Image imgTemp = Image.FromFile(strWineRealStatusDownPath))
{
dc.DrawImage(imgTemp, BtnLocation[0, 0], BtnLocation[0, 1], BtnSize.Width,BtnSize.Height);
FlageMouseDownRealTime = true;
}
}
if (gpWinePos.IsVisible(e.Location))
{
using (Image imgTemp = Image.FromFile(strWinePosQueryDownPath))
{
dc.DrawImage(imgTemp, BtnLocation[1, 0], BtnLocation[1, 1], BtnSize.Width, BtnSize.Height);
FlageMouseDownWinePos = true;
}
}
if (gpCupIntrol.IsVisible(e.Location))
{
using (Image imgTemp = Image.FromFile(strWineCupIntroDownPath))
{
dc.DrawImage(imgTemp, BtnLocation[2, 0], BtnLocation[2, 1], BtnSize.Width, BtnSize.Height);
FlageMouseDownCupIntrol = true;
}
}
if (gpNetPurchase.IsVisible(e.Location))
{
using (Image imgTemp = Image.FromFile(strWinePurchaseDownPath))
{
dc.DrawImage(imgTemp, BtnLocation[3, 0], BtnLocation[3, 1], BtnSize.Width, BtnSize.Height);
FlageMouseDownNetPurchase = true;
}
}
}

/// <summary>
///离开4个按钮时的状态变化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pxControl_MouseMove(object sender, MouseEventArgs e)
{
if (gpRealTime.IsVisible(e.Location))
{
if (FlageMouseDownRealTime)
{
using (Image imgTemp = Image.FromFile(strWineRealStatusDownPath))
{
dc.DrawImage(imgTemp, BtnLocation[0, 0], BtnLocation[0, 1], BtnSize.Width, BtnSize.Height);
}
}
}
else
{
if (FlageMouseDownRealTime)
{
using (Image imgTemp = Image.FromFile(strWineRealStatusUpPath))
{
dc.DrawImage(imgTemp, BtnLocation[0, 0], BtnLocation[0, 1], BtnSize.Width, BtnSize.Height);
}
FlageMouseDownRealTime = false;
}
}
if (gpWinePos.IsVisible(e.Location))
{
if (FlageMouseDownWinePos)
{
using (Image imgTemp = Image.FromFile(strWinePosQueryDownPath))
{
dc.DrawImage(imgTemp, BtnLocation[1, 0], BtnLocation[1, 1], BtnSize.Width, BtnSize.Height);
}
}
}
else
{
if (FlageMouseDownWinePos)
{
using (Image imgTemp = Image.FromFile(strWinePosQueryUpPath))
{
dc.DrawImage(imgTemp, BtnLocation[1, 0], BtnLocation[1, 1], BtnSize.Width, BtnSize.Height);
}
FlageMouseDownWinePos = false;
}
}
if (gpCupIntrol.IsVisible(e.Location))
{
if (FlageMouseDownCupIntrol)
{
using (Image imgTemp = Image.FromFile(strWineCupIntroDownPath))
{
dc.DrawImage(imgTemp, BtnLocation[2, 0], BtnLocation[2, 1], BtnSize.Width, BtnSize.Height);
}
}
}
else
{
if (FlageMouseDownCupIntrol)
{
using (Image imgTemp = Image.FromFile(strWineCupIntroUpPath))
{
dc.DrawImage(imgTemp, BtnLocation[2, 0], BtnLocation[2, 1], BtnSize.Width, BtnSize.Height);
}
FlageMouseDownCupIntrol = false;
}
}
if (gpNetPurchase.IsVisible(e.Location))
{
if (FlageMouseDownNetPurchase)
{
using (Image imgTemp = Image.FromFile(strWinePurchaseDownPath))
{
dc.DrawImage(imgTemp, BtnLocation[3, 0], BtnLocation[3, 1], BtnSize.Width, BtnSize.Height);
}
}
}
else
{
if (FlageMouseDownNetPurchase)
{
using (Image imgTemp = Image.FromFile(strWinePurchaseUpPath))
{
dc.DrawImage(imgTemp, BtnLocation[3, 0], BtnLocation[3, 1], BtnSize.Width, BtnSize.Height);
}
FlageMouseDownNetPurchase = false;
}
}
}

/// <summary>
///松开4个按钮时的状态变化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pxControl_MouseUp(object sender, MouseEventArgs e)
{
if (gpRealTime.IsVisible(e.Location))
{
using (Image imgTemp = Image.FromFile(strWineRealStatusUpPath))
{
dc.DrawImage(imgTemp, BtnLocation[0, 0], BtnLocation[0, 1], BtnSize.Width, BtnSize.Height);
FlageMouseDownRealTime = false;
}
}
if (gpWinePos.IsVisible(e.Location))
{
using (Image imgTemp = Image.FromFile(strWinePosQueryUpPath))
{
dc.DrawImage(imgTemp, BtnLocation[1, 0], BtnLocation[1, 1], BtnSize.Width, BtnSize.Height);
FlageMouseDownWinePos = false;
}
}
if (gpCupIntrol.IsVisible(e.Location))
{
using (Image imgTemp = Image.FromFile(strWineCupIntroUpPath))
{
dc.DrawImage(imgTemp, BtnLocation[2, 0], BtnLocation[2, 1], BtnSize.Width, BtnSize.Height);
FlageMouseDownCupIntrol = false;
}
}
if (gpNetPurchase.IsVisible(e.Location))
{
using (Image imgTemp = Image.FromFile(strWinePurchaseUpPath))
{
dc.DrawImage(imgTemp, BtnLocation[3, 0], BtnLocation[3, 1], BtnSize.Width, BtnSize.Height);
FlageMouseDownNetPurchase = false;
}
}
}


/// <summary>
/// 按下4个按钮时的事件的变化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pxControl_MouseClick(object sender, MouseEventArgs e)
{
if (gpRealTime.IsVisible(e.Location))
{
btnRealStatus_Click(null, null);
}
else if (gpWinePos.IsVisible(e.Location))
{
btnWinePosQuery_Click(null, null);
}
else if (gpCupIntrol.IsVisible(e.Location))
{
btnWineCupIntro_Click(null, null);
}
else if (gpNetPurchase.IsVisible(e.Location))
{
btnPurchase_Click(null, null);
}
}




分享到:
评论

相关推荐

    C# winForm 按钮的综合性美化

    在C# WinForm开发中,按钮控件是用户界面中不可或缺的部分,用于接收用户的点击操作。本主题将深入探讨如何实现“C# winForm 按钮的综合性美化”,包括但不限于按钮的圆角、边框美化、动态效果、状态显示以及图片...

    C# Winform ListView添加按钮列

    确保按钮的大小适中,点击区域合理,以及在各种主题和高DPI环境下都能正常显示和操作。 总的来说,“C# Winform ListView添加按钮列”涉及了控件扩展、自定义绘制、事件处理等多个知识点。通过理解这些概念,开发者...

    C# winform 标题栏添加按钮(源码)

    可以通过处理WM_NCHITTEST消息来检测鼠标是否在按钮区域内,如果在,则模拟按钮按下。 5. **添加事件处理逻辑**:当用户点击按钮时,需要执行相应的业务逻辑。这可能涉及到添加事件处理函数,并在`WndProc`中调用...

    c# winform 非常漂亮的按钮 玻璃按钮效果 按钮样式 风格 希望可以给大家提供帮助 源码

    本资源提供的"非常漂亮的按钮 - 玻璃按钮效果"就是一个很好的示例,它展示了如何利用C#语言和WinForm技术来实现一种视觉上类似于玻璃质感的按钮,提升用户界面的吸引力。 首先,我们要理解C# WinForm中的控件体系。...

    WinForm 中在窗口标题栏上加按钮.zip

    在Windows Forms(WinForm)开发中,有时我们可能需要自定义窗口标题栏,例如在标题栏上添加额外的按钮功能。这个"WinForm 中在窗口标题栏上加按钮.zip"文件提供了一个示例,帮助开发者了解如何在WinForm应用程序的...

    c# winform glassbutton 很漂亮的按钮样式 玻璃按钮

    c# winform编程 玻璃按钮样式 非常漂亮的按钮样式库,直接打开可以使用,支持VB,大家下载吧。

    C# winform自动点击confirm确定按钮源代码.rar

    在C# WinForm开发中,有时我们可能需要实现自动化操作,比如自动点击确认按钮。这个压缩包中的源代码就是为了解决这样的需求。文件主要包含了以下几个部分: 1. **Form1.Designer.cs**: 这是WinForm设计器自动生成...

    WinForm圆形按钮(C#)

    - 考虑到按钮的交互效果,我们还需要在鼠标悬停和按下时改变按钮的外观。这可以通过重写`OnMouseEnter`, `OnMouseLeave`, `OnMouseDown`, 和 `OnMouseUp` 方法来实现。 3. **添加事件处理**: - 为了使圆形按钮...

    C# winform 方法实现 微软窗口的帮助文档按钮和版本说明按钮

    在C# WinForm开发中,创建具有微软风格的帮助文档按钮(通常表示为“?”或“Help”)和版本说明按钮是提升用户界面专业性的重要步骤。这些按钮通常用于提供应用程序的使用指南和版本信息,帮助用户更好地理解和操作...

    c# winform 超漂亮按钮 控件

    例如,按钮的正常状态、鼠标悬浮状态和按下状态可能都有对应的图片资源,以实现平滑的过渡效果。 在实际应用中,这样的自定义按钮控件可以极大地提升应用程序的用户体验,让界面更具吸引力。开发者可以通过设置这些...

    C# winform 实现按钮固定到菜单栏以及右键菜单

    在C# WinForm应用开发中,常常需要创建用户友好的界面,这可能涉及到将功能按钮固定到菜单栏或实现右键菜单。以下是一些关键知识点,涵盖了如何在C# WinForm环境中实现这样的功能: 1. **菜单栏创建**:在WinForm...

    C# winform学习用例子 按钮点击计数器

    这个“C# Winform学习用例子 按钮点击计数器”是初学者掌握WinForms基础的一个很好的实践项目。下面将详细介绍该项目中的关键知识点。 1. **WinForms基础知识**: - **窗体(Form)**:在WinForms中,窗体是应用...

    C#_WinForm鼠标自动点击程序

    《C# WinForm鼠标自动点击程序详解》 在软件开发领域,提高用户操作效率和便捷性始终是重要的设计目标。C# WinForm平台为开发者提供了丰富的功能,使得创建交互式应用变得简单。本文将深入探讨如何利用C# WinForm...

    C# WinForm 自定义按钮控件

    C# WinForm 开发的自定义水晶控件!代码也是我在网上偶然发现的,特0分分享出来,让CS的童鞋们知道客户端程序也不再单一!

    WinForm C# 动态添加按钮

    这个“WinForm C# 动态添加按钮”的主题主要涵盖了以下几个核心知识点: 1. **控件的动态创建**: 在WinForms中,我们可以使用代码来创建和添加控件,而不是只在设计时通过拖放。动态创建按钮意味着在运行时根据...

    C#实现Winform实现区域截屏

    在本文中,我们将深入探讨如何使用C#编程语言在Windows Forms(Winform)环境中实现一个区域截屏功能。首先,我们需要了解Winform的基本概念,它是.NET Framework中的一个库,用于构建桌面应用程序,提供了丰富的...

    C# Winform可长按延时触发事件的按钮控件

    对应文章地址在https://blog.csdn.net/mazhiyuan1981/article/details/121286666

    C#Winform图文玻璃按钮

    为了使按钮在不同状态(如鼠标悬停、按下等)下有不同的视觉反馈,需要在控件中添加事件处理程序,如MouseEnter、MouseLeave、MouseDown和MouseUp。在这些事件中,改变按钮的背景颜色、透明度或边框样式,从而实现...

    C#编程 WinForm窗体开发 Selected(源码)

    C#编程 WinForm窗体开发 Selected(源码)C#编程 WinForm窗体开发 Selected(源码)C#编程 WinForm窗体开发 Selected(源码)C#编程 WinForm窗体开发 Selected(源码)C#编程 WinForm窗体开发 Selected(源码)C#编程 WinForm...

    c# winform自定义动态按钮控件

    dll文件,拖拽至工具栏即可使用,可自行更换颜色和按钮状态

Global site tag (gtag.js) - Google Analytics