模仿原本的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数字小键盘的更多相关文章

  1. 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])

    常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...

  2. WinForm 与WPF 窗体之间的想到调用

    先放置一个容器控件,并设计 好WinForm(或WPF)窗口 winform 调用 wpf ElementHost el = new ElementHost(); el.Dock = DockStyl ...

  3. 基于Winform、WPF等的客户端文件下载

    有时候,我们用C#写一些客户端应用程序需要从服务器下载一些资源,如图片.dll.配置文件等.下面就来说一下,在Winform及WPF中如何下载文件. 我们的资源大多放在自己的网站上,或者从其他网站下载 ...

  4. 如何去掉WinForm或者WPF的最大化和最小化按钮

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何去掉WinForm或者WPF的最大化和最小化按钮.

  5. winform,wpf全屏 还显示任务栏的解决方法

    原文:winform,wpf全屏 还显示任务栏的解决方法 以wpf为例: 全屏代码: this.Topmost = true; this.WindowStyle = System.Windows.Wi ...

  6. WinForm、wpf、silverlight三者关系

    最近在学C#.NET,基本语法学习的差不多了,接下来准备学习图形界面设计部分.但是我目前对于.NET的WinForm.wpf.silverlight这三者的关系弄的不是很清楚,一般书中很少介绍wpf和 ...

  7. 对比MFC和Winform及WPF

    MFC 生成本机代码,自然是很快.可是,消息循环,减缓了界面显示速度.winform 封装了 win32 的api,多次进行P/invoke 操作 (大部分使用p/invoke操作封装),速度慢 .w ...

  8. windows 10 透明毛玻璃,winform和wpf方法

    win10的透明毛玻璃,winform和wpf方法,win7.8不能用,只是win10 public partial class Form1 : Form { [DllImport("use ...

  9. 【Win32 API】利用SendMessage实现winform与wpf之间的消息传递

    原文:[Win32 API]利用SendMessage实现winform与wpf之间的消息传递 引言    有一次心血来潮,突然想研究一下进程间的通信,能够实现消息传递的方法有几种,其中win32ap ...

随机推荐

  1. java密码验证正则表达式校验

    ,正则表达式就是记录文本规则的代码.php密码验证正则表达式(8位长度限制)<?php //密码验证 $password = "zongzi_Abc_oo13a2"; $n ...

  2. [转]Web Service Authentication

    本文转自:http://www.codeproject.com/Articles/9348/Web-Service-Authentication Download source files - 45. ...

  3. 注意自己的dns设置 - 阿权的书房

    一般而言,随便找个合适的dns服务器作为自己的dns解析服务器即可,但如果选择不当,可能就会导致网络选择并不是最优的.这个情况一般发生在电信网通优化的域名上. 检查方法(域名有所替换): [root@ ...

  4. MyBatis传入参数为集合 list 数组 map写法

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有item,index,collection,open,separator,close.ite ...

  5. 撑起大规模PHP网站的开源工具

    撑起大规模PHP网站的开源工具 百万级PHP站点Poppen.de的架构 在 2011年11月27日 那天写的     已经有 3957 次阅读了 感谢 参考或原文   服务器君一共花费了54.510 ...

  6. Web--RSS

    --用处:SEO,让别人订阅你的文章

  7. Python文件方法

    打开文件 使用open函数,语法格式为:open( name[, mode[, buffering]]),name为打开文件名,mode为打开文件方式,buffering控制文件的缓冲. mode可选 ...

  8. 【Android测试】【第十四节】Appium——简述

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5124340.html 前言 同样的,这一篇我要介绍的也是一 ...

  9. PHP---关联模型

    MANY_TO_MANY

  10. 在Android Studio 中正确使用adil ”绝对经典“

    今天调用远程服务中遇到了一个问题,哎,调了2个小时,后来终于解决,总结来看还是对新的Android Studio 不够熟悉.那么....就可以睡觉啦!!! 在Android Studio中使用进程通信 ...