2009-08-11 6 views
1

私はWindowsフォームベースのアプリケーションで作業しています。テキストボックスの認証

テキストボックスの値を検証します。ユーザーは、テキストボックスに数値を入力します 今、私はkeypresseventを検証することができますが、コピーした値を数値にしてペースト(マウスの右クリックペーストまたはCtrl + v)のテキストボックスにする必要があります。

答えて

1

回答は、フィードバックのレベルによって異なります。ユーザーからのフィードバックを得たい場合は、ValidatingイベントとErrorProviderを使用することをお勧めします。

ここでは例です:http://www.java2s.com/Tutorial/CSharp/0460__GUI-Windows-Forms/ErrorProvidernumbermustbeinarange.htm

そうでない場合は、ちょうどKeyDownイベントまたはTextChangedイベントに結合し、そしてあなたはそこになりたいしなかったすべての入力を取り除きます。 http://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.aspx

0

ユーザがテキストボックスにフォーカスを置いたとき(値がどこかからコピーされていると仮定して)、クリップボードにコピーされた最後の値をチェックすることができます。有効化基準に応じてコントロールからフォーカスを無効/削除してください。 C#でクリップボードを使用しての

例:http://www.codeproject.com/KB/shell/clipboard01.aspx

0

あなたはこのようなものを使用することができます。

private void txtOrgao_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control) 
     { 
      //Valida copy and paste com caracteres especiais 
      e.SuppressKeyPress = !Util.validaCaracteresEspeciaisClipBoard(txtOrgao); 
     } 
    } 

    private void txtOrgao_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (!Char.IsLetterOrDigit(Convert.ToChar(e.KeyChar)) && 
      !Char.IsControl(Convert.ToChar(e.KeyChar)) && 
      !Char.IsWhiteSpace(Convert.ToChar(e.KeyChar))) 
     { 
      e.Handled = true; 
     } 
    } 

ヘルパークラスのutil:

public class Util 
{ 
    /// <summary> 
    /// Valida caracteres especiais em textBox para suprimir o evento KeyPress 
    /// Caracteres Inválidos: Simbolos 
    /// </summary> 
    /// <param name="caixaTexto">objeto TextBox</param> 
    /// <returns></returns> 
    static public Boolean validaCaracteresEspeciaisClipBoard(TextBox caixaTexto) 
    { 
     //Valida copy and paste com caracteres especiais 
     String clip = String.Empty; 

     if (Clipboard.ContainsText()) 
     { 
      clip = Clipboard.GetText().Substring(0, caixaTexto.MaxLength); 

      for (int tam = 0; tam < caixaTexto.MaxLength; tam++) 
      { 
       if (!Char.IsLetterOrDigit(clip[tam]) && 
        !Char.IsControl(clip[tam]) && 
        !Char.IsWhiteSpace(clip[tam])) 
       { 
        return false; 
       } 
      } 
     } 

     return true; 
    } 

} 
関連する問題