C#中怎么利用TextBox輸入數(shù)字

C# 中怎么利用TextBox輸入數(shù)字,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

延安網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,延安網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為延安上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個(gè)售后服務(wù)好的延安做網(wǎng)站的公司定做!

1、重寫鍵盤事件OnKeyPress()

鍵盤輸入的字符可以通過重寫c# textbox數(shù)字控件的OnKeyPress()事件處理,見如下代碼:

protected override void OnKeyPress(KeyPressEventArgs e)  // 屏蔽非數(shù)字鍵  {      base.OnKeyPress(e);
  •     if (this.ReadOnly)  // 只讀, 不處理 

  •     {  

  •         return;  

  •     }  

  •             if ((int)e.KeyChar <= 32)  // 特殊鍵(含空格), 不處理 

  •     {  

  •         return;  

  •     }  

  •         if (!char.IsDigit(e.KeyChar))  // 非數(shù)字鍵, 放棄該輸入 

  •     {  

  •         e.Handled = true;  

  •         return;  

  •     }  

2、重寫命令鍵處理方法ProcessCmdKey()

可以在ProcessCmdKey()中捕獲快捷鍵Ctrl+V操作。首先要清除當(dāng)前的選擇文本,然后讀取剪切板ClipBoard中的內(nèi)容,最后通過模擬鍵盤輸入的方式”輸入“ClipBoard的內(nèi)容。需要指出,在ProcessCmdKey()方法中不能使用靜態(tài)方法 SendKeys.Send(),但可以通過控件的WndProc()方法發(fā)送字符消息以達(dá)到模擬鍵盤錄入的目的。見如下代碼:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)    {      if (keyData == (Keys)Shortcut.CtrlV)  // 快捷鍵 Ctrl+V 粘貼操作
  •     {  

  •         this.ClearSelection();  

  •         string text = Clipboard.GetText();  

  •         for (int k = 0; k < text.Length; k++) // can not use SendKeys. 

  •         {  

  •             // 通過消息模擬鍵盤輸入, SendKeys.Send()靜態(tài)方法不行 

  •             SendCharKey(text[k]);  

  •         }  

  •         return true;      

  • }  

  •     return base.ProcessCmdKey(ref msg, keyData);  

private void SendCharKey(char c)  // 通過消息模擬鍵盤錄入  {      Message msg = new Message();
  •     msg.HWnd = this.Handle;  

  •     msg.Msg = WM_CHAR;  // 輸入鍵盤字符消息 0x0102 

  •     msg.WParam = (IntPtr)c;  

  •     msg.LParam = IntPtr.Zero;  

  •     base.WndProc(ref msg);  


3、重寫消息處理方法WndProc()

可以在定制c# textbox數(shù)字控件中創(chuàng)建無內(nèi)容的上下文菜單對象,從而屏蔽該菜單,方法是在定制控件的構(gòu)造函數(shù)中增加如下代碼:

public class CustomTextBox: TextBox  {      // 創(chuàng)建無內(nèi)容菜單對象, 等價(jià)屏蔽該控件的上下文菜單
  •     this.ContextMenu = new ConTextMenu();  

  •   } 

  • 由于上下文菜單的Paste操作對應(yīng)Windows的WM_PASTE消息,于是可以在控件的WndProc()方法中捕獲該消息,然后獲得剪切板 ClipBoard中的內(nèi)容,最后通過SendKeys.Send()方法模擬鍵盤錄入操作。需要注意,這里不能調(diào)用前面ProcessCmdKey() 中模擬鍵盤輸入函數(shù)SendCharKey()。見如下代碼:

    protected override void WndProc(ref Message m)  // 捕獲Mouse的Paste消息  {      if (m.Msg == WM_PASTE)  // 選擇上下文菜單的"粘貼"操作    {          this.ClearSelection();          SendKeys.Send(Clipboard.GetText());  // 模擬鍵盤輸入      }      else     {          base.WndProc(ref m);      }  }

    4、消除選擇ClearSelection()、刪除字符DeleteText()

    還必須分析前面代碼中的兩個(gè)函數(shù):
    ClearSelection()用以清除當(dāng)前的選擇文本,即清除this.SelectedText
    DeleteText()則刪除當(dāng)前字符
    需要指出其中的技巧,就是轉(zhuǎn)換Delete鍵操作為BackSpace操作。此外,函數(shù)DeleteText()還需要確定當(dāng)前的this.SelectionStart值。具體代碼如下:

    private void ClearSelection() // 清除當(dāng)前TextBox的選擇  {      if (this.SelectionLength == 0)      {          return;      }      int selLength = this.SelectedText.Length;    this.SelectionStart += this.SelectedText.Length;  // 光標(biāo)在選擇之后      this.SelectionLength = 0;      for (int k = 1; k <= selLength; k++)      {          this.DeleteText(Keys.Back);      }  }
    private void DeleteText(Keys key) // 刪除字符并計(jì)算SelectionStart值  {      int selStart = this.SelectionStart;      if (key == Keys.Delete)  // 轉(zhuǎn)換Delete操作為BackSpace操作      {          selStart += 1;          if (selStart > base.Text.Length)          {              return;          }      }      if (selStart == 0 || selStart >base.Text.Length)  // 不需要?jiǎng)h除      {          return;      }      if (selStart == 1 && base.Text.Length == 1)      {          base.Text = "";          base.SelectionStart = 0;      }      else  // selStart > 0      {          base.Text = base.Text.Substring(0, selStart - 1) +              base.Text.Substring(selStart, base.Text.Length - selStart);          base.SelectionStart = selStart - 1;      }  }

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。

網(wǎng)頁題目:C#中怎么利用TextBox輸入數(shù)字
網(wǎng)站路徑:http://muchs.cn/article2/ihgeoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈微信小程序、企業(yè)網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)App開發(fā)、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)