当前位置: 首页 > news >正文

WPF篇(9)-CheckBox复选框+RadioButton单选框+RepeatButton重复按钮

CheckBox复选框

CheckBox继承于ToggleButton,而ToggleButton继承于ButtonBase基类。

案例

前端代码

    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"><TextBlock Text="今晚吃什么菜?" Margin="5"/><CheckBox Name="_checkbox1" Content="红烧牛肉" Margin="5"/><CheckBox Name="_checkbox2" Content="麻婆豆腐" Margin="5"/><CheckBox Name="_checkbox3" Content="夫妻肺片" Margin="5"/><Button x:Name="_button" Content="查看菜单"  Click="_button_Click"/></StackPanel>

后端代码

  private void _button_Click(object sender, RoutedEventArgs e){string order = string.Empty;if (_checkbox1.IsChecked == true)order += _checkbox1.Content + ",";if (_checkbox2.IsChecked == true)order += _checkbox2.Content + ",";if (_checkbox3.IsChecked == true)order += _checkbox3.Content;if(!string.IsNullOrEmpty(order))MessageBox.Show(order);}

在这里插入图片描述

我们通过判断CheckBox的IsChecked属性,来获取前端用户的选择。

RadioButton单选框

RadioButton也继承于ToggleButton,作用是单项选择,所以被称为单选框。
要注意:
这个控件有一个重要属性叫GroupName——分组名称。默认值是一个空字符串。用来指定哪些RadioButton之间是互相排斥的。

案例

前端代码

    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"><TextBlock Text="今晚吃什么菜?" Margin="5"/><RadioButton Name="_RadioButton1" Content="红烧牛肉" Margin="5"/><RadioButton Name="_RadioButton2" Content="麻婆豆腐" Margin="5"/><RadioButton Name="_RadioButton3" Content="夫妻肺片" Margin="5"/><Button x:Name="_button" Content="查看菜单"  Click="_button_Click"/></StackPanel>

后端代码

        private void _button_Click(object sender, RoutedEventArgs e){string order = string.Empty;if (_RadioButton1.IsChecked == true)order += _RadioButton1.Content + ",";if (_RadioButton2.IsChecked == true)order += _RadioButton2.Content + ",";if (_RadioButton3.IsChecked == true)order += _RadioButton3.Content;if(!string.IsNullOrEmpty(order))MessageBox.Show(order);}

在这里插入图片描述

这时候我们发现无论怎么选就只能选一个。如果我们要求必须选择一荤一素怎么办?我们看看组的使用。

前端代码

    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"><TextBlock Text="今晚吃什么菜?" Margin="5"/><RadioButton Name="_RadioButton1" Content="红烧牛肉" GroupName="荤菜" Margin="5"/><RadioButton Name="_RadioButton2" Content="糖醋排骨" GroupName="荤菜" Margin="5"/><RadioButton Name="_RadioButton3" Content="麻婆豆腐" GroupName="素菜" Margin="5"/><RadioButton Name="_RadioButton4" Content="清炒时蔬" GroupName="素菜" Margin="5"/><Button x:Name="_button" Content="查看菜单"  Click="_button_Click"/></StackPanel>

后端代码

private void _button_Click(object sender, RoutedEventArgs e)
{string order = string.Empty;if (_RadioButton1.IsChecked == true)order += _RadioButton1.Content + ",";if (_RadioButton2.IsChecked == true)order += _RadioButton2.Content + ",";if (_RadioButton3.IsChecked == true)order += _RadioButton3.Content + ",";if (_RadioButton4.IsChecked == true)order += _RadioButton4.Content;if (!string.IsNullOrEmpty(order))MessageBox.Show(order);
}

在这里插入图片描述

此时再操作时我们发现,红烧牛肉和糖醋排骨只能二选一,麻婆豆腐和清炒时蔬也只能二选一。

RepeatButton重复按钮

