模仿原本的WinForm触摸屏小键盘制作WPF触摸屏小键盘

原WinForm触摸屏小键盘样式(WinForm采用Krypton系列控件)如下图:

Designer代码如下:

  1. //
  2. // BtnNum1
  3. //
  4. this.BtnNum1.Dock = System.Windows.Forms.DockStyle.Fill;
  5. , );
  6. this.BtnNum1.Name = "BtnNum1";
  7. , );
  8. )));
  9. )));
  10. ;
  11. ";
  12. this.BtnNum1.Click += new System.EventHandler(this.BtnNum_Click);
  13. //
  14. // BtnNum2
  15. //
  16. this.BtnNum2.Dock = System.Windows.Forms.DockStyle.Fill;
  17. , );
  18. this.BtnNum2.Name = "BtnNum2";
  19. , );
  20. )));
  21. )));
  22. ;
  23. ";
  24. this.BtnNum2.Click += new System.EventHandler(this.BtnNum_Click);
  25. //
  26. // BtnNum3
  27. //
  28. this.BtnNum3.Dock = System.Windows.Forms.DockStyle.Fill;
  29. , );
  30. this.BtnNum3.Name = "BtnNum3";
  31. , );
  32. )));
  33. )));
  34. ;
  35. ";
  36. this.BtnNum3.Click += new System.EventHandler(this.BtnNum_Click);
  37. //
  38. // BtnNum4
  39. //
  40. this.BtnNum4.Dock = System.Windows.Forms.DockStyle.Fill;
  41. , );
  42. this.BtnNum4.Name = "BtnNum4";
  43. , );
  44. )));
  45. )));
  46. ;
  47. ";
  48. this.BtnNum4.Click += new System.EventHandler(this.BtnNum_Click);
  49. //
  50. // BtnNum5
  51. //
  52. this.BtnNum5.Dock = System.Windows.Forms.DockStyle.Fill;
  53. , );
  54. this.BtnNum5.Name = "BtnNum5";
  55. , );
  56. )));
  57. )));
  58. ;
  59. ";
  60. this.BtnNum5.Click += new System.EventHandler(this.BtnNum_Click);
  61. //
  62. // BtnNum6
  63. //
  64. this.BtnNum6.Dock = System.Windows.Forms.DockStyle.Fill;
  65. , );
  66. this.BtnNum6.Name = "BtnNum6";
  67. , );
  68. )));
  69. )));
  70. ;
  71. ";
  72. this.BtnNum6.Click += new System.EventHandler(this.BtnNum_Click);
  73. //
  74. // BtnNum7
  75. //
  76. this.BtnNum7.Dock = System.Windows.Forms.DockStyle.Fill;
  77. , );
  78. this.BtnNum7.Name = "BtnNum7";
  79. , );
  80. )));
  81. )));
  82. ;
  83. ";
  84. this.BtnNum7.Click += new System.EventHandler(this.BtnNum_Click);
  85. //
  86. // BtnNum8
  87. //
  88. this.BtnNum8.Dock = System.Windows.Forms.DockStyle.Fill;
  89. , );
  90. this.BtnNum8.Name = "BtnNum8";
  91. , );
  92. )));
  93. )));
  94. ;
  95. ";
  96. this.BtnNum8.Click += new System.EventHandler(this.BtnNum_Click);
  97. //
  98. // BtnNum9
  99. //
  100. this.BtnNum9.Dock = System.Windows.Forms.DockStyle.Fill;
  101. , );
  102. this.BtnNum9.Name = "BtnNum9";
  103. , );
  104. )));
  105. )));
  106. ;
  107. ";
  108. this.BtnNum9.Click += new System.EventHandler(this.BtnNum_Click);
  109. //
  110. // BtnNum0
  111. //
  112. );
  113. this.BtnNum0.Dock = System.Windows.Forms.DockStyle.Fill;
  114. , );
  115. this.BtnNum0.Name = "BtnNum0";
  116. , );
  117. )));
  118. )));
  119. ;
  120. ";
  121. this.BtnNum0.Click += new System.EventHandler(this.BtnNum_Click);
  122. //
  123. // BtnNumDel
  124. //
  125. this.BtnNumDel.Dock = System.Windows.Forms.DockStyle.Fill;
  126. , );
  127. this.BtnNumDel.Name = "BtnNumDel";
  128. , );
  129. )));
  130. )));
  131. ;
  132. this.BtnNumDel.Values.Text = "Del";
  133. this.BtnNumDel.Click += new System.EventHandler(this.BtnNumDel_Click);

所有按钮的点击事件为BtnNumDel_Click,功能实现的代码如下:

  1. #region 小键盘按钮事件
  2. /// <summary>
  3. /// 触摸小键盘
  4. /// </summary>
  5. /// <param name="sender"></param>
  6. /// <param name="e"></param>
  7. private void BtnNum_Click(object sender, EventArgs e)
  8. {
  9. KryptonButton btn = (KryptonButton)sender;
  10. try
  11. {
  12. CurrentTextEdit.Text += btn.Text;
  13. }
  14. catch
  15. {
  16.  
  17. }
  18. }
  19. /// <summary>
  20. /// 进入控件发生事件
  21. /// </summary>
  22. /// <param name="sender"></param>
  23. /// <param name="e"></param>
  24. private void textEdit_Enter(object sender, EventArgs e)
  25. {
  26. CurrentTextEdit = (KryptonTextBox)sender;
  27. }
  28. /// <summary>
  29. /// Del按钮
  30. /// </summary>
  31. /// <param name="sender"></param>
  32. /// <param name="e"></param>
  33. private void BtnNumDel_Click(object sender, EventArgs e)
  34. {
  35. CurrentTextEdit.Text = string.Empty;
  36. }
  37.  
  38. #endregion

