本文共 44368 字,大约阅读时间需要 147 分钟。
入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。
GitHub:
码云:
如果觉得写的还行,请点个 star 支持一下吧
欢迎前来交流探讨: 企鹅群568015492
终于到文本框了,文本框将包含原文本框扩展,透明文本框,数字输入文本框,带边框文本框
本文将讲解带边框文本框,可选弹出键盘样式,继承自控件基类UCControlBase
同时用到了无焦点窗体和键盘,如果你还没有了解,请前往查看
添加用户控件,命名UCTextBoxEx,继承自UCControlBase
属性
1 private bool m_isShowClearBtn = true; 2 int m_intSelectionStart = 0; 3 int m_intSelectionLength = 0; 4 ///5 /// 功能描述:是否显示清理按钮 6 /// 作 者:HZH 7 /// 创建日期:2019-02-28 16:13:52 8 /// 9 [Description("是否显示清理按钮"), Category("自定义")] 10 public bool IsShowClearBtn 11 { 12 get { return m_isShowClearBtn; } 13 set 14 { 15 m_isShowClearBtn = value; 16 if (value) 17 { 18 btnClear.Visible = !(txtInput.Text == "\r\n") && !string.IsNullOrEmpty(txtInput.Text); 19 } 20 else 21 { 22 btnClear.Visible = false; 23 } 24 } 25 } 26 27 private bool m_isShowSearchBtn = false; 28 ///29 /// 是否显示查询按钮 30 /// 31 32 [Description("是否显示查询按钮"), Category("自定义")] 33 public bool IsShowSearchBtn 34 { 35 get { return m_isShowSearchBtn; } 36 set 37 { 38 m_isShowSearchBtn = value; 39 btnSearch.Visible = value; 40 } 41 } 42 43 [Description("是否显示键盘"), Category("自定义")] 44 public bool IsShowKeyboard 45 { 46 get 47 { 48 return btnKeybord.Visible; 49 } 50 set 51 { 52 btnKeybord.Visible = value; 53 } 54 } 55 [Description("字体"), Category("自定义")] 56 public new Font Font 57 { 58 get 59 { 60 return this.txtInput.Font; 61 } 62 set 63 { 64 this.txtInput.Font = value; 65 } 66 } 67 68 [Description("输入类型"), Category("自定义")] 69 public TextInputType InputType 70 { 71 get { return txtInput.InputType; } 72 set { txtInput.InputType = value; } 73 } 74 75 ///76 /// 水印文字 77 /// 78 [Description("水印文字"), Category("自定义")] 79 public string PromptText 80 { 81 get 82 { 83 return this.txtInput.PromptText; 84 } 85 set 86 { 87 this.txtInput.PromptText = value; 88 } 89 } 90 91 [Description("水印字体"), Category("自定义")] 92 public Font PromptFont 93 { 94 get 95 { 96 return this.txtInput.PromptFont; 97 } 98 set 99 {100 this.txtInput.PromptFont = value;101 }102 }103 104 [Description("水印颜色"), Category("自定义")]105 public Color PromptColor106 {107 get108 {109 return this.txtInput.PromptColor;110 }111 set112 {113 this.txtInput.PromptColor = value;114 }115 }116 117 ///118 /// 获取或设置一个值,该值指示当输入类型InputType=Regex时,使用的正则表达式。119 /// 120 [Description("获取或设置一个值,该值指示当输入类型InputType=Regex时,使用的正则表达式。")]121 public string RegexPattern122 {123 get124 {125 return this.txtInput.RegexPattern;126 }127 set128 {129 this.txtInput.RegexPattern = value;130 }131 }132 ///133 /// 当InputType为数字类型时,能输入的最大值134 /// 135 [Description("当InputType为数字类型时,能输入的最大值。")]136 public decimal MaxValue137 {138 get139 {140 return this.txtInput.MaxValue;141 }142 set143 {144 this.txtInput.MaxValue = value;145 }146 }147 ///148 /// 当InputType为数字类型时,能输入的最小值149 /// 150 [Description("当InputType为数字类型时,能输入的最小值。")]151 public decimal MinValue152 {153 get154 {155 return this.txtInput.MinValue;156 }157 set158 {159 this.txtInput.MinValue = value;160 }161 }162 ///163 /// 当InputType为数字类型时,能输入的最小值164 /// 165 [Description("当InputType为数字类型时,小数位数。")]166 public int DecLength167 {168 get169 {170 return this.txtInput.DecLength;171 }172 set173 {174 this.txtInput.DecLength = value;175 }176 }177 178 private KeyBoardType keyBoardType = KeyBoardType.UCKeyBorderAll_EN;179 [Description("键盘打开样式"), Category("自定义")]180 public KeyBoardType KeyBoardType181 {182 get { return keyBoardType; }183 set { keyBoardType = value; }184 }185 [Description("查询按钮点击事件"), Category("自定义")]186 public event EventHandler SearchClick;187 188 [Description("文本改变事件"), Category("自定义")]189 public new event EventHandler TextChanged;190 [Description("键盘按钮点击事件"), Category("自定义")]191 public event EventHandler KeyboardClick;192 193 [Description("文本"), Category("自定义")]194 public string InputText195 {196 get197 {198 return txtInput.Text;199 }200 set201 {202 txtInput.Text = value;203 }204 }205 206 private bool isFocusColor = true;207 [Description("获取焦点是否变色"), Category("自定义")]208 public bool IsFocusColor209 {210 get { return isFocusColor; }211 set { isFocusColor = value; }212 }213 private Color _FillColor;214 public new Color FillColor215 {216 get217 {218 return _FillColor;219 }220 set221 {222 _FillColor = value;223 base.FillColor = value;224 this.txtInput.BackColor = value;225 }226 }
一些事件
1 void UCTextBoxEx_SizeChanged(object sender, EventArgs e) 2 { 3 this.txtInput.Location = new Point(this.txtInput.Location.X, (this.Height - txtInput.Height) / 2); 4 } 5 6 7 private void txtInput_TextChanged(object sender, EventArgs e) 8 { 9 if (m_isShowClearBtn) 10 { 11 btnClear.Visible = !(txtInput.Text == "\r\n") && !string.IsNullOrEmpty(txtInput.Text); 12 } 13 if (TextChanged != null) 14 { 15 TextChanged(sender, e); 16 } 17 } 18 19 private void btnClear_MouseDown(object sender, MouseEventArgs e) 20 { 21 txtInput.Clear(); 22 txtInput.Focus(); 23 } 24 25 private void btnSearch_MouseDown(object sender, MouseEventArgs e) 26 { 27 if (SearchClick != null) 28 { 29 SearchClick(sender, e); 30 } 31 } 32 Forms.FrmAnchor m_frmAnchor; 33 private void btnKeybord_MouseDown(object sender, MouseEventArgs e) 34 { 35 m_intSelectionStart = this.txtInput.SelectionStart; 36 m_intSelectionLength = this.txtInput.SelectionLength; 37 this.FindForm().ActiveControl = this; 38 this.FindForm().ActiveControl = this.txtInput; 39 switch (keyBoardType) 40 { 41 case KeyBoardType.UCKeyBorderAll_EN: 42 if (m_frmAnchor == null) 43 { 44 if (m_frmAnchor == null) 45 { 46 UCKeyBorderAll key = new UCKeyBorderAll(); 47 key.CharType = KeyBorderCharType.CHAR; 48 key.RetractClike += (a, b) => 49 { 50 m_frmAnchor.Hide(); 51 }; 52 m_frmAnchor = new Forms.FrmAnchor(this, key); 53 m_frmAnchor.VisibleChanged += (a, b) => 54 { 55 if (m_frmAnchor.Visible) 56 { 57 this.txtInput.SelectionStart = m_intSelectionStart; 58 this.txtInput.SelectionLength = m_intSelectionLength; 59 } 60 }; 61 } 62 } 63 break; 64 case KeyBoardType.UCKeyBorderAll_Num: 65 66 if (m_frmAnchor == null) 67 { 68 UCKeyBorderAll key = new UCKeyBorderAll(); 69 key.CharType = KeyBorderCharType.NUMBER; 70 key.RetractClike += (a, b) => 71 { 72 m_frmAnchor.Hide(); 73 }; 74 m_frmAnchor = new Forms.FrmAnchor(this, key); 75 m_frmAnchor.VisibleChanged += (a, b) => 76 { 77 if (m_frmAnchor.Visible) 78 { 79 this.txtInput.SelectionStart = m_intSelectionStart; 80 this.txtInput.SelectionLength = m_intSelectionLength; 81 } 82 }; 83 } 84 85 break; 86 case KeyBoardType.UCKeyBorderNum: 87 if (m_frmAnchor == null) 88 { 89 UCKeyBorderNum key = new UCKeyBorderNum(); 90 m_frmAnchor = new Forms.FrmAnchor(this, key); 91 m_frmAnchor.VisibleChanged += (a, b) => 92 { 93 if (m_frmAnchor.Visible) 94 { 95 this.txtInput.SelectionStart = m_intSelectionStart; 96 this.txtInput.SelectionLength = m_intSelectionLength; 97 } 98 }; 99 }100 break;101 case HZH_Controls.Controls.KeyBoardType.UCKeyBorderHand:102 103 m_frmAnchor = new Forms.FrmAnchor(this, new Size(504, 361));104 m_frmAnchor.VisibleChanged += m_frmAnchor_VisibleChanged;105 m_frmAnchor.Disposed += m_frmAnchor_Disposed;106 Panel p = new Panel();107 p.Dock = DockStyle.Fill;108 p.Name = "keyborder";109 m_frmAnchor.Controls.Add(p);110 111 UCBtnExt btnDelete = new UCBtnExt();112 btnDelete.Name = "btnDelete";113 btnDelete.Size = new Size(80, 28);114 btnDelete.FillColor = Color.White;115 btnDelete.IsRadius = false;116 btnDelete.ConerRadius = 1;117 btnDelete.IsShowRect = true;118 btnDelete.RectColor = Color.FromArgb(189, 197, 203);119 btnDelete.Location = new Point(198, 332);120 btnDelete.BtnFont = new System.Drawing.Font("微软雅黑", 8);121 btnDelete.BtnText = "删除";122 btnDelete.BtnClick += (a, b) =>123 {124 SendKeys.Send("{BACKSPACE}");125 };126 m_frmAnchor.Controls.Add(btnDelete);127 btnDelete.BringToFront();128 129 UCBtnExt btnEnter = new UCBtnExt();130 btnEnter.Name = "btnEnter";131 btnEnter.Size = new Size(82, 28);132 btnEnter.FillColor = Color.White;133 btnEnter.IsRadius = false;134 btnEnter.ConerRadius = 1;135 btnEnter.IsShowRect = true;136 btnEnter.RectColor = Color.FromArgb(189, 197, 203);137 btnEnter.Location = new Point(278, 332);138 btnEnter.BtnFont = new System.Drawing.Font("微软雅黑", 8);139 btnEnter.BtnText = "确定";140 btnEnter.BtnClick += (a, b) =>141 {142 SendKeys.Send("{ENTER}");143 m_frmAnchor.Hide();144 };145 m_frmAnchor.Controls.Add(btnEnter);146 btnEnter.BringToFront();147 m_frmAnchor.VisibleChanged += (a, b) =>148 {149 if (m_frmAnchor.Visible)150 {151 this.txtInput.SelectionStart = m_intSelectionStart;152 this.txtInput.SelectionLength = m_intSelectionLength;153 }154 };155 break;156 }157 if (!m_frmAnchor.Visible)158 m_frmAnchor.Show(this.FindForm());159 if (KeyboardClick != null)160 {161 KeyboardClick(sender, e);162 }163 }164 165 void m_frmAnchor_Disposed(object sender, EventArgs e)166 {167 if (m_HandAppWin != IntPtr.Zero)168 {169 if (m_HandPWin != null && !m_HandPWin.HasExited)170 m_HandPWin.Kill();171 m_HandPWin = null;172 m_HandAppWin = IntPtr.Zero;173 }174 }175 176 177 IntPtr m_HandAppWin;178 Process m_HandPWin = null;179 string m_HandExeName = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "HandInput\\handinput.exe");180 181 void m_frmAnchor_VisibleChanged(object sender, EventArgs e)182 {183 if (m_frmAnchor.Visible)184 {185 var lstP = Process.GetProcessesByName("handinput");186 if (lstP.Length > 0)187 {188 foreach (var item in lstP)189 {190 item.Kill();191 }192 }193 m_HandAppWin = IntPtr.Zero;194 195 if (m_HandPWin == null)196 {197 m_HandPWin = null;198 199 m_HandPWin = System.Diagnostics.Process.Start(this.m_HandExeName);200 m_HandPWin.WaitForInputIdle();201 }202 while (m_HandPWin.MainWindowHandle == IntPtr.Zero)203 {204 Thread.Sleep(10);205 }206 m_HandAppWin = m_HandPWin.MainWindowHandle;207 Control p = m_frmAnchor.Controls.Find("keyborder", false)[0];208 SetParent(m_HandAppWin, p.Handle);209 ControlHelper.SetForegroundWindow(this.FindForm().Handle);210 MoveWindow(m_HandAppWin, -111, -41, 626, 412, true);211 }212 else213 {214 if (m_HandAppWin != IntPtr.Zero)215 {216 if (m_HandPWin != null && !m_HandPWin.HasExited)217 m_HandPWin.Kill();218 m_HandPWin = null;219 m_HandAppWin = IntPtr.Zero;220 }221 }222 }223 224 private void UCTextBoxEx_MouseDown(object sender, MouseEventArgs e)225 {226 this.ActiveControl = txtInput;227 }228 229 private void UCTextBoxEx_Load(object sender, EventArgs e)230 {231 if (!Enabled)232 {233 base.FillColor = Color.FromArgb(240, 240, 240);234 txtInput.BackColor = Color.FromArgb(240, 240, 240);235 }236 else237 {238 FillColor = _FillColor;239 txtInput.BackColor = _FillColor;240 }241 }242 [DllImport("user32.dll", SetLastError = true)]243 private static extern long SetParent(IntPtr hWndChild, IntPtr hWndNewParent);244 245 [DllImport("user32.dll", SetLastError = true)]246 private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint);247 [DllImport("user32.dll", EntryPoint = "ShowWindow")]248 private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);249 [DllImport("user32.dll")]250 private static extern bool SetWindowPos(IntPtr hWnd, int hWndlnsertAfter, int X, int Y, int cx, int cy, uint Flags);251 private const int GWL_STYLE = -16;252 private const int WS_CHILD = 0x40000000;//设置窗口属性为child253 254 [DllImport("user32.dll", EntryPoint = "GetWindowLong")]255 public static extern int GetWindowLong(IntPtr hwnd, int nIndex);256 257 [DllImport("user32.dll", EntryPoint = "SetWindowLong")]258 public static extern int SetWindowLong(IntPtr hwnd, int nIndex, int dwNewLong);259 260 [DllImport("user32.dll")]261 private extern static IntPtr SetActiveWindow(IntPtr handle);
你也许注意到了m_frmAnchor_VisibleChanged事件,当键盘窗体显示的时候,启动手写输入软件(这里用了搜狗的手写),将手写软件窗体包含进键盘窗体中来实现手写功能
完整的代码
1 // 版权所有 黄正辉 交流群:568015492 QQ:623128629 2 // 文件名称:UCTextBoxEx.cs 3 // 创建日期:2019-08-15 16:03:58 4 // 功能描述:TextBox 5 // 项目地址:https://gitee.com/kwwwvagaa/net_winform_custom_control 6 using System; 7 using System.Collections.Generic; 8 using System.ComponentModel; 9 using System.Drawing; 10 using System.Data; 11 using System.Linq; 12 using System.Text; 13 using System.Windows.Forms; 14 using System.Runtime.InteropServices; 15 using System.Diagnostics; 16 using System.Threading; 17 18 namespace HZH_Controls.Controls 19 { 20 [DefaultEvent("TextChanged")] 21 public partial class UCTextBoxEx : UCControlBase 22 { 23 private bool m_isShowClearBtn = true; 24 int m_intSelectionStart = 0; 25 int m_intSelectionLength = 0; 26 ///27 /// 功能描述:是否显示清理按钮 28 /// 作 者:HZH 29 /// 创建日期:2019-02-28 16:13:52 30 /// 31 [Description("是否显示清理按钮"), Category("自定义")] 32 public bool IsShowClearBtn 33 { 34 get { return m_isShowClearBtn; } 35 set 36 { 37 m_isShowClearBtn = value; 38 if (value) 39 { 40 btnClear.Visible = !(txtInput.Text == "\r\n") && !string.IsNullOrEmpty(txtInput.Text); 41 } 42 else 43 { 44 btnClear.Visible = false; 45 } 46 } 47 } 48 49 private bool m_isShowSearchBtn = false; 50 ///51 /// 是否显示查询按钮 52 /// 53 54 [Description("是否显示查询按钮"), Category("自定义")] 55 public bool IsShowSearchBtn 56 { 57 get { return m_isShowSearchBtn; } 58 set 59 { 60 m_isShowSearchBtn = value; 61 btnSearch.Visible = value; 62 } 63 } 64 65 [Description("是否显示键盘"), Category("自定义")] 66 public bool IsShowKeyboard 67 { 68 get 69 { 70 return btnKeybord.Visible; 71 } 72 set 73 { 74 btnKeybord.Visible = value; 75 } 76 } 77 [Description("字体"), Category("自定义")] 78 public new Font Font 79 { 80 get 81 { 82 return this.txtInput.Font; 83 } 84 set 85 { 86 this.txtInput.Font = value; 87 } 88 } 89 90 [Description("输入类型"), Category("自定义")] 91 public TextInputType InputType 92 { 93 get { return txtInput.InputType; } 94 set { txtInput.InputType = value; } 95 } 96 97 ///98 /// 水印文字 99 /// 100 [Description("水印文字"), Category("自定义")]101 public string PromptText102 {103 get104 {105 return this.txtInput.PromptText;106 }107 set108 {109 this.txtInput.PromptText = value;110 }111 }112 113 [Description("水印字体"), Category("自定义")]114 public Font PromptFont115 {116 get117 {118 return this.txtInput.PromptFont;119 }120 set121 {122 this.txtInput.PromptFont = value;123 }124 }125 126 [Description("水印颜色"), Category("自定义")]127 public Color PromptColor128 {129 get130 {131 return this.txtInput.PromptColor;132 }133 set134 {135 this.txtInput.PromptColor = value;136 }137 }138 139 ///140 /// 获取或设置一个值,该值指示当输入类型InputType=Regex时,使用的正则表达式。141 /// 142 [Description("获取或设置一个值,该值指示当输入类型InputType=Regex时,使用的正则表达式。")]143 public string RegexPattern144 {145 get146 {147 return this.txtInput.RegexPattern;148 }149 set150 {151 this.txtInput.RegexPattern = value;152 }153 }154 ///155 /// 当InputType为数字类型时,能输入的最大值156 /// 157 [Description("当InputType为数字类型时,能输入的最大值。")]158 public decimal MaxValue159 {160 get161 {162 return this.txtInput.MaxValue;163 }164 set165 {166 this.txtInput.MaxValue = value;167 }168 }169 ///170 /// 当InputType为数字类型时,能输入的最小值171 /// 172 [Description("当InputType为数字类型时,能输入的最小值。")]173 public decimal MinValue174 {175 get176 {177 return this.txtInput.MinValue;178 }179 set180 {181 this.txtInput.MinValue = value;182 }183 }184 ///185 /// 当InputType为数字类型时,能输入的最小值186 /// 187 [Description("当InputType为数字类型时,小数位数。")]188 public int DecLength189 {190 get191 {192 return this.txtInput.DecLength;193 }194 set195 {196 this.txtInput.DecLength = value;197 }198 }199 200 private KeyBoardType keyBoardType = KeyBoardType.UCKeyBorderAll_EN;201 [Description("键盘打开样式"), Category("自定义")]202 public KeyBoardType KeyBoardType203 {204 get { return keyBoardType; }205 set { keyBoardType = value; }206 }207 [Description("查询按钮点击事件"), Category("自定义")]208 public event EventHandler SearchClick;209 210 [Description("文本改变事件"), Category("自定义")]211 public new event EventHandler TextChanged;212 [Description("键盘按钮点击事件"), Category("自定义")]213 public event EventHandler KeyboardClick;214 215 [Description("文本"), Category("自定义")]216 public string InputText217 {218 get219 {220 return txtInput.Text;221 }222 set223 {224 txtInput.Text = value;225 }226 }227 228 private bool isFocusColor = true;229 [Description("获取焦点是否变色"), Category("自定义")]230 public bool IsFocusColor231 {232 get { return isFocusColor; }233 set { isFocusColor = value; }234 }235 private Color _FillColor;236 public new Color FillColor237 {238 get239 {240 return _FillColor;241 }242 set243 {244 _FillColor = value;245 base.FillColor = value;246 this.txtInput.BackColor = value;247 }248 }249 public UCTextBoxEx()250 {251 InitializeComponent();252 txtInput.SizeChanged += UCTextBoxEx_SizeChanged;253 this.SizeChanged += UCTextBoxEx_SizeChanged;254 txtInput.GotFocus += (a, b) =>255 {256 if (isFocusColor)257 this.RectColor = Color.FromArgb(78, 169, 255);258 };259 txtInput.LostFocus += (a, b) =>260 {261 if (isFocusColor)262 this.RectColor = Color.FromArgb(220, 220, 220);263 };264 }265 266 void UCTextBoxEx_SizeChanged(object sender, EventArgs e)267 {268 this.txtInput.Location = new Point(this.txtInput.Location.X, (this.Height - txtInput.Height) / 2);269 }270 271 272 private void txtInput_TextChanged(object sender, EventArgs e)273 {274 if (m_isShowClearBtn)275 {276 btnClear.Visible = !(txtInput.Text == "\r\n") && !string.IsNullOrEmpty(txtInput.Text);277 }278 if (TextChanged != null)279 {280 TextChanged(sender, e);281 }282 }283 284 private void btnClear_MouseDown(object sender, MouseEventArgs e)285 {286 txtInput.Clear();287 txtInput.Focus();288 }289 290 private void btnSearch_MouseDown(object sender, MouseEventArgs e)291 {292 if (SearchClick != null)293 {294 SearchClick(sender, e);295 }296 }297 Forms.FrmAnchor m_frmAnchor;298 private void btnKeybord_MouseDown(object sender, MouseEventArgs e)299 {300 m_intSelectionStart = this.txtInput.SelectionStart;301 m_intSelectionLength = this.txtInput.SelectionLength;302 this.FindForm().ActiveControl = this;303 this.FindForm().ActiveControl = this.txtInput;304 switch (keyBoardType)305 {306 case KeyBoardType.UCKeyBorderAll_EN:307 if (m_frmAnchor == null)308 {309 if (m_frmAnchor == null)310 {311 UCKeyBorderAll key = new UCKeyBorderAll();312 key.CharType = KeyBorderCharType.CHAR;313 key.RetractClike += (a, b) =>314 {315 m_frmAnchor.Hide();316 };317 m_frmAnchor = new Forms.FrmAnchor(this, key);318 m_frmAnchor.VisibleChanged += (a, b) =>319 {320 if (m_frmAnchor.Visible)321 {322 this.txtInput.SelectionStart = m_intSelectionStart;323 this.txtInput.SelectionLength = m_intSelectionLength;324 }325 };326 }327 }328 break;329 case KeyBoardType.UCKeyBorderAll_Num:330 331 if (m_frmAnchor == null)332 {333 UCKeyBorderAll key = new UCKeyBorderAll();334 key.CharType = KeyBorderCharType.NUMBER;335 key.RetractClike += (a, b) =>336 {337 m_frmAnchor.Hide();338 };339 m_frmAnchor = new Forms.FrmAnchor(this, key);340 m_frmAnchor.VisibleChanged += (a, b) =>341 {342 if (m_frmAnchor.Visible)343 {344 this.txtInput.SelectionStart = m_intSelectionStart;345 this.txtInput.SelectionLength = m_intSelectionLength;346 }347 };348 }349 350 break;351 case KeyBoardType.UCKeyBorderNum:352 if (m_frmAnchor == null)353 {354 UCKeyBorderNum key = new UCKeyBorderNum();355 m_frmAnchor = new Forms.FrmAnchor(this, key);356 m_frmAnchor.VisibleChanged += (a, b) =>357 {358 if (m_frmAnchor.Visible)359 {360 this.txtInput.SelectionStart = m_intSelectionStart;361 this.txtInput.SelectionLength = m_intSelectionLength;362 }363 };364 }365 break;366 case HZH_Controls.Controls.KeyBoardType.UCKeyBorderHand:367 368 m_frmAnchor = new Forms.FrmAnchor(this, new Size(504, 361));369 m_frmAnchor.VisibleChanged += m_frmAnchor_VisibleChanged;370 m_frmAnchor.Disposed += m_frmAnchor_Disposed;371 Panel p = new Panel();372 p.Dock = DockStyle.Fill;373 p.Name = "keyborder";374 m_frmAnchor.Controls.Add(p);375 376 UCBtnExt btnDelete = new UCBtnExt();377 btnDelete.Name = "btnDelete";378 btnDelete.Size = new Size(80, 28);379 btnDelete.FillColor = Color.White;380 btnDelete.IsRadius = false;381 btnDelete.ConerRadius = 1;382 btnDelete.IsShowRect = true;383 btnDelete.RectColor = Color.FromArgb(189, 197, 203);384 btnDelete.Location = new Point(198, 332);385 btnDelete.BtnFont = new System.Drawing.Font("微软雅黑", 8);386 btnDelete.BtnText = "删除";387 btnDelete.BtnClick += (a, b) =>388 {389 SendKeys.Send("{BACKSPACE}");390 };391 m_frmAnchor.Controls.Add(btnDelete);392 btnDelete.BringToFront();393 394 UCBtnExt btnEnter = new UCBtnExt();395 btnEnter.Name = "btnEnter";396 btnEnter.Size = new Size(82, 28);397 btnEnter.FillColor = Color.White;398 btnEnter.IsRadius = false;399 btnEnter.ConerRadius = 1;400 btnEnter.IsShowRect = true;401 btnEnter.RectColor = Color.FromArgb(189, 197, 203);402 btnEnter.Location = new Point(278, 332);403 btnEnter.BtnFont = new System.Drawing.Font("微软雅黑", 8);404 btnEnter.BtnText = "确定";405 btnEnter.BtnClick += (a, b) =>406 {407 SendKeys.Send("{ENTER}");408 m_frmAnchor.Hide();409 };410 m_frmAnchor.Controls.Add(btnEnter);411 btnEnter.BringToFront();412 m_frmAnchor.VisibleChanged += (a, b) =>413 {414 if (m_frmAnchor.Visible)415 {416 this.txtInput.SelectionStart = m_intSelectionStart;417 this.txtInput.SelectionLength = m_intSelectionLength;418 }419 };420 break;421 }422 if (!m_frmAnchor.Visible)423 m_frmAnchor.Show(this.FindForm());424 if (KeyboardClick != null)425 {426 KeyboardClick(sender, e);427 }428 }429 430 void m_frmAnchor_Disposed(object sender, EventArgs e)431 {432 if (m_HandAppWin != IntPtr.Zero)433 {434 if (m_HandPWin != null && !m_HandPWin.HasExited)435 m_HandPWin.Kill();436 m_HandPWin = null;437 m_HandAppWin = IntPtr.Zero;438 }439 }440 441 442 IntPtr m_HandAppWin;443 Process m_HandPWin = null;444 string m_HandExeName = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "HandInput\\handinput.exe");445 446 void m_frmAnchor_VisibleChanged(object sender, EventArgs e)447 {448 if (m_frmAnchor.Visible)449 {450 var lstP = Process.GetProcessesByName("handinput");451 if (lstP.Length > 0)452 {453 foreach (var item in lstP)454 {455 item.Kill();456 }457 }458 m_HandAppWin = IntPtr.Zero;459 460 if (m_HandPWin == null)461 {462 m_HandPWin = null;463 464 m_HandPWin = System.Diagnostics.Process.Start(this.m_HandExeName);465 m_HandPWin.WaitForInputIdle();466 }467 while (m_HandPWin.MainWindowHandle == IntPtr.Zero)468 {469 Thread.Sleep(10);470 }471 m_HandAppWin = m_HandPWin.MainWindowHandle;472 Control p = m_frmAnchor.Controls.Find("keyborder", false)[0];473 SetParent(m_HandAppWin, p.Handle);474 ControlHelper.SetForegroundWindow(this.FindForm().Handle);475 MoveWindow(m_HandAppWin, -111, -41, 626, 412, true);476 }477 else478 {479 if (m_HandAppWin != IntPtr.Zero)480 {481 if (m_HandPWin != null && !m_HandPWin.HasExited)482 m_HandPWin.Kill();483 m_HandPWin = null;484 m_HandAppWin = IntPtr.Zero;485 }486 }487 }488 489 private void UCTextBoxEx_MouseDown(object sender, MouseEventArgs e)490 {491 this.ActiveControl = txtInput;492 }493 494 private void UCTextBoxEx_Load(object sender, EventArgs e)495 {496 if (!Enabled)497 {498 base.FillColor = Color.FromArgb(240, 240, 240);499 txtInput.BackColor = Color.FromArgb(240, 240, 240);500 }501 else502 {503 FillColor = _FillColor;504 txtInput.BackColor = _FillColor;505 }506 }507 [DllImport("user32.dll", SetLastError = true)]508 private static extern long SetParent(IntPtr hWndChild, IntPtr hWndNewParent);509 510 [DllImport("user32.dll", SetLastError = true)]511 private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint);512 [DllImport("user32.dll", EntryPoint = "ShowWindow")]513 private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);514 [DllImport("user32.dll")]515 private static extern bool SetWindowPos(IntPtr hWnd, int hWndlnsertAfter, int X, int Y, int cx, int cy, uint Flags);516 private const int GWL_STYLE = -16;517 private const int WS_CHILD = 0x40000000;//设置窗口属性为child518 519 [DllImport("user32.dll", EntryPoint = "GetWindowLong")]520 public static extern int GetWindowLong(IntPtr hwnd, int nIndex);521 522 [DllImport("user32.dll", EntryPoint = "SetWindowLong")]523 public static extern int SetWindowLong(IntPtr hwnd, int nIndex, int dwNewLong);524 525 [DllImport("user32.dll")]526 private extern static IntPtr SetActiveWindow(IntPtr handle);527 }528 }
1 namespace HZH_Controls.Controls 2 { 3 partial class UCTextBoxEx 4 { 5 ///6 /// 必需的设计器变量。 7 /// 8 private System.ComponentModel.IContainer components = null; 9 10 ///11 /// 清理所有正在使用的资源。 12 /// 13 /// 如果应释放托管资源,为 true;否则为 false。 14 protected override void Dispose(bool disposing) 15 { 16 if (disposing && (components != null)) 17 { 18 components.Dispose(); 19 } 20 base.Dispose(disposing); 21 } 22 23 #region 组件设计器生成的代码 24 25 ///26 /// 设计器支持所需的方法 - 不要 27 /// 使用代码编辑器修改此方法的内容。 28 /// 29 private void InitializeComponent() 30 { 31 System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UCTextBoxEx)); 32 this.txtInput = new HZH_Controls.Controls.TextBoxEx(); 33 this.imageList1 = new System.Windows.Forms.ImageList(); 34 this.btnClear = new System.Windows.Forms.Panel(); 35 this.btnKeybord = new System.Windows.Forms.Panel(); 36 this.btnSearch = new System.Windows.Forms.Panel(); 37 this.SuspendLayout(); 38 // 39 // txtInput 40 // 41 this.txtInput.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); 42 this.txtInput.BorderStyle = System.Windows.Forms.BorderStyle.None; 43 this.txtInput.DecLength = 2; 44 this.txtInput.Font = new System.Drawing.Font("微软雅黑", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); 45 this.txtInput.InputType = TextInputType.NotControl; 46 this.txtInput.Location = new System.Drawing.Point(8, 9); 47 this.txtInput.Margin = new System.Windows.Forms.Padding(3, 3, 10, 3); 48 this.txtInput.MaxValue = new decimal(new int[] { 49 1000000, 50 0, 51 0, 52 0}); 53 this.txtInput.MinValue = new decimal(new int[] { 54 1000000, 55 0, 56 0, 57 -2147483648}); 58 this.txtInput.MyRectangle = new System.Drawing.Rectangle(0, 0, 0, 0); 59 this.txtInput.Name = "txtInput"; 60 this.txtInput.OldText = null; 61 this.txtInput.PromptColor = System.Drawing.Color.Gray; 62 this.txtInput.PromptFont = new System.Drawing.Font("微软雅黑", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); 63 this.txtInput.PromptText = ""; 64 this.txtInput.RegexPattern = ""; 65 this.txtInput.Size = new System.Drawing.Size(309, 24); 66 this.txtInput.TabIndex = 0; 67 this.txtInput.TextChanged += new System.EventHandler(this.txtInput_TextChanged); 68 // 69 // imageList1 70 // 71 this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); 72 this.imageList1.TransparentColor = System.Drawing.Color.Transparent; 73 this.imageList1.Images.SetKeyName(0, "ic_cancel_black_24dp.png"); 74 this.imageList1.Images.SetKeyName(1, "ic_search_black_24dp.png"); 75 this.imageList1.Images.SetKeyName(2, "keyboard.png"); 76 // 77 // btnClear 78 // 79 this.btnClear.BackgroundImage = global::HZH_Controls.Properties.Resources.input_clear; 80 this.btnClear.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; 81 this.btnClear.Cursor = System.Windows.Forms.Cursors.Default; 82 this.btnClear.Dock = System.Windows.Forms.DockStyle.Right; 83 this.btnClear.Location = new System.Drawing.Point(227, 5); 84 this.btnClear.Name = "btnClear"; 85 this.btnClear.Size = new System.Drawing.Size(30, 32); 86 this.btnClear.TabIndex = 4; 87 this.btnClear.Visible = false; 88 this.btnClear.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnClear_MouseDown); 89 // 90 // btnKeybord 91 // 92 this.btnKeybord.BackgroundImage = global::HZH_Controls.Properties.Resources.keyboard; 93 this.btnKeybord.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; 94 this.btnKeybord.Cursor = System.Windows.Forms.Cursors.Default; 95 this.btnKeybord.Dock = System.Windows.Forms.DockStyle.Right; 96 this.btnKeybord.Location = new System.Drawing.Point(257, 5); 97 this.btnKeybord.Name = "btnKeybord"; 98 this.btnKeybord.Size = new System.Drawing.Size(30, 32); 99 this.btnKeybord.TabIndex = 6;100 this.btnKeybord.Visible = false;101 this.btnKeybord.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnKeybord_MouseDown);102 // 103 // btnSearch104 // 105 this.btnSearch.BackgroundImage = global::HZH_Controls.Properties.Resources.ic_search_black_24dp;106 this.btnSearch.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;107 this.btnSearch.Cursor = System.Windows.Forms.Cursors.Default;108 this.btnSearch.Dock = System.Windows.Forms.DockStyle.Right;109 this.btnSearch.Location = new System.Drawing.Point(287, 5);110 this.btnSearch.Name = "btnSearch";111 this.btnSearch.Size = new System.Drawing.Size(30, 32);112 this.btnSearch.TabIndex = 5;113 this.btnSearch.Visible = false;114 this.btnSearch.MouseDown += new System.Windows.Forms.MouseEventHandler(this.btnSearch_MouseDown);115 // 116 // UCTextBoxEx117 // 118 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;119 this.BackColor = System.Drawing.Color.Transparent;120 this.ConerRadius = 5;121 this.Controls.Add(this.btnClear);122 this.Controls.Add(this.btnKeybord);123 this.Controls.Add(this.btnSearch);124 this.Controls.Add(this.txtInput);125 this.Cursor = System.Windows.Forms.Cursors.IBeam;126 this.IsShowRect = true;127 this.IsRadius = true;128 this.Name = "UCTextBoxEx";129 this.Padding = new System.Windows.Forms.Padding(5);130 this.Size = new System.Drawing.Size(322, 42);131 this.Load += new System.EventHandler(this.UCTextBoxEx_Load);132 this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.UCTextBoxEx_MouseDown);133 this.ResumeLayout(false);134 this.PerformLayout();135 136 }137 138 #endregion139 140 private System.Windows.Forms.ImageList imageList1;141 public TextBoxEx txtInput;142 private System.Windows.Forms.Panel btnClear;143 private System.Windows.Forms.Panel btnSearch;144 private System.Windows.Forms.Panel btnKeybord;145 }146 }
如果你喜欢的话,请到 点个星 星吧
转载地址:http://hfvkz.baihongyu.com/