2017-08-31 1 views
0

Zunächst weiß ich, dass es wahrscheinlich bessere Lösungen gibt und ich bin sehr bereit, auf diese Lösungen zu hören. Ich habe im Internet nach einem Problem wie diesem gesucht, kann aber keins finden, das bisher funktioniert. Ich habe mehrere Textfelder in einem Formular, wenn der Benutzer auf das Textfeld klickt Ich führe eine Methode aus, die herausfindet, welches Textfeld fokussiert ist, erhält das Tag dieses Textfelds und den Namen des Textfelds als Zeichenfolgen (TextboxX und Test). Mein Ziel ist es, die Textfelder mit zum Beispiel "E-Mail" zu maskieren und wenn der Benutzer auf die Textbox klickt, ändert sich die Textbox-Vordergrundfarbe zu Schwarz und der Textfeld-Text ist null, mit so wenig Code wie möglich. Hier ist der Code, den ich dafür habe.Erhalten Sie den Namen eines fokussierten Textfelds in einem Formular C#

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

Wenn die Textbox geklickt das ist, was es zur Zeit der Fall ist.

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

Der Grund dafür ist, dass ich 7 Textfelder haben, wird es mir etwa 14 Zeilen Code speichern, die eigentlich nicht notwendig ist. Danke im Voraus.

+2

Sie können alle Text zeigen Boxen zum selben Eventhandler, was bedeutet, dass alle denselben Validierungscode verwenden. – ainwood

+0

Machst du sonst noch etwas in den Klickereignissen? neben der Maskierung? Wenn ja, wie unterscheidet es sich von Textbox zu Textbox? –

Antwort

2

OK, es gibt ein paar Dinge, die besser gemacht werden können.

Als Erstes können Sie anstelle von TextBox das Kennwort verwenden, das automatisch maskiert wird und nicht angezeigt wird, wenn ich Ihre Anforderung richtig verstehe.

Zweite Sache ist, was Ainwood in dem Kommentar sagte Sie können alle angeklickte oder fokussierte Ereignisse Ihrer Textfelder auf eine einzige Methode zeigen. Event-Handler-Methoden haben zwei Parameter sender und e. Der ehemalige ist vom Typ object und zeigt, wer diese Methode in Ihrem Fall aufgerufen hat, können Sie als TextBox und das wird Textbox aufrufen. Der gegossene Betrieb ist wie folgt:

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

Auch wenn Sie die neue C# 7 Sie tun können (was nicht anders intern ist einfach besser zu lesen):

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

Es funktioniert in C# 6. Und es ist 2017 Mann :) – Emad

+0

mit [VS 2015 und Framework 4.6, die C# 6 entsprechen] (https://Stackoverflow.com/a/247623/5174469) Ich bekomme einen Compiler-Fehler: "TextBox nicht im aktuellen Kontext verfügbar" –

+0

aber wenn ich [die Liste der neuen Features in C# 7] (https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp -7 # pattern-matching) Ich kann die Syntax dort finden –

Verwandte Themen