Как подписать textbox c
Перейти к содержимому

Как подписать textbox c

  • автор:

Как подписать textbox c

Для ввода и редактирования текста предназначены текстовые поля — элемент TextBox. Так же как и у элемента Label текст элемента TextBox можно установить или получить с помощью свойства Text.

По умолчанию при переносе элемента с панели инструментов создается однострочное текстовое поле. Для отображения больших объемов информации в текстовом поле нужно использовать его свойства Multiline и ScrollBars . При установке для свойства Multiline значения true, все избыточные символы, которые выходят за границы поля, будут переноситься на новую строку.

Кроме того, можно сделать прокрутку текстового поля, установив для его свойства ScrollBars одно из значений:

Элемент TextBox в Windows Forms

  • None : без прокруток (по умолчанию)
  • Horizontal : создает горизонтальную прокрутку при длине строки, превышающей ширину текстового поля
  • Vertical : создает вертикальную прокрутку, если строки не помещаются в текстовом поле
  • Both : создает вертикальную и горизонтальную прокрутку

Автозаполнение текстового поля

Элемент TextBox обладает достаточными возможностями для создания автозаполняемого поля. Для этого нам надо привязать свойство AutoCompleteCustomSource элемента TextBox к некоторой коллекции, из которой берутся данные для заполнения поля.

Итак, добавим на форму текстовое поле и пропишем в код события загрузки следующие строки:

public partial class Form1 : Form < public Form1() < InitializeComponent(); AutoCompleteStringCollection source = new AutoCompleteStringCollection() < "Кузнецов", "Иванов", "Петров", "Кустов" >; textBox1.AutoCompleteCustomSource = source; textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; > >

Автозаполнение текстового поля

Режим автодополнения, представленный свойством AutoCompleteMode , имеет несколько возможных значений:

  • None : отсутствие автодополнения
  • Suggest : предлагает варианты для ввода, но не дополняет
  • Append : дополняет введенное значение до строки из списка, но не предлагает варианты для выбора
  • SuggestAppend : одновременно и предлагает варианты для автодополнения, и дополняет введенное пользователем значение

Перенос по словам

Чтобы текст в элементе TextBox переносился по словам, надо установить свойство WordWrap равным true . То есть если одно слово не умещается на строке, то но переносится на следующую. Данное свойство будет работать только для многострочных текстовых полей.

Ввод пароля

Также данный элемент имеет свойства, которые позволяют сделать из него поле для ввода пароля. Так, для этого надо использовать PasswordChar и UseSystemPasswordChar .

Свойство PasswordChar по умолчанию не имеет значение, если мы установим в качестве него какой-нибудь символ, то этот символ будут отображаться при вводе любых символов в текстовое поле.

Свойство UseSystemPasswordChar имеет похожее действие. Если мы установим его значение в true , то вместо введенных символов в текстовом поле будет отображаться знак пароля, принятый в системе, например, точка.

Событие TextChanged

Из всех событий элемента TextBox следует отметить событие TextChanged , которое срабатывает при изменении текста в элементе. Например, поместим на форму кроме текстового поля метку и сделаем так, чтобы при изменении текста в текстовом поле также менялся текст на метке:

public partial class Form1 : Form < public Form1() < InitializeComponent(); textBox1.TextChanged += textBox1_TextChanged; >private void textBox1_TextChanged(object sender, EventArgs e) < label1.Text = textBox1.Text; >>

Textbox C: создание, использование и настройка

Textbox C — это элемент управления пользовательского интерфейса в языке программирования C#, который предназначен для ввода и отображения текстовой информации.

Создание и настройка элемента TextBox происходит следующим образом:

C# // Создание элемента TextBox TextBox textBox1 = new TextBox(); // Настройка размеров и позиции элемента на форме textBox1.Size = new Size(200, 20); textBox1.Location = new Point(10, 10); // Добавление элемента на форму this.Controls.Add(textBox1); 

После добавления элемента на форму можно задать его свойства:

