Как заполнить пустой текстовый текст по умолчанию?

Как заполнить текстовое поле текстом, если он пуст? Я использую VB.NET.

Ответ 1

Похоже, вы описываете cue banner, который представляет собой текст подсказки, который отображается в пустом текстовом поле. Начиная с Windows XP эта функциональность поддерживается операционной системой. Эффект, достигнутый таким образом, намного более элегантен, чем сам текст по умолчанию в событии TextChanged. Это выглядит так:

      sample of textbox with cue banner text

Настройка этого уровня выполняется на уровне API Windows, отправив элементу управления текстовым полем сообщение EM_SETCUEBANNER. Чтобы использовать это из проекта .NET, вам придется использовать P/Invoke.

К счастью, большая часть работы уже сделана для вас. Этот примерный проект - это быстрый и безболезненный способ добавить поддержку бильярдного баннера в существующий проект. Вот еще один пример с более полным объяснением процесса.

Если вы не хотите, чтобы ваше приложение зависело от внешней DLL, вы можете добавить необходимый код непосредственно в свой проект. Самый простой способ - подклассифицировать существующий элемент управления TextBox и добавить код для поддержки бинговых баннеров. См. этот ответ для кода, который вам понадобится. Если у вас возникли проблемы с преобразованием его в VB.NET, попробуйте этот инструмент.

Ответ 2

Возможно, вам захочется обработать событие TextChanged и установить текст по умолчанию, если текстовое поле пуст при запуске события.

У меня нет примера VB.NET, но следующий С# должен быть слишком сложным для понимания:

public Form1()
{
    this.InitializeComponent();

    textBox1.Tag = "Default text";
    textBox1.Text = (string)textBox1.Tag;
    textBox1.TextChanged += new EventHandler(OnTextChanged);
}

void OnTextChanged(object sender, EventArgs e)
{
    var textbox = (TextBox)sender;

    if (string.IsNullOrEmpty(textbox.Text))
    {
        textbox.Text = (string)textbox.Tag;
    }
}

И обработчик события может быть повторно использован для нескольких текстовых полей.

РЕДАКТИРОВАТЬ: Здесь примерно то же самое в VB.NET

Sub New()
    ' This call is required by the designer.
    InitializeComponent()

    TextBox1.Tag = "Default text"  ' This can be set with the designer
    TextBox1.Text = CStr(TextBox1.Tag)
End Sub

Private Sub OnTextBoxTextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    Dim textbox As TextBox = DirectCast(sender, TextBox)

    If String.IsNullOrEmpty(textbox.Text) Then
        textbox.Text = CStr(textbox.Tag)
        textbox.SelectAll()
    End If
End Sub

Конечно, вы также можете добиться аналогичного поведения с использованием встроенных функций Windows, но несколько строк управляемого кода предоставят вам практически все, что вам нужно, даже если вы не хотите использовать Win32.

Ответ 3

обработка текста по умолчанию в текстовом поле

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    TextBox1.Text = "Default Text" ' initialize the text box 
End Sub

удалите текст, когда курсор находится в текстовом поле

Private Sub TextBox1_GotFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1_GotFocus
    TextBox1.Text = "" ' clear the text box for typing
End Sub

Если после изменения текста текстовое поле остается пустым, снова появляется текст по умолчанию

Private Sub TextBox1_LostFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1_LostFocus
    TextBox1.Text = "" ' clear the text box for typing
End Sub

Ответ 4

Вы ищете что-то вроде этого?

If Textbox.Text = string.Empty Then
TextBox.Text = "Default Text"
End If

Ответ 5

Я бы создал класс, который наследует TextBox и делает с ним две вещи:

  • Добавить свойство строки DefaultText
  • Переопределите установщик текста, чтобы всегда устанавливать этот DefaultText, если новое текстовое значение - String.Empty

Ответ 6

Я предполагаю, что вы хотели добавить текст с страницы aspx.

<asp:TextBox ID="TextBox1" runat="server" value="Default Value"></asp:TextBox

Даже когда .NET не предлагает эту функцию в intellitext, я предполагаю, что она позволит вам добавить любой атрибут, даже обычай, который вы можете манипулировать данными в нем. Но это делает работу. и атрибут value отправляется в браузер, поэтому инициируется в текстовом поле.

Для TextArea (TextMode = "MultiLine" ) вы можете поместить между тегами.

<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine">Text Here will be inside the TextArea</asp:TextBox>

Это похоже на тэг html textarea.