C# 使用PictureBox实现图片按钮控件的示例步骤

引言

  我们有时候会在程序的文件夹里看见一些图标,而这些图标恰好是作为按钮的背景图片来使用的。鼠标指针在处于不同状态时,有“进入按钮”、“按下左键”,“松开”,“离开按钮”,则按钮的背景图片也在发生改变。这些图片大致如下(来自爱奇艺万能播放器PC端):

  全文仅以第一张图片素材为例,这张图片可以分为4段(下图所示),恰好表示鼠标指针在操作控件时各个不同的状态,从左到右依次表示为“初始状态”(默认显示的背景)、“指针进入按钮区域或鼠标左键松开”,“鼠标左键按下不动”,“鼠标指针离开按钮区域”

  本身这个图片素材设计的就很巧妙,它的尺寸是164 * 41,因此每一段的尺寸刚好是41 * 41

  在贴代码之前请先看看效果:

编译环境及说明

  • Microsoft Visual Studio 2010
  • C# .Net Framework 4.0
  • 除了实现这个图片按钮的功能,还添加了一些代码来减少甚至防止图片按钮在与鼠标指针交互时的闪烁

图片素材分割

  显然上述的图片素材需要分割为4段作为鼠标指针的不同状态,实现分割的思路为

  • 把图片转换为Image对象
  • 克隆该Image对象(防止直接操作控件背景导致问题)
  • 创建元素类型为Bitmap的容器List,用于存放分割后的4个图片对象
  • 定义矩形区域Rectangle结构体,它用来表明应该取整个图片素材中的哪个部分,用for循环逐个计算出这4段图片的左上角坐标(即起始坐标)、宽度、高度,再将值对应的赋予Rectangle结构体中的属性
  • 克隆上一步Rectangle结构体所对应区域下的图片块,并添加到第3步中提到的List容器中并返回该容器

  由此可以定义一个函数 ImageSplit ,代码如下

///

/// 图片分割函数,此处仅仅按图片宽度来分割
///
/// 图片素材宽度
/// 要分割为几段,默认是1段
/// 分割后的图片集合
private List ImageSplit(int ImageWidth, int SegmentsNum = 1)
{
// 定义分割后的图片存放容器
List SplitedImage = new List();
// 克隆按钮背景图片
Bitmap SrcBmp = new Bitmap(this.Image);
// 指定图片像素格式为ARGB型
PixelFormat ReslouteFormat = PixelFormat.Format32bppArgb;
// 指定分割区域
Rectangle SplitAreaRec = new Rectangle();
// 如果图片尺寸为负值
if (ImageWidth <= 0 || SegmentsNum <= 0)
return SplitedImage;
else
{
// 依据要分割的段数来做循环
// 从 0(含) 到 SegmentsNum - 1(含)
for (int i = 0; i < SegmentsNum; i++)
{
/*
* 在这里要把图片分割为4段小图片,每一段图片大小均为41 * 41
* 以下列举出每个小图片的左上角坐标(即起始坐标)
* (0, 0)
* (41, 0)
* (82, 0)
* (123, 0)
* Y 坐标均为 0
*
* 计算每个小图片的宽度:ImageWidth / SegmentsNum (总宽度/要分割的段数)
* 因此 X = i * (ImageWidth / SegmentsNum)
*/
SplitAreaRec.X = 0 + i * (ImageWidth / SegmentsNum);
SplitAreaRec.Y = 0;
// 小图片为正方形,所以以下这两个值一样
SplitAreaRec.Width = ImageWidth / SegmentsNum;
SplitAreaRec.Height = ImageWidth / SegmentsNum;
// 以指定的像素格式,克隆分割的图像
Bitmap SplitedBmp = SrcBmp.Clone(SplitAreaRec, ReslouteFormat);
// 添加进集合
SplitedImage.Add(SplitedBmp);
}
GC.Collect();
return SplitedImage;
}
}

事件处理

  该图片按钮控件有几个事件需要处理,包括:

  • OnPaint(控件绘制事件)
  • OnMouseEnter(鼠标指针进入控件区域触发事件)
  • OnMouseDown (鼠标左键按下)
  • OnMouseUp  (鼠标左键松开)
  • OnMouseLeave(鼠标指针离开控件区域)

