之前遇到一个问题,在文本框切换输入法为中文后,使用扫码枪扫码时
会出现 比如条码NH123456 在文本框内会显示 你好23456
这里可以使用输入法编辑器ImeMode枚举属性
如果文本框只能输入英文数字,可以使用ImeMode.Disable,但默认不能拦截复制和粘贴按钮中文字符
如下属性ImeMode.Disable即可无法使用中文输入法只能输入字母数字,但无法禁用Ctrl+V复制粘贴键
//设置输入法只能输入英文数字,不能输入中文【半角英文-禁用输入法】txtBarcode.ImeMode = ImeMode.Disable;
输入法编辑器IME
IME英文全称Input Method Editors,中文名称输入法编辑器。它是一种程序,能使用户用 101 键的标准键盘输入亚洲语言中数以千计的字符。IME 由将键击转换为拼音和表意字符的引擎和通常用于表意字的字典组成。当用户输入键击时,IME 引擎会尝试确定应将键击转换成哪个(哪些)字符。
新建窗体应用程序ImeFilterDemo,将默认的Form1重命名为FormImeFilter
窗体FormImeFilter的设计器代码如下:
(文件FormImeFilter.Designer.cs)
namespace ImeFilterDemo
{partial class FormImeFilter{/// <summary>/// 必需的设计器变量。/// </summary>private System.ComponentModel.IContainer components = null;/// <summary>/// 清理所有正在使用的资源。/// </summary>/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}#region Windows 窗体设计器生成的代码/// <summary>/// 设计器支持所需的方法 - 不要修改/// 使用代码编辑器修改此方法的内容。/// </summary>private void InitializeComponent(){this.btnTest = new System.Windows.Forms.Button();this.txtBarcode = new System.Windows.Forms.TextBox();this.rtxtImeMode = new System.Windows.Forms.RichTextBox();this.SuspendLayout();// // btnTest// this.btnTest.Font = new System.Drawing.Font("宋体", 16F);this.btnTest.Location = new System.Drawing.Point(485, 8);this.btnTest.Name = "btnTest";this.btnTest.Size = new System.Drawing.Size(114, 34);this.btnTest.TabIndex = 0;this.btnTest.Text = "测试";this.btnTest.UseVisualStyleBackColor = true;this.btnTest.Click += new System.EventHandler(this.btnTest_Click);// // txtBarcode// this.txtBarcode.Font = new System.Drawing.Font("宋体", 16F);this.txtBarcode.Location = new System.Drawing.Point(3, 12);this.txtBarcode.Name = "txtBarcode";this.txtBarcode.Size = new System.Drawing.Size(447, 32);this.txtBarcode.TabIndex = 1;// // rtxtImeMode// this.rtxtImeMode.Location = new System.Drawing.Point(12, 60);this.rtxtImeMode.Name = "rtxtImeMode";this.rtxtImeMode.Size = new System.Drawing.Size(696, 724);this.rtxtImeMode.TabIndex = 2;this.rtxtImeMode.Text = "";// // FormImeFilter// this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.ClientSize = new System.Drawing.Size(727, 796);this.Controls.Add(this.rtxtImeMode);this.Controls.Add(this.txtBarcode);this.Controls.Add(this.btnTest);this.Name = "FormImeFilter";this.Text = "IME输入法编辑器过滤";this.ResumeLayout(false);this.PerformLayout();}#endregionprivate System.Windows.Forms.Button btnTest;private System.Windows.Forms.TextBox txtBarcode;private System.Windows.Forms.RichTextBox rtxtImeMode;}
}
窗体ImeMode枚举说明相关代码如下:
(文件FormImeFilter.cs)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace ImeFilterDemo
{public partial class FormImeFilter : Form{public FormImeFilter(){InitializeComponent();//设置输入法只能输入英文数字,不能输入中文【半角英文-禁用输入法】,但无法拦截复制粘贴的中文字符txtBarcode.ImeMode = ImeMode.Disable;rtxtImeMode.ReadOnly = true;}private void btnTest_Click(object sender, EventArgs e){rtxtImeMode.Text = @"IME英文全称Input Method Editors,中文名称输入法编辑器。
它是一种程序,能使用户用 101 键的标准键盘输入亚洲语言中数以千计的字符。
---------------------------------------------------
ImeMode枚举说明:Inherit = -1,
使用父容器的ImeModeNoControl = 0,
半角默认-使用当前输入模式On = 1,
全角中文Off = 2,
半角英文Disable = 3,
半角英文-禁用输入法Hiragana = 4,
全角中文Katakana = 5,
全角中文KatakanaHalf = 6,
半角中文AlphaFull = 7,
全角英文Alpha = 8,
半角英文HangulFull = 9,
全角中文Hangul = 10,
半角中文Close = 11,
半角英文-关闭当前输入法OnHalf = 12
半角中文
---------------------------------------------------
如果只能输入英文数字,可以使用ImeMode.Disable,但默认不能拦截复制和粘贴按钮中文字符";}}
}