C# // Текст, отображаемый в элементе textBox1.Text = "Введите текст"; // Выравнивание текста в элементе textBox1.TextAlign = HorizontalAlignment.Center; // Максимальная длина текста, которая может быть введена пользователем textBox1.MaxLength = 100; // Функция, которая будет вызвана при изменении текста в элементе textBox1.TextChanged += TextBox1_TextChanged; 

Также, с помощью свойства Multiline можно создать многострочный элемент TextBox:

C# // Создание многострочного элемента TextBox TextBox textBox2 = new TextBox(); textBox2.Multiline = true; // Настройка размеров и позиции элемента на форме textBox2.Size = new Size(200, 100); textBox2.Location = new Point(10, 40); // Добавление элемента на форму this.Controls.Add(textBox2); 

Для работы с содержимым элемента TextBox можно использовать различные методы и свойства:

C# // Получение текста из элемента string text = textBox1.Text; // Установка курсора в конец текста элемента textBox1.SelectionStart = textBox1.Text.Length; // Добавление текста в элемент textBox1.AppendText("дополнительный текст"); // Очистка содержимого элемента textBox1.Clear(); 

Также элемент TextBox имеет ряд событий, которые можно использовать для обработки действий пользователя:

C# // Событие, которое вызывается при нажатии клавиши в элементе textBox1.KeyDown += TextBox1_KeyDown; // Событие, которое вызывается при потере элементом фокуса textBox1.LostFocus += TextBox1_LostFocus; private void TextBox1_KeyDown(object sender, KeyEventArgs e) < // Обработка нажатия клавиши >private void TextBox1_LostFocus(object sender, EventArgs e) < // Обработка потери элементом фокуса >

Таким образом, TextBox C — полезный элемент управления пользовательским интерфейсом, который широко используется в различных приложениях на языке программирования C#.

Практическое руководство. Выделение текста в элементе управления TextBox в Windows Forms

Текст можно выделить программным способом в элементе управления TextBox Windows Forms. Например, если вы создаете функцию, которая ищет текст для определенной строки, можно выделить текст, чтобы визуально оповещать читателя о позиции найденной строки.

Выделение текста программными средствами

  1. Задайте для свойства SelectionStart начало текста, который требуется выделить. Свойство SelectionStart — это число, указывающее точку вставки в строке текста, где 0 — крайняя левая позиция. Если свойству SelectionStart присвоено значение не менее числа символов в текстовом поле, точка вставки помещается после последнего символа.
  2. Задайте для свойства SelectionLength длину текста, который требуется выделить. Свойство SelectionLength является числовым значением, которое задает ширину точки вставки. Если задать число SelectionLength больше 0, будет выбрано это количество символов начиная с текущей точки вставки.
  3. (Необязательно) Получите доступ к выделенному тексту через свойство SelectedText. Приведенный ниже код выбирает содержимое текстового поля при возникновении события Enter элемента управления. В этом примере проверяется, имеет ли текстовое поле значение свойства Text, которое не является null или пустой строкой. Когда текстовое поле получает фокус, выбирается текущий текст в текстовом поле. Обработчик событий TextBox1_Enter должен быть привязан к элементу управления. Дополнительные сведения см. в разделе Создание обработчиков событий во время выполнения в Windows Forms. Чтобы протестировать этот пример, нажимайте клавишу TAB, пока фокус не перейдет на текстовое поле. Если щелкнуть текстовое поле, с текста будет снято выделение.
Private Sub TextBox1_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Enter If (Not String.IsNullOrEmpty(TextBox1.Text)) Then TextBox1.SelectionStart = 0 TextBox1.SelectionLength = TextBox1.Text.Length End If End Sub 
private void textBox1_Enter(object sender, System.EventArgs e) < if (!String.IsNullOrEmpty(textBox1.Text)) < textBox1.SelectionStart = 0; textBox1.SelectionLength = textBox1.Text.Length; >> 
private: void textBox1_Enter(System::Object ^ sender, System::EventArgs ^ e) < if (!System::String::IsNullOrEmpty(textBox1->Text)) < textBox1->SelectionStart = 0; textBox1->SelectionLength = textBox1->Text->Length; > > 