对于简易的小键盘来说,个人觉得这么写还算简洁。只要把想输入的TextBox的Enter事件设置为textEdit_Enter即可实现输入。

由于WPF初学,所以没有想到更简单的方法,而且WPF与WinForm很相似,所以仿照着写了一个。

XAML代码如下:

  1. <Button Content="1" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Margin="5" Click="BtnKeyBoard_Click"/>
  2. <Button Content="2" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Grid.Column="1" Margin="5" Click="BtnKeyBoard_Click"/>
  3. <Button Content="3" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Grid.Column="2" Margin="5" Click="BtnKeyBoard_Click"/>
  4. <Button Content="4" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Grid.Row="1" Margin="5" Click="BtnKeyBoard_Click"/>
  5. <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"/>
  6. <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"/>
  7. <Button Content="7" Style="{DynamicResource BtnS1}" FontFamily="KaiTi_GB2312" FontWeight="Bold" FontSize="29.333" Grid.Row="2" Margin="5" Click="BtnKeyBoard_Click"/>
  8. <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"/>
  9. <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"/>
  10. <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"/>
  11. <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事件代替,代码如下:

  1. #region 小键盘事件
  2. /// <summary>
  3. /// 触摸小键盘
  4. /// </summary>
  5. /// <param name="sender"></param>
  6. /// <param name="e"></param>
  7. private void BtnKeyBoard_Click(object sender, RoutedEventArgs e)
  8. {
  9. ///获取父类中的Btn
  10. Button btn = (Button)e.OriginalSource;
  11. if (pickbox == true)
  12. {
  13. try
  14. {
  15. TextBoxEdit.Text += btn.Content;
  16. }
  17. catch
  18. {
  19.  
  20. }
  21. }
  22. else if (pickbox == false)
  23. {
  24. try
  25. {
  26. PasswordBoxEdit.Password += btn.Content;
  27. }
  28. catch
  29. {
  30.  
  31. }
  32. }
  33. }
  34. /// <summary>
  35. /// 删除输入
  36. /// </summary>
  37. /// <param name="sender"></param>
  38. /// <param name="e"></param>
  39. private void Del_Click(object sender, EventArgs e)
  40. {
  41. if (pickbox == true)
  42. {
  43. TextBoxEdit.Text = string.Empty;
  44. }
  45. else if (pickbox == false)
  46. {
  47. PasswordBoxEdit.Password =string.Empty;
  48. }
  49. }
  50. /// <summary>
  51. /// 用户编号Focus
  52. /// </summary>
  53. /// <param name="sender"></param>
  54. /// <param name="e"></param>
  55. private void TextBoxEdit_Focus(object sender, EventArgs e)
  56. {
  57. TextBoxEdit = (TextBox)sender;
  58. pickbox = true;
  59. }
  60. /// <summary>
  61. /// 用户密码Focus
  62. /// </summary>
  63. /// <param name="sender"></param>
  64. /// <param name="e"></param>
  65. private void PasswordBoxEdit_Focus(object sender, EventArgs e)
  66. {
  67. PasswordBoxEdit = (PasswordBox)sender;
  68. pickbox = false;
  69. }
  70. #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. PAT天梯赛练习题 L2-013 红色警报(并查集+逆序加边)

    L2-013. 红色警报 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 战争中保持各个城市间的连通性非常重要.本题要求你编写一 ...

  2. CSS兼容性(IE和Firefox)技巧大全

    CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理技巧并整理了一下.对于web2.0的过度,请尽量用xhtml格 ...

  3. java数组排序问题:array.sort()是从小到大排序,那么如何从大到小排序?

    别告诉我从i=a.length开始打印然后i--!因为数组没变啊,只是打印顺序变了.有木有啥别的方法,除了冒泡插入选择.. nteger [] array=new Integer[]{1,2,3,4, ...

  4. js获取时间(本周、本季度、本月..)

    /** * 获取本周.本季度.本月.上月的开端日期.停止日期 */ var now = new Date(); //当前日期 var nowDayOfWeek = now.getDay(); //今天 ...

  5. laravel url() 和 asset() 的区别

    asset()方法用于引入 CSS/JavaScript/images 等文件,文件必须存放在public文件目录下.url()方法生成一个完整的网址.

  6. Tortoise SVN 更换用户

    由于之前没有找到 svn 的安装路径,所以用了同事的 svn 账号,今天找到了并且添加了用户,所以 tortoise svn 要更换用户: ① ② ③ 需要清除的 svn 账号打上勾 参考:svn怎么 ...

  7. Javascript 笔记与总结(1-1)作用域

    以语言的角度学习 Js 的底层原理(与 DOM 无关):① 作用域链 ② 词法分析 ③ 闭包 ④ 面向对象(原型链) ① 作用域链 例1 <script> var c = 5; funct ...

  8. mobile cpu上禁用alpha test的相关总结

       因为,每家芯片的特性不同,根据向framebuffer写法的不同,分为tile-based的mobile cpu,如ImgTec PowerVR,ARM Mali,一部分老版本Qualcomm  ...

  9. [ZZ]计算机视觉、机器学习相关领域论文和源代码大集合

    原文地址:[ZZ]计算机视觉.机器学习相关领域论文和源代码大集合作者:计算机视觉与模式 注:下面有project网站的大部分都有paper和相应的code.Code一般是C/C++或者Matlab代码 ...

  10. C++类型转化分析(1)

    仔细想想地位卑贱的类型转换功能(cast),其在程序设计中的地位就象goto语句一样令人鄙视.但是它还不是无法令人忍受,因为当在某些紧要的关头,类型转换还是必需的,这时它是一个必需品. 不过C风格的类 ...