OnPaint事件

  首先在自定义控件类中定义私有对象,缓冲 Image 对象(最开始为空白图形)和对应的缓冲 Graphics 对象(在空白图形上绘制图案),这是为了减少闪烁

Image buffImg;
Graphics buffImgG;

  具体代码如下:

protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
// 创建空图形
buffImg = new Bitmap(Width,Height);
// 根据空图形创建画布Graphics对象
buffImgG = Graphics.FromImage(buffImg);
// 用画布对象,以背景色刷新空图形
buffImgG.Clear(this.BackColor);

//双三次插值
pe.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
//抗锯齿
pe.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

//图形轨迹
GraphicsPath gp = new GraphicsPath();
//限定圆形绘制长方形区域
//限定为正方形
Rectangle limitedRec = new Rectangle();
Point startDrawingPoint = new Point(0, 0);
limitedRec.Location = startDrawingPoint;
limitedRec.Size = new Size(Width - 1, Height - 1);

if (IsWeightWidthEqual)
{
int fixedWidth = Width - 1;
Height = Width;
Width = Height;
limitedRec.Size = new Size(fixedWidth, fixedWidth);
}
//以下代码视为了把图片框的显示边界改成圆形
//添加轨迹为椭圆
gp.AddEllipse(limitedRec);
//重新设置边界
Region rg = new Region(gp);
this.Region = rg;
//销毁资源
rg.Dispose();
gp.Dispose();
}

鼠标交互事件

  上述5个事件除 OnPaint 之外,其余均为鼠标交互事件

  因为本文对控件闪烁的问题做了处理,所以在重写(Override)此类事件函数时需要添加一个 BufferedGraphics 对象并为之分配空间,最后再使用它来渲染(Render)绘制好的图形至当前控件的 Graphics 画布(/设备)对象(相当于添加一个中间缓冲层将图形绘制完成后再直接覆盖到控件背景上以避免闪烁)

  以下是OnMouseEnter事件的代码:

//1.鼠标进入
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
using (Graphics g = Graphics.FromHwnd(this.Handle))
{
// 双三次插值
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
// 抗锯齿
g.SmoothingMode = SmoothingMode.AntiAlias;
// 再次以背景色刷新空白图形
buffImgG.Clear(this.BackColor);
// 在空白图形上绘制分割后的第2个小图片
buffImgG.DrawImageUnscaledAndClipped(SplitedImage[1], ClientRectangle);
// 依据上述空白图形buffImgG创建缓冲Graphics,指定区域为该控件工作区
BufferedGraphics buff = BufferedGraphicsManager.Current.Allocate(buffImgG, ClientRectangle);
// BufferedGraphics绘制整个图形,指定绘制区域为该控件工作区
// 此处推荐使用DrawImageUnscaledAndClipped
buff.Graphics.DrawImageUnscaledAndClipped(buffImg, ClientRectangle);
// 图形缓冲区写入到当前控件Graphics对象
buff.Render(g);
}
}

  其它的鼠标交互事件类似,只是绘制的背景图片不一样而已,即这句代码 buffImgG.DrawImageUnscaledAndClipped(SplitedImage[1], ClientRectangle); 中的 SplitedImage 索引各有不同,就不一一重复了。

代码汇总

  那么完整的程序应该如何运行呢?

  在VS2010中新建一个解决方案,其中添加2个项目,一个是WinForm窗体应用程序,这个是用来测试控件的;另一个是Windows窗体控件库。窗体控件库默认继承的是 UserControl 这个类,但是在本文笔者将其改为继承 PictureBox 类,即自己做的这个控件还是属于PictureBox这个类型而不是 UserControl

  所以完整的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;

using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
using System.Security.Cryptography;
using System.Drawing.Imaging;

namespace PicBtn
{
public partial class RoundPictureBox : PictureBox
{
[Category("派生属性"), Description("有的图标是正圆形,因此此处设置控件的长宽是否相等")]
public bool IsWeightWidthEqual { get; set; }
// 该属性尚未使用
[Category("派生属性"), Description("表明是否由多个图片来表示图片框的按钮特效")]
public bool IsMultiImage { get; set; }
// 分割后图片容器
List SplitedImage = null;

Image buffImg;
Graphics buffImgG;
public RoundPictureBox()
{
InitializeComponent();
//双缓冲区绘制
DoubleBuffered = true;
SizeMode = PictureBoxSizeMode.Normal;
// 图片素材路径,视具体情况而定(可以更改)
this.ImageLocation = @"D:\文档\VS项目\PicButton\view_next.png";
//按钮图片分割
this.Image = Image.FromFile(ImageLocation);
// 图片宽度(Width)164,将其分为4段并放到容器中
SplitedImage = ImageSplit(164, 4);
}

protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
// 创建空图形
buffImg = new Bitmap(Width,Height);
// 根据空图形创建画布Graphics对象
buffImgG = Graphics.FromImage(buffImg);
// 用画布对象,以背景色刷新空图形
buffImgG.Clear(this.BackColor);

//双三次插值
pe.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
//抗锯齿
pe.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

//图形轨迹
GraphicsPath gp = new GraphicsPath();
//限定圆形绘制长方形区域
//限定为正方形
Rectangle limitedRec = new Rectangle();
Point startDrawingPoint = new Point(0, 0);
limitedRec.Location = startDrawingPoint;
limitedRec.Size = new Size(Width - 1, Height - 1);

if (IsWeightWidthEqual)
{
int fixedWidth = Width - 1;
Height = Width;
Width = Height;
limitedRec.Size = new Size(fixedWidth, fixedWidth);
}
//以下代码是为了把图片框的显示边界改成圆形
//添加轨迹为椭圆
gp.AddEllipse(limitedRec);
//重新设置边界
Region rg = new Region(gp);
this.Region = rg;
//销毁资源
rg.Dispose();
gp.Dispose();
}

//绘制鼠标进入点击并离开的图像
/*
* 完整的点击过程如下(只考虑鼠标左键的情况)
* 1. 鼠标指针进入PictureBox(以下简称“该控件”),触发事件 MouseEnter
* 2. 鼠标按下不动的一瞬间,触发事件 MouseDown
* 3. 鼠标松开一瞬间,触发事件 MouseUp
* 4. 鼠标指针离开该控件,触发事件 MouseLeave
*/
//1.鼠标进入
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
using (Graphics g = Graphics.FromHwnd(this.Handle))
{
// 双三次插值
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
// 抗锯齿
g.SmoothingMode = SmoothingMode.AntiAlias;
// 再次以背景色刷新空白图形
buffImgG.Clear(this.BackColor);
// 在空白图形上绘制分割后的第2个小图片
buffImgG.DrawImageUnscaledAndClipped(SplitedImage[1], ClientRectangle);
// 依据上述空白图形buffImgG创建缓冲Graphics,指定区域为该控件工作区
BufferedGraphics buff = BufferedGraphicsManager.Current.Allocate(buffImgG, ClientRectangle);
// BufferedGraphics绘制整个图形,指定绘制区域为该控件工作区
// 此处推荐使用DrawImageUnscaledAndClipped
buff.Graphics.DrawImageUnscaledAndClipped(buffImg, ClientRectangle);
// 图形缓冲区写入到当前控件Graphics对象
buff.Render(g);
}
}
//2.鼠标按下
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
using (Graphics g = Graphics.FromHwnd(this.Handle))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = SmoothingMode.HighQuality;

buffImgG.InterpolationMode = InterpolationMode.HighQualityBicubic;
buffImgG.SmoothingMode = SmoothingMode.HighQuality;
buffImgG.Clear(BackColor);
buffImgG.DrawImageUnscaledAndClipped(SplitedImage[2],ClientRectangle);
BufferedGraphics buff = BufferedGraphicsManager.Current.Allocate(buffImgG, ClientRectangle);
buff.Graphics.DrawImageUnscaledAndClipped(buffImg, ClientRectangle);
buff.Render(g);
}
}

//3. 鼠标按键松开
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
using (Graphics g = Graphics.FromHwnd(this.Handle))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = SmoothingMode.HighQuality;
buffImgG.Clear(BackColor);
buffImgG.DrawImageUnscaledAndClipped(SplitedImage[1], ClientRectangle);
BufferedGraphics buff = BufferedGraphicsManager.Current.Allocate(buffImgG, ClientRectangle);
buff.Graphics.DrawImageUnscaledAndClipped(buffImg, ClientRectangle);
buff.Render(g);
}
}