См. также

  • TextBox
  • Общие сведения об элементе управления TextBox
  • Практическое руководство. Управление положением курсора в элементе управления TextBox в Windows Forms
  • Практическое руководство. Создание текстового поля для ввода пароля с помощью элемента управления TextBox в Windows Forms
  • Практическое руководство. Создание текстового поля только для чтения
  • Практическое руководство. Добавление кавычек в строку
  • Практическое руководство. Многострочные элементы управления TextBox в Windows Forms
  • Элемент управления TextBox

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Подсказка в TextBox Visual Studio C #

В настоящее время я делаю приложение Windows Forms на Visual Studio на С#, и я пытаюсь найти способ получить реальный намек. Я нашел много ответов в Интернете о том, как у вас есть определенный текст. Некоторые примеры даже показывают, как вычеркнуть текст, чтобы выглядеть как заполнитель, но это не то, что я ищу. Мне нужен серый текст, который вам не нужен, чтобы набрать что-то там. Поэтому я хочу, чтобы он работал как заполнитель HTML, как панель поиска «Поиск Q & A» в переполнении стека. Есть ли простой способ сделать это, например, настроить свойство текстового поля в дизайнере Visual Studio?

Jon Spalding 03 апр. 2016, в 03:27
Поделиться
лучший способ — написать расширение класса System.Windows.Forms.TextBox
Amen JLILI 03 апр. 2016, в 01:01

Смотрите хороший здесь . Он также поддерживает многострочность, полностью основан на рисовании, не использует свойство Text и обладает высокой расширяемостью.

Reza Aghaei 10 апр. 2016, в 18:55

Основная проблема с принятым ответом здесь: свойство Text будет иметь значение, даже если пользователь его не трогает. Или, например, при использовании привязки данных это вызывает проблемы, когда вы назначаете подсказку для текстовых полей, которые связаны с числовыми полями. Или это подтолкнуло подсказку к источнику данных. Использование Text — это действительно плохая идея о том, как показать подсказку, вы не должны использовать свойство Text для этой цели.

Reza Aghaei 10 апр. 2016, в 19:15
Показать ещё 1 комментарий
Поделиться:
windows-forms-designer

4 ответа

Лучший ответ

Это может быть самый уродливый код, но я думаю, что вы можете его улучшить.

Этот следующий класс является просто расширением стандартного TextBox

 class PHTextBox : System.Windows.Forms.TextBox < System.Drawing.Color DefaultColor; public string PlaceHolderText public PHTextBox(string placeholdertext) < // get default color of text DefaultColor = this.ForeColor; // Add event handler for when the control gets focus this.GotFocus += (object sender, EventArgs e) =>< this.Text = String.Empty; this.ForeColor = DefaultColor; >; // add event handling when focus is lost this.LostFocus += (Object sender, EventArgs e) => < if (String.IsNullOrEmpty(this.Text) || this.Text == PlaceHolderText) < this.ForeColor = System.Drawing.Color.Gray; this.Text = PlaceHolderText; >else < this.ForeColor = DefaultColor; >>; if (!string.IsNullOrEmpty(placeholdertext)) < // change style this.ForeColor = System.Drawing.Color.Gray; // Add text PlaceHolderText = placeholdertext; this.Text = placeholdertext; >> > 

Скопируйте/вставьте в новый файл cs под названием PHTextBox.cs.

Перейдите к графическому дизайнеру и добавьте TextBox. Перейдите к дизайнеру и измените строку подстроки для текстового поля следующим образом:

Теперь скомпилируйте, но прежде, чем вы это сделаете, просто убедитесь, что текстовое поле не является первым элементом для получения фокуса. Добавьте кнопку, если на то пошло.

JLILI Amen 03 апр. 2016, в 00:28
Поделиться

Смотрите хороший здесь . Он также поддерживает многострочность, полностью основан на рисовании, не использует свойство Text и обладает высокой расширяемостью.

Reza Aghaei 10 апр. 2016, в 18:54

Основная проблема с принятым ответом здесь: свойство Text будет иметь значение, даже если пользователь его не трогает. Или, например, при использовании привязки данных это вызывает проблемы, когда вы назначаете подсказку для текстовых полей, которые связаны с числовыми полями. Или это подтолкнуло подсказку к источнику данных. Использование Text — это действительно плохая идея о том, как показать подсказку, вы не должны использовать свойство Text для этой цели.

Reza Aghaei 10 апр. 2016, в 19:16

я согласен с reza, но свойство text можно переопределить, поэтому при запросе текста оно становится нулевым, если оно равно тексту-заполнителю. Вы можете отредактировать его к своему удовольствию.

Amen JLILI 10 апр. 2016, в 19:55
Если вы вернете null для свойства text, то текстовое поле не будет отображаться.
Reza Aghaei 10 апр. 2016, в 20:00

Я думаю, что ссылка является хорошей и расширяемой реализацией, которая заслуживает большего внимания. Попробуйте. Надеюсь, вы найдете это полезным 🙂

Reza Aghaei 10 апр. 2016, в 20:03

@RezaAghaei Ответ рисует что-то поверх текстового поля? ничем не отличается от заполнителя. Если вы хотите опубликовать, чтобы обновить свой ответ, я добавлю его, чтобы вы чувствовали себя менее раздражительным! 🙂

Amen JLILI 10 апр. 2016, в 20:13

Рисование — это основа всего, что вы видите на окнах. Даже текст, который вы видите в текстовом поле, является рисунком. Также подсказка — это рисунок, если вы увидите его в действии, вы увидите, что это лучший вариант.

Reza Aghaei 10 апр. 2016, в 20:19
уверен, что я добавлю ваш ответ для будущих ссылок спасибо за информацию
Amen JLILI 10 апр. 2016, в 20:21

& Спасибо за ваше предложение. Я удалил свой пост здесь и разместил в основной ветке водяные знаки / подсказки / подсказки для текстового поля, чтобы они были более полезными для будущих читателей. Но дело не в обиде, а в том, чтобы делиться знаниями и публиковать хороший ответ 🙂

Reza Aghaei 10 апр. 2016, в 20:24
продолжай в том же духе!
Amen JLILI 10 апр. 2016, в 20:27
Показать ещё 8 комментариев

Как насчет этого

 private bool hasTextBeenTyped; private void Form1_Load(object sender, EventArgs e) < this.ActiveControl = label1; textBox1.ForeColor = Color.LightGray; >private void textBox1_TextChanged(object sender, EventArgs e) < hasTextBeenTyped = !String.IsNullOrEmpty(textBox1.Text); if (hasTextBeenTyped) < textBox1.ForeColor = Color.Black; >> private void textBox1_Click(object sender, EventArgs e) < if (!hasTextBeenTyped) < textBox1.Text = ""; >> private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

this.ActiveControl = label1; это просто отвлечь внимание от текстового поля. Если что-то еще делает, не беспокойтесь об этой строке.

JimDel 03 апр. 2016, в 00:13
Поделиться

Вы пытались совместить ярлык с текстовым полем?

В событии keybox keybox вы можете проверить длину textbox.text и установить метку.

В случае нажатия клавиши.

MyLabel.Visible = String.IsNullOrEmpty(MyTextBox.Text); 

Конечно, вы можете захотеть установить текст по умолчанию, а также серый цвет.

Проблема с этим заключается в том, что ваша форма является значительной.

То, что вы хотите достичь, не является родным для форм Windows.

John Ephraim Tugado 02 апр. 2016, в 23:44
Поделиться

Пожалуйста, обратите внимание на мой ControlHintManager класса, ControlHintInfo типа и ControlHintType перечисления. Они написаны в Vb.Net, но вы можете получить идею анализа исходного кода или скомпилировать библиотеку, чтобы использовать ее в своем проекте С# без каких-либо дополнительных усилий.

Мое решение имеет еще лучшее поведение, чем подсказка StackOverflows, о которой вы упомянули, принимая во внимание, что, когда элемент управления покидает фокус, текст подсказки должен быть восстановлен, если строка остается пустой.

Использование настолько дружелюбное:

ControlHintInfo hint1 = new ControlHintInfo("I'm a hint text.", font (or nul), Color.Gray, ControlHintType.Persistent); ControlHintManager.SetHint(TextBox1, hint1); 

