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 ...
随机推荐
- ondragover 事件规定在何处放置被拖动的数据
nternet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5 支持拖放. 被拖元素,dragElement : 1.添加事件:ondragstart 2 ...
- 什么是java 键值对
所谓键值对,你可以查看jdk文档,找MAP接口,它的实现类都是键值对的形式保存数据的 键:就是你存的值的编号值:就是你要存放的数据
- javascript双击事件取消默认的两次单击事件
当一个元素同时具有单击和双击事件时,双击时会触发2次单击和1此双击事件. 双击会:先第1次单击 ,同时触发第2次和双击事件. 造成的不好影响:每次单击事件会延迟执行. <!DOCTYPE htm ...
- 如何用Apache POI操作Excel文件-----如何对一个单元格加注解?
有的时候,我们需要通过操作Apache POI,在生成Cell数据的同时,能对其生成的Cell,加上注解(comments),类似于下面的. 那么对于这种情况,我们的代码应该如何写呢? 借花献佛,我就 ...
- oracle imp导入库到指定表空间
1.创建表空间 create tablespace example_tablespace datafile 'e:\****.dbf' size 10m reuse autoextend on nex ...
- Nginx 笔记与总结(5)访问日志管理:计划任务 + 日志切割
要在第二天的凌晨把前一天的访问日志切割备份,并以时间作为文件名,例如:access.20150728.log,这就需要在 Linux 中格式化时间,例如: [root@localhost ~]# da ...
- 解决电脑访问Discuz!手机版(支持触屏版)
discuz电脑访问手机版的方法现在需要来修改一下2个文件,即可用电脑浏览discuz的手机版本:找到./source/function/function_core.php 文件,查找 : funct ...
- Levenshtein distance
https://en.wikipedia.org/wiki/Levenshtein_distance 验证码识别 图片中的二维码截取
- linux C gcc -lm
使用math.h中声明的库函数还有一点特殊之处,gcc命令行必须加-lm选项,因为数学函数位于libm.so库文件中(这些库文件通常位于/lib目录下),-lm选项告诉编译器,我们程序中用到的数学函数 ...
- 蓝牙BLE 架构剖析
一.BLE架构概述: 二.各个层