WinForm数字小键盘/WPF数字小键盘
模仿原本的WinForm触摸屏小键盘制作WPF触摸屏小键盘
原WinForm触摸屏小键盘样式(WinForm采用Krypton系列控件)如下图:
Designer代码如下:
// // BtnNum1 // this.BtnNum1.Dock = System.Windows.Forms.DockStyle.Fill; , ); this.BtnNum1.Name = "BtnNum1"; , ); ))); ))); ; "; this.BtnNum1.Click += new System.EventHandler(this.BtnNum_Click); // // BtnNum2 // this.BtnNum2.Dock = System.Windows.Forms.DockStyle.Fill; , ); this.BtnNum2.Name = "BtnNum2"; , ); ))); ))); ; "; this.BtnNum2.Click += new System.EventHandler(this.BtnNum_Click); // // BtnNum3 // this.BtnNum3.Dock = System.Windows.Forms.DockStyle.Fill; , ); this.BtnNum3.Name = "BtnNum3"; , ); ))); ))); ; "; this.BtnNum3.Click += new System.EventHandler(this.BtnNum_Click); // // BtnNum4 // this.BtnNum4.Dock = System.Windows.Forms.DockStyle.Fill; , ); this.BtnNum4.Name = "BtnNum4"; , ); ))); ))); ; "; this.BtnNum4.Click += new System.EventHandler(this.BtnNum_Click); // // BtnNum5 // this.BtnNum5.Dock = System.Windows.Forms.DockStyle.Fill; , ); this.BtnNum5.Name = "BtnNum5"; , ); ))); ))); ; "; this.BtnNum5.Click += new System.EventHandler(this.BtnNum_Click); // // BtnNum6 // this.BtnNum6.Dock = System.Windows.Forms.DockStyle.Fill; , ); this.BtnNum6.Name = "BtnNum6"; , ); ))); ))); ; "; this.BtnNum6.Click += new System.EventHandler(this.BtnNum_Click); // // BtnNum7 // this.BtnNum7.Dock = System.Windows.Forms.DockStyle.Fill; , ); this.BtnNum7.Name = "BtnNum7"; , ); ))); ))); ; "; this.BtnNum7.Click += new System.EventHandler(this.BtnNum_Click); // // BtnNum8 // this.BtnNum8.Dock = System.Windows.Forms.DockStyle.Fill; , ); this.BtnNum8.Name = "BtnNum8"; , ); ))); ))); ; "; this.BtnNum8.Click += new System.EventHandler(this.BtnNum_Click); // // BtnNum9 // this.BtnNum9.Dock = System.Windows.Forms.DockStyle.Fill; , ); this.BtnNum9.Name = "BtnNum9"; , ); ))); ))); ; "; this.BtnNum9.Click += new System.EventHandler(this.BtnNum_Click); // // BtnNum0 // ); this.BtnNum0.Dock = System.Windows.Forms.DockStyle.Fill; , ); this.BtnNum0.Name = "BtnNum0"; , ); ))); ))); ; "; this.BtnNum0.Click += new System.EventHandler(this.BtnNum_Click); // // BtnNumDel // this.BtnNumDel.Dock = System.Windows.Forms.DockStyle.Fill; , ); this.BtnNumDel.Name = "BtnNumDel"; , ); ))); ))); ; this.BtnNumDel.Values.Text = "Del"; this.BtnNumDel.Click += new System.EventHandler(this.BtnNumDel_Click);
所有按钮的点击事件为BtnNumDel_Click,功能实现的代码如下:
#region 小键盘按钮事件 /// <summary> /// 触摸小键盘 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BtnNum_Click(object sender, EventArgs e) { KryptonButton btn = (KryptonButton)sender; try { CurrentTextEdit.Text += btn.Text; } catch { } } /// <summary> /// 进入控件发生事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void textEdit_Enter(object sender, EventArgs e) { CurrentTextEdit = (KryptonTextBox)sender; } /// <summary> /// Del按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BtnNumDel_Click(object sender, EventArgs e) { CurrentTextEdit.Text = string.Empty; } #endregion
对于简易的小键盘来说,个人觉得这么写还算简洁。只要把想输入的TextBox的Enter事件设置为textEdit_Enter即可实现输入。
由于WPF初学,所以没有想到更简单的方法,而且WPF与WinForm很相似,所以仿照着写了一个。
XAML代码如下:
<Button Content="1" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Margin="5" Click="BtnKeyBoard_Click"/> <Button Content="2" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Grid.Column="1" Margin="5" Click="BtnKeyBoard_Click"/> <Button Content="3" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Grid.Column="2" Margin="5" Click="BtnKeyBoard_Click"/> <Button Content="4" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Grid.Row="1" Margin="5" Click="BtnKeyBoard_Click"/> <Button Content="5" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Grid.Column="1" Grid.Row="1" Margin="5" Click="BtnKeyBoard_Click"/> <Button Content="6" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Grid.Column="2" Grid.Row="1" Margin="5" Click="BtnKeyBoard_Click"/> <Button Content="7" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Grid.Row="2" Margin="5" Click="BtnKeyBoard_Click"/> <Button Content="8" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Grid.Column="1" Grid.Row="2" Margin="5" Click="BtnKeyBoard_Click"/> <Button Content="9" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Grid.Column="2" Grid.Row="2" Margin="5" Click="BtnKeyBoard_Click"/> <Button Content="0" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Grid.Row="3" Grid.ColumnSpan="2" Margin="5" Click="BtnKeyBoard_Click"/> <Button Content="DEL" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Grid.Column="2" Grid.Row="3" Margin="5" Click="Del_Click"/>
这里WPF略有不同的是,TextBox并没有Enter事件,尝试多次使用GotFocus事件代替,代码如下:
#region 小键盘事件 /// <summary> /// 触摸小键盘 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BtnKeyBoard_Click(object sender, RoutedEventArgs e) { ///获取父类中的Btn Button btn = (Button)e.OriginalSource; if (pickbox == true) { try { TextBoxEdit.Text += btn.Content; } catch { } } else if (pickbox == false) { try { PasswordBoxEdit.Password += btn.Content; } catch { } } } /// <summary> /// 删除输入 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Del_Click(object sender, EventArgs e) { if (pickbox == true) { TextBoxEdit.Text = string.Empty; } else if (pickbox == false) { PasswordBoxEdit.Password =string.Empty; } } /// <summary> /// 用户编号Focus /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void TextBoxEdit_Focus(object sender, EventArgs e) { TextBoxEdit = (TextBox)sender; pickbox = true; } /// <summary> /// 用户密码Focus /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void PasswordBoxEdit_Focus(object sender, EventArgs e) { PasswordBoxEdit = (PasswordBox)sender; pickbox = false; } #endregion
而且WPF的TextBox控件与PasswordBox控件不同,无奈之下还加了一个变量pickbox用来区分。
WinForm数字小键盘/WPF数字小键盘的更多相关文章
- 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])
常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...
- WinForm 与WPF 窗体之间的想到调用
先放置一个容器控件,并设计 好WinForm(或WPF)窗口 winform 调用 wpf ElementHost el = new ElementHost(); el.Dock = DockStyl ...
- 基于Winform、WPF等的客户端文件下载
有时候,我们用C#写一些客户端应用程序需要从服务器下载一些资源,如图片.dll.配置文件等.下面就来说一下,在Winform及WPF中如何下载文件. 我们的资源大多放在自己的网站上,或者从其他网站下载 ...
- 如何去掉WinForm或者WPF的最大化和最小化按钮
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何去掉WinForm或者WPF的最大化和最小化按钮.
- winform,wpf全屏 还显示任务栏的解决方法
原文:winform,wpf全屏 还显示任务栏的解决方法 以wpf为例: 全屏代码: this.Topmost = true; this.WindowStyle = System.Windows.Wi ...
- WinForm、wpf、silverlight三者关系
最近在学C#.NET,基本语法学习的差不多了,接下来准备学习图形界面设计部分.但是我目前对于.NET的WinForm.wpf.silverlight这三者的关系弄的不是很清楚,一般书中很少介绍wpf和 ...
- 对比MFC和Winform及WPF
MFC 生成本机代码,自然是很快.可是,消息循环,减缓了界面显示速度.winform 封装了 win32 的api,多次进行P/invoke 操作 (大部分使用p/invoke操作封装),速度慢 .w ...
- windows 10 透明毛玻璃,winform和wpf方法
win10的透明毛玻璃,winform和wpf方法,win7.8不能用,只是win10 public partial class Form1 : Form { [DllImport("use ...
- 【Win32 API】利用SendMessage实现winform与wpf之间的消息传递
原文:[Win32 API]利用SendMessage实现winform与wpf之间的消息传递 引言 有一次心血来潮,突然想研究一下进程间的通信,能够实现消息传递的方法有几种,其中win32ap ...
随机推荐
- x86_64编译JPEG遇到Invalid configuration `x86_64-unknown-linux-gnu'
把 /usr/share/libtool/config/config.guess 覆盖到相关软件自带的config.guess 把 /usr/share/libtool/config/config ...
- Linux常用命令(持续更新中)
cd 目录名 :进入某个目录 ls :列出当前目录的内容 locate 文件名/目录名:寻找文件.目录 find 目录名1 -name 文件名/目录名2 :在目录1中寻找目录2 whereis 文件 ...
- sqlite相关工具使用
sqlite3可视化工具 1.sudo apt-get install sqlitebrowser 2.sudo apt-get install sqliteman3.sqlitestudio需要去官 ...
- HDU 1789 贪心经典
题意 给出n门作业的截止时间与分数 如果不能在那天结束前做完就扣掉相应分数 问怎么安排能让扣分最少 思路 先按分数从大到小排序 先研究大的 做好标记 一开始每天都能放作业 全是true 如果这一天已经 ...
- 《Java核心技术卷一》笔记 多线程同步(底层实现)
一.锁的基本原理 多个线程同时对共享的同一数据存取 ,在这种竞争条件下如果不进行同步很可能会造成数据的讹误. 例如:有一个共享变量int sum=0, 一个线程正调用 sum+=10,另一个线程正好也 ...
- HTML5 viewport 标签与 CSS3 background-size 属性 使图片完全适应区域内容
要使一张图片不论在移动端还是在桌面端都能适应区域内容,可以使用 HTML5 的 viewport 标签结合 CSS3 的 background-size 属性. 适应区域内容是指图片的宽或高的长度满足 ...
- 用宏 x y z,找出最大值最小值
#define max(x,y,z) ((x)>(y)?(x):(y))>(z)?((x)>(y)?(x):(y)):(z) #define min(x,y,z) ((x)<( ...
- MySQL优化常用
一.mysql的配置都是小写的,使用下划线_或破折号-分割单词,两者是一样的二.在配置文件中可以用1m,1g等单位,但是用set命令,不能使用单位,默认单位是字节三.特殊例子a.query_cache ...
- ubuntu日志清理
由于ubuntu日志文件syslog 和 kern.log 时刻在增长,一会儿就使得根目录文件夹不够用了,需使用如下命令清理 sudo -i输入密码echo > /var/log/syslog ...
- Delphi格式化输出函数(1): Format
vars: string;begin//指令类型 types := Format('最大整数是: %d; 最小整数是: %d',[MaxInt,Low(Integer)]);//返回: 最大整数是: ...