//4.鼠标离开
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
using (Graphics g = Graphics.FromHwnd(this.Handle))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.SmoothingMode = SmoothingMode.HighQuality;

buffImgG.Clear(BackColor);
buffImgG.DrawImageUnscaledAndClipped(SplitedImage[3], ClientRectangle);
BufferedGraphics buff = BufferedGraphicsManager.Current.Allocate(buffImgG, ClientRectangle);
buff.Graphics.DrawImageUnscaledAndClipped(buffImg, ClientRectangle);
buff.Render(g);
}
}

///

/// 图片分割函数,此处仅仅按图片宽度来分割
///
/// 图片素材宽度
/// 要分割为几段,默认是1段
/// 分割后的图片集合
private List ImageSplit(int ImageWidth, int SegmentsNum = 1)
{
// 定义分割后的图片存放容器
List SplitedImage = new List();
// 克隆按钮背景图片
Bitmap SrcBmp = new Bitmap(this.Image);
// 指定图片像素格式为ARGB型
PixelFormat ReslouteFormat = PixelFormat.Format32bppArgb;
// 指定分割区域
Rectangle SplitAreaRec = new Rectangle();
// 如果图片尺寸为负值
if (ImageWidth <= 0 || SegmentsNum <= 0)
return SplitedImage;
else
{
// 依据要分割的段数来做循环
// 从 0(含) 到 SegmentsNum - 1(含)
for (int i = 0; i < SegmentsNum; i++)
{
/*
* 在这里要把图片分割为4段小图片,每一段图片大小均为41 * 41
* 以下列举出每个小图片的左上角坐标(即起始坐标)
* (0, 0)
* (41, 0)
* (82, 0)
* (123, 0)
* Y 坐标均为 0
*
* 计算每个小图片的宽度:ImageWidth / SegmentsNum (总宽度/要分割的段数)
* 因此 X = i * (ImageWidth / SegmentsNum)
*/
SplitAreaRec.X = 0 + i * (ImageWidth / SegmentsNum);
SplitAreaRec.Y = 0;
// 小图片为正方形,所以以下这两个值一样
SplitAreaRec.Width = ImageWidth / SegmentsNum;
SplitAreaRec.Height = ImageWidth / SegmentsNum;
// 以指定的像素格式,克隆分割的图像
Bitmap SplitedBmp = SrcBmp.Clone(SplitAreaRec, ReslouteFormat);
// 添加进集合
SplitedImage.Add(SplitedBmp);
}
GC.Collect();
return SplitedImage;
}
}
}
}

  还有设计器的代码:

using System.Windows.Forms;
namespace PicBtn
{
partial class RoundPictureBox
{
///

/// 必需的设计器变量。
///
private System.ComponentModel.IContainer components = null;

///

/// 清理所有正在使用的资源。
///
/// 如果应释放托管资源,为 true;否则为 false。
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region 组件设计器生成的代码

///

/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
///
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
// this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);//解决闪烁
UpdateStyles();
}

#endregion
}
}

  在生成解决方案之后,需要在窗体应用程序项目中引用控件库的项目,会在窗体设计器的工具箱中看见自己写的这个图片按钮控件,如下图

  最后把这个控件拖到自己窗体上即可,再调试、运行并观察结果,效果动态图在引言部分

作者:TaeYoona
出处:https://www.cnblogs.com/SNSD-99/

