Textbox eltűnő tájékoztató szövege

Textbox eltűnő tájékoztató szövege
2020-02-17T14:44:29+01:00
2020-02-20T09:54:20+01:00
2022-10-15T21:25:55+02:00
István Kovács
Üdv,

Van egy egyszerű programomban egy csomó textbox, amik a tartalmát egy fájlba mentem, majd indításkor onnan olvasom ki és iratom vissza. Ezzel kezdő programozó lévén meg is vagyok.

Azt szeretném elérni, hogy az üres boxokba halványan szerepeljen, hogy mit várok oda, ami ha elkezdek gépelni eltűnik és a normál szöveget jeleníti meg. Olyasmi, mint bejelentkezéskor az e-mail és a jelszó szöveg a beviteli mezőkben.

Kereséseim eléggé mellémentek, ezért teszem fel a kérdést, hogy van-e ennek valami egyszerű módja?
Mutasd a teljes hozzászólást!

  • Mutasd a teljes hozzászólást!
  • Egy kis kiegészítés, mielőtt neki látsz.
    AlterEgo_2 válasza is remek, viszont a te esetedben annyival módosítani kell majd annyival, hogy mivel X darab Textboxod van, ezért nem kell X darab függvény (removeText, addText), csak 1 darab.

    Írtad, hogy kezdő vagy, ajánlom, hogy nézz utána az eseménykezelésnek, illetve a paramétereknek.
    Példa:

    public void RemoveText(object sender, EventArgs e) { TextBox textBox = sender as TextBox; if (textBox.Text == "Enter text here...") { textBox.Text = ""; } } public void AddText(object sender, EventArgs e) { TextBox textBox = sender as TextBox; if (string.IsNullOrWhiteSpace(textBox.Text)) textBox.Text = "Enter text here..."; }
    Amennyiben WPF-ben dolgozol, ajánlom figyelmedbe a következő XAML megoldást.

    <Style x:Key="placeHolder" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TextBox}"> <Grid> <TextBox Text="{Binding Path=Text, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" x:Name="textSource" Background="Transparent" Panel.ZIndex="2" /> <TextBox Text="{TemplateBinding Tag}" Background="{TemplateBinding Background}" Panel.ZIndex="1"> <TextBox.Style> <Style TargetType="{x:Type TextBox}"> <Setter Property="Foreground" Value="Transparent"/> <Style.Triggers> <DataTrigger Binding="{Binding Path=Text, Source={x:Reference textSource}}" Value=""> <Setter Property="Foreground" Value="LightGray"/> </DataTrigger> </Style.Triggers> </Style> </TextBox.Style> </TextBox> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
    Ezt átalakítod/bemásolod (akár Resources-be, akár App.Xaml-be), majd mikor egy TextBoxot létrehozol, egyszerűen átadod neki, mint egy Style-t:

    <TextBox Style="{StaticResource placeHolder}" Tag="Name of customer" Width="150" Height="24"/>
    Amennyiben UWP-ben dolgozol, abban alapból van Placeholder-ed.
    Mutasd a teljes hozzászólást!
  • Nem szép, de működik. Hozzáadod a projectedhez. Javítod a namespace-t, csinálsz egy fordítást és a Toolbox-on megjelenik egy PHTextBox komponens. A komponens tulajdonságai között (properties ablak) találsz egy PlaceHolder nevűt. Ebben tudod beállítani azt a szöveget, amit üres állapotban akarsz láttatni.

    using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; namespace PHTextBoxApp { class PHTextBox: TextBox { private Color oldColor; [Category("Appearance")] public string PlaceHolder { get; set; } protected override void OnCreateControl() { base.OnCreateControl(); this.oldColor = this.ForeColor; this.Text = this.PlaceHolder; this.ForeColor = Color.DarkGray; } protected override void OnLostFocus(EventArgs e) { base.OnLostFocus(e); if (string.IsNullOrEmpty(Text)) { this.Text = PlaceHolder; this.ForeColor = Color.DarkGray; } } protected override void OnGotFocus(EventArgs e) { base.OnGotFocus(e); if (this.Text.Trim() == this.PlaceHolder) { this.Text = ""; } this.ForeColor = this.oldColor; } } }
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd