2017-06-26 4 views
0

Ich verwende die folgenden Funktionen, um Platzhalter-Effekt in einem Textfeld zu erstellen, und es funktioniert einwandfrei.Platzhalter in mehreren Textfeldern

Jetzt möchte ich das auf mehrere Textfelder verwenden. Da ich nur eine Box hatte, reichte die placeholder Variable. Bei mehreren Feldern benötige ich mehrere Platzhalterzeichenfolgen. Gibt es eine Möglichkeit, einem Textfeld benutzerdefinierte Eigenschaften hinzuzufügen, sodass ich über die Platzhalterfunktionen darauf zugreifen kann?

public MainForm() 
{ 
    InitializeComponent(); 
    Placeholder_Show(DomainBox, null); 
} 

public static string placeholder = "example.com"; 

private void Placeholder_Hide(object sender, EventArgs e) 
{ 
    var box = sender as TextBox; 
    if (box.Text == placeholder) 
    { 
     box.Text = ""; 
     box.ForeColor = Color.Black; 
     box.Font = new Font("Segoe UI", 10.2F, FontStyle.Regular); 
    } 
} 

private void Placeholder_Show(object sender, EventArgs e) 
{ 
    var box = sender as TextBox; 
    if (string.IsNullOrEmpty(box.Text)) 
    { 
     box.Text = placeholder; 
     box.ForeColor = Color.Gray; 
     box.Font = new Font("Segoe UI", 10.2F, FontStyle.Italic); 
    } 
} 

Wunsch Code (Beispiel):

textBox1.placeholder = "some"; 
textBox2.placeholder = "string"; 

private void Placeholder_Hide(object sender, EventArgs e) 
{ 
    var box = sender as TextBox; 
    if (box.Text == box.placeholder) // placeholders are associated with boxes 
    { 
     box.Text = ""; 
     box.ForeColor = Color.Black; 
     box.Font = new Font("Segoe UI", 10.2F, FontStyle.Regular); 
    } 
} 

private void Placeholder_Show(object sender, EventArgs e) 
{ 
    var box = sender as TextBox; 
    if (string.IsNullOrEmpty(box.Text)) 
    { 
     box.Text = box.placeholder; 
     box.ForeColor = Color.Gray; 
     box.Font = new Font("Segoe UI", 10.2F, FontStyle.Italic); 
    } 
} 

ich mit C# nicht so vertraut bin. Vielleicht gibt es einen besseren Weg, damit umzugehen.

+0

Sie könnten die 'TextBox' Klasse erweitern und diese in Ihrer neuen Klasse implementieren. – dcg

+0

Mögliches Duplikat von [Wie kann ich eine neue Funktion oder Eigenschaft in die Texteigenschaft der Textboxklasse einfügen] (https://stackoverflow.com/questions/2697648/how-can-i-add-a-new-function-or-property -on-Textfeld-Klassen-Text-Eigenschaft) – mjw

Antwort

0

Nach einiger Recherche habe ich festgestellt, dass Sie benutzerdefinierte Steuerelemente erstellen können. Ich entschied mich, ein benutzerdefiniertes Textfeld mit Platzhaltereffekt zu erstellen, damit ich mich beim nächsten Mal nicht mehr darum kümmern musste.

Es wurde eine neue Klassendatei: CustomControls.cs

using System; 
using System.Drawing; 
using System.Windows.Forms; 

namespace CustomControls 
{ 
    public class CustomTextBox : TextBox 
    { 
     private string _placeholder; 

     public string Placeholder 
     { 
      get { return this._placeholder; } 
      set { 
       this._placeholder = value; 
       this.Placeholder_Show(null, null); 
      } 
     } 

     public CustomTextBox() 
     { 
      Initialize(); 
     } 

     private void Initialize() 
     { 
      this.Enter += new EventHandler(this.Placeholder_Hide); 
      this.Leave += new EventHandler(this.Placeholder_Show); 
     } 

     private void Placeholder_Hide(object sender, EventArgs e) 
     { 
      if (this.Text == this._placeholder) 
      { 
       this.Text = ""; 
       this.ForeColor = Color.Black; 
       this.Font = new Font("Segoe UI", 10.2F, FontStyle.Regular); 
      } 
     } 

     private void Placeholder_Show(object sender, EventArgs e) 
     { 
      if (string.IsNullOrEmpty(this.Text)) 
      { 
       this.Text = this._placeholder; 
       this.ForeColor = Color.Gray; 
       this.Font = new Font("Segoe UI", 10.2F, FontStyle.Italic); 
      } 
     } 
    } 
} 

die Designer-Datei Editiert: MainForm.Designer.cs (wollte nicht ein neues Textfeld erstellen)

Changed
this.DomainBox = new System.Windows.Forms.TextBox(); 

in

this.DomainBox = new CustomControls.CustomTextBox(); 

Jetzt erscheint diese neue CustomTextBox in der Toolbox unter dem Namen "[namespace] Components" an der Spitze. Sie können einfach & ziehen, so wie Sie es in einem normalen Textfeld tun würden. Außerdem können Sie die Eigenschaft Placeholder im Eigenschaftenfenster unter dem Namen Misc.

0

Wie in den Kommentaren erwähnt, können Sie die Textbox unterklassifizieren und diese Funktionalität hinzufügen. Dies ist wahrscheinlich die beste Option im Allgemeinen, aber was ist, wenn Sie mehrere nicht verwandte Optimierungen wie diese verwenden möchten? Eine andere Möglichkeit besteht darin, sie in ähnlicher Weise wie eine ErrorProvider zu implementieren. Sie werden feststellen, dass diese Komponente anderen Steuerelementen im Formular eine Eigenschaft hinzufügt. Dies geschieht über eine extender provider.

Verwandte Themen