以上就是C# 使用PictureBox实现图片按钮控件的示例步骤的详细内容,更多关于C# 使用PictureBox实现图片按钮控件的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#控件Picturebox实现鼠标拖拽功能

    工作需要,要在一个Form里面实现一个实时预览的picturebox图像,由于picturebox可能会遮挡到其后面的画面,所以要求picturebox可以由用户自行拖拽,类似于悬浮框. 原理说明 在网上兜了几圈之后,决定用三段代码实现.首先要注册鼠标的三个事件:移动.鼠标左键按下.鼠标左键抬起,当然,都是在picturebox上的动作.注册三个事件后,即可以在三个对应的事件函数里面实现拖拽. 代码实例 首先在窗体设计器生成的代码里面注册picturebox的鼠标事件.注:网上说当你添加pict

  • C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法

    本文实例讲述了C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法.分享给大家供大家参考,具体如下: 在Winform中如果将一个透明图片放在窗体上能正常显示透明,但是如果将该图片放在另一个控件上会导致不能显示透明效果. 解决这种情况,可以采取在控件上使用GDI+绘画出透明图片. 这里我们就以一个pictureBox2控件上面重叠一张png透明图片为例: 我们只需要给pictureBox2控件添加Paint事件,然后对png透明图片进行绘制即可,代码如下: private voi

  • C#给picturebox控件加图片选中状态的2个方法

    方法一: 简单的方法就是改变picturebox 控件的borderstyle样式 currentSelectPicBox.BorderStyle = BorderStyle.Fixed3D;            currentSelectPicBox.Refresh();//强制控件重新绘制 方法二 在picturebox控件加一个矩形框  但是这种方法在程序中反应比较慢. 添加矩形框的方法:            Graphics pictureborder = currentSelect

  • C#控件picturebox实现画图功能

    本文实例为大家分享了C# picturebox实现画图功能的具体代码,供大家参考,具体内容如下 在Form上添加 一个pictureBox,一个button控件 如图所示: 这样我们的绘画面板就弄好了,把pictureBox的dock属性设置为fill,按键为清屏的作用. private Point p1, p2;//定义两个点(启点,终点) private static bool drawing=false;//设置一个启动标志 private void pictureBox1_MouseDo

  • c#重写TabControl控件实现关闭按钮的方法

    1.c#里面的TabControl控件没有关闭按钮,而且很难看. 2.有一些已经做好的第三方控件,但是收费. 3.由于我的故障树推理诊断项目在绘图的时候允许同时打开多个文档进行操作,就要实现类似于浏览器的多标签功能,而且要可以关闭. 4.所以自己写一个类继承TabControl类,然后重写一些里面的方法即可实现. 5.特色:有关闭按钮,标签有背景颜色,选中的标签和没选中的颜色不一样,实现鼠标中键和右键的功能 先看我的项目中的完整代码,有很多代码是我的项目需要,可根据你的项目需求删减,核心的代码后

  • C#控件picturebox实现图像拖拽和缩放

    本文实例为大家分享了C# picturebox实现图像拖拽和缩放的具体代码,供大家参考,具体内容如下 1.核心步骤: ①新建Point类型全局变量mouseDownPoint,记录拖拽过程中鼠标位置: ②MouseDown事件记录Cursor位置: ③MouseMove事件计算移动矢量,并更新pictureBox1.Location. 代码: private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { if (e.B

  • C# 使用PictureBox实现图片按钮控件的示例步骤

    引言 我们有时候会在程序的文件夹里看见一些图标,而这些图标恰好是作为按钮的背景图片来使用的.鼠标指针在处于不同状态时,有"进入按钮"."按下左键","松开","离开按钮",则按钮的背景图片也在发生改变.这些图片大致如下(来自爱奇艺万能播放器PC端): 全文仅以第一张图片素材为例,这张图片可以分为4段(下图所示),恰好表示鼠标指针在操作控件时各个不同的状态,从左到右依次表示为"初始状态"(默认显示的背景).&

  • ASP.NET中ImageButton图片按钮控件的使用

    ImageButton 说白了,就是一个能显示图片的按钮,用法和Button基本一致,无非就是点击之后触发事件,只是比Button展现更丰富一些. 一.常见 ImageButton 属性 属性 描述 ImageUrl 在 ImageButton 控件中显示的图像的路径. ToolTip 提示的文本. AlternateText 图像无法显示时显示的文本. 二.ImageButton实例演示 前台代码 ImageButton.aspx 复制代码 代码如下: <%@ Page Language=&quo

  • 易语言图形按钮控件的用法详解

    易语言可以开发些实用的程序,它与软件开发的编程语言一样,可以先从简单的程序开始学习,比如做一个单击图形按钮,弹出提示窗口的程序.那么,易语言图形按钮控件如何用呢?这可以直接用组件工具上的图形按钮控件来做窗口程序的开发,大家按照步骤来做做吧 1.打开一个易语言的程序,鼠标左键单击菜单[程序]>>[新建],在右边工具箱中找到图形按钮控件,如下图所示. 2.鼠标选择好[图形按钮控件]后,在程序窗口上直接绘制出控件,根据窗口的大小,可以改变图形按钮控件的大小,默认图形是空,如下图所示. 3.在[图形按

  • python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例

    PyQt5图片显示控件QPixmap介绍 QPixmap类用于绘图设备的图像显示,它可以作为一个QPainterDevice对象,也可以加载到一个控件中,通常是标签或者按钮,用于在标签或按钮上显示图像 QPixmap可以读取的图像文件类型有BMP,GIF,JPG等 QPixmap类中常用的方法 方法 描述 copy() 从QRect对象复制到QPixmap对象 fromImage() 将QImage对象转换为QPixmap对象 grabWidget() 从给定的一个窗口小控件创建一个像素图 gr

  • VC++中HTControl的CHTButton按钮控件类用法实例解析

    本文以实例形式讲解了VC++中HTControl控件类的CHTButton按钮控件类用法,相信对大家更好的理解VC++有一定的帮助.具体内容如下: 一般了解VC++的朋友都知道,VC++ 按钮控件CHTButton隶属HTControl控件组,直接由WIN32 API实现,你可以在SDK,MFC,wxWidget等环境下使用它.支持生成各种类型的按钮,比如:普通按钮,PNG透明按钮,复选框按钮,单选按钮等.使用时请注意,窗体必须动态创建,代码段如下: m_HTBtnClose.Create(75

  • Android中ToggleButton开关状态按钮控件使用方法详解

    ToggleButton开关状态按钮控件使用方法,具体内容如下 一.简介 1. 2.ToggleButton类结构 父类是CompoundButton,引包的时候注意下 二.ToggleButton开关状态按钮控件使用方法 1.新建ToggleButton控件及对象 private ToggleButton toggleButton1; toggleButton1=(ToggleButton) findViewById(R.id.toggleButton1); 2.设置setOnCheckedC

  • Android为按钮控件绑定事件的五种实现方式

    一.写在最前面 本次,来介绍一下安卓中为控件--Button绑定事件的五种方式. 二.具体的实现 第一种:直接绑定在Button控件上: 步骤1.在Button控件上设置android:onClick=",其中这个属性的属性值对应的是MainActivity类中的方法名字(自己创建的方法): 步骤2.在MainActivity类中创建相对应的方法: public void demo(View view){ Toast.makeText(MainActivity.this, "第二个按钮

  • Python中PyQt5/PySide2的按钮控件使用实例

    在之前的文章中,我们介绍了PyQt5和PySide2中主窗口控件MainWindow的使用.窗口控件的4中基础布局管理.从本篇开始,我们来了解一下PyQt5和PySide2中基础控件的使用,其中包括: 按钮控件: 文本输入控件: 单选控件: 文本标签控件: 多选控件: 列表控件: 等图形界面开发中常用的控件,今天我们来介绍按钮控件. 文章目录 直接实例化一个带文本的按钮控件 不带参数创建的按钮控件 三.获取按钮控件的点击事件 一.创建一个按钮控件 在PyQt5/PySide2中,按钮控件名为QP

  • python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例

    PyQt5切换按钮控件QPushButton简介 QAbstractButton类为抽象类,不能实例化,必须由其他的按钮类继承QAbstractButton类,来实现不同的功能和表现形式,常见的按钮QPushButton,QToolButton,QRadioButton和QCheckBox这些按钮均继承自QAbstractButton类,根据各自的使用场景通过图形显示出来 QAbstractButton提供的状态如下表 状态 含义 isDown() 提示按钮是否已按下 isChecked() 提

  • Python tkinter 多选按钮控件 Checkbutton方法

    目录 1.多选按钮的方法 1.2select() 1.2 deselect() 1.3 flash() 1.4 invoke() 1.5 toggle() 1.多选按钮的方法 以下为常用的方法: 方法描述deselect()清除多选按钮选中选项.flash()在激活状态颜色和正常颜色之间闪烁几次多选按钮,但保持它开始时的状态.invoke()可以调用此方法来获得与用户单击多选按钮以更改其状态时发生的操作相同的操作select()设置多选按钮为选中.toggle()选中与没有选中之间切换 1.2s

随机推荐