2017-08-31 6 views
0

まず、もっと良い解決策があることを知っています。私はこれらの解決策に耳を傾けたいと考えています。私はこのような問題を探してインターネットの周りを捜しましたが、これまでに働くものを見つけることができません。私はフォーム上に複数のテキストボックスを持っています。ユーザーがテキストボックスをクリックすると、どのテキストボックスがフォーカスされているかを知るメソッドを実行し、そのテキストボックスのタグとテキストボックスの名前を文字列(TextboxXとtest)の両方で取得します。私の目標は、たとえば 'Email'でテキストボックスをマスクすることです。ユーザーがテキストボックスをクリックすると、テキストボックスの色が黒に変わり、テキストボックスのテキストはnullになります。 これは私が持っているコードです。フォームに焦点を当てたテキストボックスの名前を取得するc#

public void masked() 
    { 
     if (textboxX.Text == test) 
      { 
       textboxX.ForeColor = Color.Black; 
       textboxX.Text = ""; 
      } 
      else 
      { 
       textboxX.Select(0, textboxX.Text.Length); 
      }   
    } 

テキストボックスをクリックすると、現在の動作が変わります。

private void txtSignup_email_Click(object sender, EventArgs e) 
    { 
     textboxX = txtSignup_email; 
     test = "Email"; 
     masked(); 
    } 

私は7つのテキストボックスを持っているので、実際には必要ない約14行のコードを節約できます。前もって感謝します。

+2

あなたはすべてのあなたのテキストを指すことができますボックスを同じイベントハンドラに割り当てます。つまり、すべて同じ検証コードを使用します。 – ainwood

+0

クリックイベントで何か他に何かしますか?マスキングの横に?はいの場合、テキストボックスからテキストボックスまでの違いはどうですか? –

答えて

2

OKこれより良いことがいくつかあります。

まず、TextBoxの代わりにパスワードを使用することができます。自動的にマスクされ、要件が正しく理解されていれば表示されません。

第2の事柄は、コメント内で、あなたのテキストボックスのすべてのクリックイベントまたは集中イベントを1つのメソッドにポイントできることです。イベントハンドラメソッドには、sendereという2つのパラメータがあります。前者はタイプobjectで、あなたのケースでこのメソッドを呼び出した人がTextBoxとしてキャストでき、それがtextboxを呼び出すことを示しています。新しいC#7を使用する場合は(ちょうど良く読み、内部で何が違うのされていない)を行うことができます。また

var textBox = sender as TextBox; 
if (textBox != null) 
{ 
    //Do what you want with textBox here 
} 

:キャスト操作は、このようなものです

if (sender is TextBox textBox) 
{ 
    //Do what you want with textBox here 
} 
+0

それはC#6で動作します。そしてそれは2017人です:) – Emad

+0

[VS 2015とフレームワーク4.6はC#6に対応します](https://stackoverflow.com/a/247623/5174469)を使用してコンパイルエラーが発生しました: "textBoxは現在のコンテキストでは利用できません" –

+0

しかし、[C#7の新機能一覧](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp)を見れば、 -7#パターンマッチング)私はそこに構文を見つけることができます –

関連する問題