RepeatButton,顾名思义,重复执行的按钮。就是当按钮被按下时,所订阅的回调函数会不断被执行。那么,多长时间执行一次?

我们先看看它的结构定义:

public class RepeatButton : ButtonBase
{public static readonly DependencyProperty DelayProperty;public static readonly DependencyProperty IntervalProperty;public RepeatButton();public int Delay { get; set; }public int Interval { get; set; }protected override void OnClick();protected override AutomationPeer OnCreateAutomationPeer();protected override void OnKeyDown(KeyEventArgs e);protected override void OnKeyUp(KeyEventArgs e);protected override void OnLostMouseCapture(MouseEventArgs e);protected override void OnMouseEnter(MouseEventArgs e);protected override void OnMouseLeave(MouseEventArgs e);protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e);protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e);}

1. 属性分析

RepeatButton 自身提供了两个整型属性,分别是Delay 和Interval 。

  • Delay 属性:表示延时重复执行的毫秒数,就是说,RepeatButton被按下后会立即执行一次回调函数,如果您不松开鼠标,在等待Delay 毫秒后,就开始进行重复执行阶段。
  • Interval 属性:表示重复执行回调函数的时间间隔毫秒数

2. RepeatButton 应用示例

前端代码

  <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"><TextBlock Text="食用油准备好" Margin="5 7 5 5"/><RepeatButton Name="_Button1" Content="开始倒油" Delay="1000" Interval="500" Click="_Button1_Click"  Margin="5"/></StackPanel>

后端代码

public partial class MainWindow{public MainWindow(){InitializeComponent();}int count = 1;private void _Button1_Click(object sender, RoutedEventArgs e){Console.WriteLine($"重复时间:{DateTime.Now.ToLongTimeString()} {DateTime.Now.Millisecond},重复次数:{count++}");}}

在这里插入图片描述
结果显示,第一次和第二次输出时间刚好为1000毫秒,也就是Delay属性在起作用。然后,从第2次开始,每两次之间的时间间隔大约为500毫秒,这是因为Interval属性被设置为500。

http://www.lryc.cn/news/419532.html

相关文章:

  • 【机器学习基础】线性回归
  • java基础概念12-二维数组
  • 56 锐键交换机开局
  • VR虚拟展厅与传统实体展厅相比,有哪些优势?
  • Vue的事件处理、事件修饰符、键盘事件
  • c++单例实践
  • SQL注入实例(sqli-labs/less-9)
  • http不同类型方法的作用,get和post区别
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • 美团秋招笔试第三题(剪彩带)求助帖
  • LeetCode 算法:最小栈 c++
  • 【解压既玩】PS3模拟器v0.0.32+战神3+战神升天+各存档 整合包 ,完美不死机,没有BUG,旷世神作,强力推荐
  • bootstrap- X-editable 行内编辑
  • 【LabVIEW学习篇 - 12】:通知器
  • Oracle一对多(一主多备)的DG环境如何进行switchover切换?
  • 【浏览器插件】Chrome扩展V3版本
  • 编码器信号干扰问题、编码器选型
  • Unity入门5——材质
  • C的温故而知新:存储类别、链接和内存管理(C Primer Plus第十二章)
  • SpringBoot统一功能处理——统一数据返回格式
  • Milvus 实践(2) --- 2.4.x 安装,脚本分析,数据存储解析
  • 【蛋疼c++】千万别用std::wifstream读取Unicode UTF16文件
  • [算法] 第二集 二叉树中的深度搜索
  • 放弃使用外键时,sequelize 应该怎么使用?
  • Microsoft GraphRAG 输出的配置信息
  • 怎么判断张量的维度(形状(shape)),即如何定义行数、列数和深度的?
  • AI入门指南(二):算法、训练、模型、大模型是什么?
  • CSS已访问链接的隐私保护
  • 代码练习12-排序链表
  • Linux 内核源码分析---套接字