c#基于Tablet pc实现的手写输入
需要安装Tablet pc,win7的话 直接在控制面板》程序和应用》添加组建里面勾选上添加
然后就是下面的程序了,看代码
设计文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
namespace 手写识别 { partial class Form1 { /// <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.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); this.ink_here = new System.Windows.Forms.PictureBox(); this.textBox1 = new System.Windows.Forms.TextBox(); this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); this.colorDialog1 = new System.Windows.Forms.ColorDialog(); this.button3 = new System.Windows.Forms.Button(); this.timSb = new System.Windows.Forms.Timer(this.components); this.btnDelet = new System.Windows.Forms.Button(); this.panel1 = new System.Windows.Forms.Panel(); this.panel2 = new System.Windows.Forms.Panel(); this.shibie_9 = new System.Windows.Forms.Button(); this.shibie_8 = new System.Windows.Forms.Button(); this.shibie_7 = new System.Windows.Forms.Button(); this.shibie_6 = new System.Windows.Forms.Button(); this.shibie_5 = new System.Windows.Forms.Button(); this.shibie_4 = new System.Windows.Forms.Button(); this.shibie_3 = new System.Windows.Forms.Button(); this.shibie_2 = new System.Windows.Forms.Button(); this.shibie_1 = new System.Windows.Forms.Button(); this.shibie_0 = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.ink_here)).BeginInit(); this.panel1.SuspendLayout(); this.panel2.SuspendLayout(); this.SuspendLayout(); // // ink_here // this.ink_here.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("ink_here.BackgroundImage"))); this.ink_here.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; this.ink_here.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; this.ink_here.Dock = System.Windows.Forms.DockStyle.Fill; this.ink_here.Location = new System.Drawing.Point(0, 142); this.ink_here.Name = "ink_here"; this.ink_here.Size = new System.Drawing.Size(457, 258); this.ink_here.TabIndex = 0; this.ink_here.TabStop = false; this.ink_here.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ink_here_MouseDown); this.ink_here.MouseUp += new System.Windows.Forms.MouseEventHandler(this.ink_here_MouseUp); // // textBox1 // this.textBox1.Dock = System.Windows.Forms.DockStyle.Top; this.textBox1.Location = new System.Drawing.Point(0, 0); this.textBox1.Multiline = true; this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(457, 142); this.textBox1.TabIndex = 1; // // button1 // this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.button1.Location = new System.Drawing.Point(475, 9); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(42, 23); this.button1.TabIndex = 2; this.button1.Text = "识别"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // // button2 // this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.button2.Location = new System.Drawing.Point(523, 9); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(42, 23); this.button2.TabIndex = 3; this.button2.Text = "清除"; this.button2.UseVisualStyleBackColor = true; this.button2.Click += new System.EventHandler(this.button2_Click); // // button3 // this.button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.button3.Location = new System.Drawing.Point(379, 9); this.button3.Name = "button3"; this.button3.Size = new System.Drawing.Size(90, 23); this.button3.TabIndex = 4; this.button3.Text = "墨水颜色"; this.button3.UseVisualStyleBackColor = true; this.button3.Click += new System.EventHandler(this.button3_Click); // // timSb // this.timSb.Interval = 500; this.timSb.Tick += new System.EventHandler(this.timSb_Tick); // // btnDelet // this.btnDelet.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnDelet.Location = new System.Drawing.Point(571, 9); this.btnDelet.Name = "btnDelet"; this.btnDelet.Size = new System.Drawing.Size(55, 23); this.btnDelet.TabIndex = 5; this.btnDelet.Text = "←Dele"; this.btnDelet.UseVisualStyleBackColor = true; this.btnDelet.Click += new System.EventHandler(this.btnDelet_Click); // // panel1 // this.panel1.Controls.Add(this.button3); this.panel1.Controls.Add(this.btnDelet); this.panel1.Controls.Add(this.button1); this.panel1.Controls.Add(this.button2); this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; this.panel1.Location = new System.Drawing.Point(0, 400); this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size(638, 41); this.panel1.TabIndex = 6; // // panel2 // this.panel2.Controls.Add(this.shibie_9); this.panel2.Controls.Add(this.shibie_8); this.panel2.Controls.Add(this.shibie_7); this.panel2.Controls.Add(this.shibie_6); this.panel2.Controls.Add(this.shibie_5); this.panel2.Controls.Add(this.shibie_4); this.panel2.Controls.Add(this.shibie_3); this.panel2.Controls.Add(this.shibie_2); this.panel2.Controls.Add(this.shibie_1); this.panel2.Controls.Add(this.shibie_0); this.panel2.Dock = System.Windows.Forms.DockStyle.Right; this.panel2.Location = new System.Drawing.Point(457, 0); this.panel2.Name = "panel2"; this.panel2.Size = new System.Drawing.Size(181, 400); this.panel2.TabIndex = 7; // // shibie_9 // this.shibie_9.Location = new System.Drawing.Point(6, 126); this.shibie_9.Name = "shibie_9"; this.shibie_9.Size = new System.Drawing.Size(42, 32); this.shibie_9.TabIndex = 0; this.shibie_9.UseVisualStyleBackColor = true; this.shibie_9.Click += new System.EventHandler(this.shibie_Click); // // shibie_8 // this.shibie_8.Location = new System.Drawing.Point(102, 88); this.shibie_8.Name = "shibie_8"; this.shibie_8.Size = new System.Drawing.Size(42, 32); this.shibie_8.TabIndex = 0; this.shibie_8.UseVisualStyleBackColor = true; this.shibie_8.Click += new System.EventHandler(this.shibie_Click); // // shibie_7 // this.shibie_7.Location = new System.Drawing.Point(102, 50); this.shibie_7.Name = "shibie_7"; this.shibie_7.Size = new System.Drawing.Size(42, 32); this.shibie_7.TabIndex = 0; this.shibie_7.UseVisualStyleBackColor = true; this.shibie_7.Click += new System.EventHandler(this.shibie_Click); // // shibie_6 // this.shibie_6.Location = new System.Drawing.Point(102, 12); this.shibie_6.Name = "shibie_6"; this.shibie_6.Size = new System.Drawing.Size(42, 32); this.shibie_6.TabIndex = 0; this.shibie_6.UseVisualStyleBackColor = true; this.shibie_6.Click += new System.EventHandler(this.shibie_Click); // // shibie_5 // this.shibie_5.Location = new System.Drawing.Point(54, 88); this.shibie_5.Name = "shibie_5"; this.shibie_5.Size = new System.Drawing.Size(42, 32); this.shibie_5.TabIndex = 0; this.shibie_5.UseVisualStyleBackColor = true; this.shibie_5.Click += new System.EventHandler(this.shibie_Click); // // shibie_4 // this.shibie_4.Location = new System.Drawing.Point(6, 88); this.shibie_4.Name = "shibie_4"; this.shibie_4.Size = new System.Drawing.Size(42, 32); this.shibie_4.TabIndex = 0; this.shibie_4.UseVisualStyleBackColor = true; this.shibie_4.Click += new System.EventHandler(this.shibie_Click); // // shibie_3 // this.shibie_3.Location = new System.Drawing.Point(54, 50); this.shibie_3.Name = "shibie_3"; this.shibie_3.Size = new System.Drawing.Size(42, 32); this.shibie_3.TabIndex = 0; this.shibie_3.UseVisualStyleBackColor = true; this.shibie_3.Click += new System.EventHandler(this.shibie_Click); // // shibie_2 // this.shibie_2.Location = new System.Drawing.Point(6, 50); this.shibie_2.Name = "shibie_2"; this.shibie_2.Size = new System.Drawing.Size(42, 32); this.shibie_2.TabIndex = 0; this.shibie_2.UseVisualStyleBackColor = true; this.shibie_2.Click += new System.EventHandler(this.shibie_Click); // // shibie_1 // this.shibie_1.Location = new System.Drawing.Point(54, 12); this.shibie_1.Name = "shibie_1"; this.shibie_1.Size = new System.Drawing.Size(42, 32); this.shibie_1.TabIndex = 0; this.shibie_1.UseVisualStyleBackColor = true; this.shibie_1.Click += new System.EventHandler(this.shibie_Click); // // shibie_0 // this.shibie_0.Location = new System.Drawing.Point(6, 12); this.shibie_0.Name = "shibie_0"; this.shibie_0.Size = new System.Drawing.Size(42, 32); this.shibie_0.TabIndex = 0; this.shibie_0.UseVisualStyleBackColor = true; this.shibie_0.Click += new System.EventHandler(this.shibie_Click); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(638, 441); this.Controls.Add(this.ink_here); this.Controls.Add(this.textBox1); this.Controls.Add(this.panel2); this.Controls.Add(this.panel1); this.MaximizeBox = false; this.MinimumSize = new System.Drawing.Size(329, 354); this.Name = "Form1"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "手写识别"; this.Load += new System.EventHandler(this.Form1_Load); ((System.ComponentModel.ISupportInitialize)(this.ink_here)).EndInit(); this.panel1.ResumeLayout(false); this.panel2.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.PictureBox ink_here; private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; private System.Windows.Forms.ColorDialog colorDialog1; private System.Windows.Forms.Button button3; private System.Windows.Forms.Timer timSb; private System.Windows.Forms.Button btnDelet; private System.Windows.Forms.Panel panel1; private System.Windows.Forms.Panel panel2; private System.Windows.Forms.Button shibie_0; private System.Windows.Forms.Button shibie_9; private System.Windows.Forms.Button shibie_8; private System.Windows.Forms.Button shibie_7; private System.Windows.Forms.Button shibie_6; private System.Windows.Forms.Button shibie_5; private System.Windows.Forms.Button shibie_4; private System.Windows.Forms.Button shibie_3; private System.Windows.Forms.Button shibie_2; private System.Windows.Forms.Button shibie_1; } }
代码文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Microsoft.Ink; namespace 手写识别 { public partial class Form1 : Form { InkCollector ic; RecognizerContext rct; // Recognizer rc; string FullCACText; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { ic = new InkCollector(ink_here.Handle); this.ic.Stroke += new InkCollectorStrokeEventHandler(ic_Stroke); ic.Enabled = true; ink_(); this.rct.RecognitionWithAlternates += new RecognizerContextRecognitionWithAlternatesEventHandler(rct_RecognitionWithAlternates); //单字识别 rct.RecognitionFlags = RecognitionModes.WordMode; rct.Strokes = ic.Ink.Strokes; } void rct_RecognitionWithAlternates(object sender, RecognizerContextRecognitionWithAlternatesEventArgs e) { string ResultString = ""; RecognitionAlternates alts; if (e.RecognitionStatus == RecognitionStatus.NoError) { alts = e.Result.GetAlternatesFromSelection(); Console.WriteLine(alts.Count); foreach (RecognitionAlternate alt in alts) { ResultString = ResultString + alt.ToString() + " "; } } FullCACText = ResultString.Trim(); Console.WriteLine(FullCACText); Control.CheckForIllegalCrossThreadCalls = false; GetString(FullCACText); Control.CheckForIllegalCrossThreadCalls = true; } private void GetString(string txt) { string[] str_temp = txt.Split(' '); string str_temp1 = "shibie_"; string str_temp2 = ""; if (str_temp.Length > 0) { for (int i = 0; i < str_temp.Length; i++) { str_temp2 = str_temp1 + i.ToString(); Control[] con_temp = panel2.Controls.Find(str_temp2, true); if (con_temp.Length > 0) { Button btn = (Button)(con_temp[0]); btn.Text = str_temp[i]; } } } } void ic_Stroke(object sender, InkCollectorStrokeEventArgs e) { rct.StopBackgroundRecognition(); rct.Strokes.Add(e.Stroke); rct.BackgroundRecognizeWithAlternates(0); } private void ink_() { Recognizers recos = new Recognizers(); Recognizer chineseReco = recos.GetDefaultRecognizer(); rct = chineseReco.CreateRecognizerContext(); } private void ic_Stroke() { } private void button3_Click(object sender, EventArgs e) { colorDialog1.FullOpen = true; colorDialog1.ShowDialog(); ic.DefaultDrawingAttributes.Color = colorDialog1.Color; } private void button2_Click(object sender, EventArgs e) { if (!ic.CollectingInk) { Strokes strokesToDelete = ic.Ink.Strokes; rct.StopBackgroundRecognition(); ic.Ink.DeleteStrokes(strokesToDelete); rct.Strokes = ic.Ink.Strokes; ic.Ink.DeleteStrokes();//清除手写区域笔画; ink_here.Refresh();//刷新手写区域 textBox1.Clear(); } } private void button1_Click(object sender, EventArgs e) { #region 单字识别处理 List<Point> lstPoints = new List<Point>(); foreach (var stroke in ic.Ink.Strokes) { lstPoints.AddRange(stroke.GetPoints()); } ic.Ink.DeleteStrokes();//清除手写区域笔画; Stroke sk = ic.Ink.CreateStroke(lstPoints.ToArray()); rct.Strokes.Add(sk); #endregion textBox1.SelectedText = ic.Ink.Strokes.ToString(); } private void timSb_Tick(object sender, EventArgs e) { button1.PerformClick(); if (!ic.CollectingInk) { Strokes strokesToDelete = ic.Ink.Strokes; rct.StopBackgroundRecognition(); ic.Ink.DeleteStrokes(strokesToDelete); rct.Strokes = ic.Ink.Strokes; ic.Ink.DeleteStrokes();//清除手写区域笔画; ink_here.Refresh();//刷新手写区域 } timSb.Stop(); } private void ink_here_MouseUp(object sender, MouseEventArgs e) { timSb.Enabled = true; } private void ink_here_MouseDown(object sender, MouseEventArgs e) { timSb.Enabled = false; } private void btnDelet_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(textBox1.Text)) textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1); } private void shibie_Click(object sender, EventArgs e) { int intStart = textBox1.SelectionStart; textBox1.Text = textBox1.Text.Remove(intStart - 1, 1); textBox1.Text = textBox1.Text.Insert(intStart - 1, (sender as Button).Text); textBox1.SelectionStart = intStart; } } }
需要引用Microsoft.Ink.dll,自己百度下载
然后看效果
作者:冰封一夏
出处:http://www.cnblogs.com/bfyx/
HZHControls官网:http://www.hzhcontrols.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,
且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
GitHub:https://github.com/kwwwvagaa/NetWinformControl
码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git