Чтобы добиться этого сами по себе, один из способов вызывает функцию Win32 SendMessage с сообщением EM_ SETCUEBANNER , однако это приведет к слишком базовому намеку с плохим поведением, не рекомендуется,

поэтому надлежащим способом добиться этого является контроль над текстом редактирования-редактирования самостоятельно, обработка Control.HandleCreated , Control.Enter , Control.Leave , Control.MouseDown , Control.KeyDown и Control.Disposed (как вы можете см. в моем связанном исходном коде).

Просто используйте объект для отслеживания состояния управления (forecolor, text и, при необходимости, шрифта), а затем используйте надлежащие обработчики событий, упомянутые для установки или восстановления текста и цвета.

Это онлайн-перевод С# самого важного кода связанных URL-адресов, если это поможет вам понять его лучше:

private static void Control_HandleCreated(object sender, EventArgs e) < InstanceControlHintFields(); Control ctrl = (Control)sender; ControlHintInfo hintInfo = controlHintsB(ctrl); SetProperties(ctrl, hintInfo); >private static void Control_Enter(object sender, EventArgs e) < InstanceControlHintFields(); Control ctrl = (Control)sender; string ctrlText = ctrl.Text; ControlHintInfo ctrlDefaults = controlHintsDefaults(ctrl); ControlHintInfo hintInfo = controlHintsB(ctrl); switch (hintInfo.HintType) < case ControlHintType.Normal: if ((ctrlText.Equals(hintInfo.Text, StringComparison.OrdinalIgnoreCase))) < RestoreProperties(ctrl, ctrlDefaults); >break; > > private static void Control_Leave(object sender, EventArgs e) < InstanceControlHintFields(); Control ctrl = (Control)sender; string ctrlText = ctrl.Text; ControlHintInfo ctrlDefaults = controlHintsDefaults(ctrl); ControlHintInfo hintInfo = controlHintsB(ctrl); switch (hintInfo.HintType) < case ControlHintType.Normal: if ((ctrlText.Equals(hintInfo.Text, StringComparison.OrdinalIgnoreCase))) < RestoreProperties(ctrl, ctrlDefaults); >else if (string.IsNullOrEmpty(ctrlText)) < SetProperties(ctrl, hintInfo); >break; case ControlHintType.Persistent: if (string.IsNullOrEmpty(ctrlText)) < SetProperties(ctrl, hintInfo); >break; > > private static void Control_MouseDown(object sender, MouseEventArgs e) < InstanceControlHintFields(); Control ctrl = (Control)sender; string ctrlText = ctrl.Text; ControlHintInfo hintInfo = controlHintsB(ctrl); switch (hintInfo.HintType) < case ControlHintType.Persistent: if ((ctrlText.Equals(hintInfo.Text, StringComparison.OrdinalIgnoreCase))) < // Get the 'Select' control method (if exist). MethodInfo method = sender.GetType.GetMethod("Select", BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, < typeof(int), typeof(int) >, null); if ((method != null)) < // Select the zero length. method.Invoke(ctrl, new object[] < 0, 0 >); > > break; > > private static void Control_KeyDown(object sender, KeyEventArgs e) < Control ctrl = (Control)sender; string ctrlText = ctrl.Text; ControlHintInfo ctrlDefaults = controlHintsDefaults(ctrl); ControlHintInfo hintInfo = controlHintsB(ctrl); switch (hintInfo.HintType) < case ControlHintType.Persistent: if ((ctrlText.Equals(hintInfo.Text, StringComparison.OrdinalIgnoreCase))) < RestoreProperties(ctrl, ctrlDefaults); >else if (string.IsNullOrEmpty(ctrlText)) < RestoreProperties(ctrl, ctrlDefaults, skipProperties: < "Text" >); > break; case ControlHintType.Normal: if (string.IsNullOrEmpty(ctrlText)) < RestoreProperties(ctrl, ctrlDefaults); >break; > > private static void Control_Disposed(object sender, EventArgs e)

PS: Это отражение, основанное на поддержке большего количества элементов управления.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *