Как очистить textbox в visual studio
Я слышал, что в Windows Forms легко сделать что-то подобное с помощью цикла foreach, но я делаю это в WPF, поэтому я не могу заставить это работать.
У кого-нибудь есть совет? благодаря
4 ответа
Пусть все элементы управления находятся внутри контейнера (пусть это будет панель стека), как показано ниже:
И тогда событие Click для кнопки Clear будет выглядеть следующим образом:
Я посмотрел ответы на тот же вопрос :) Спасибо за решения. Сейчас в моей программе работает аналогичный код:
Для этого вы можете разместить элементы управления внутри контейнера (в данном случае StackPanel).
Таким образом, вы можете легко получить доступ к нужной вам группе элементов управления.
- В представлении псевдокода ниже; Я разделяю функции, чтобы упростить понимание, чтобы их можно было легко адаптировать к вашим потребностям.
Примеры управления
В этом примере используются 2 кнопки:
- Кнопка сброса: для сброса текста текстовых полей
- Кнопка переключения: для переключения состояния флажков.
Каждый из флажков и текстовых полей объявлен внутри StackPanel.
Это позволяет получить доступ к группе элементов управления, которые находятся внутри контейнера, и, следовательно, выполнить необходимое действие (я).
- StackPanel, содержащий флажки (см. Ниже, переименован в sp_CheckBoxes).
- StackPanel, содержащий текстовые поля (внизу переименован в: «sp_TextBoxes»).
Примеры событий
- Обеим кнопкам назначено одно и то же событие («Button_Click»).
- Само событие проверит, какая кнопка была нажата, и будет действовать соответственно.
XAML
Привет, ниже приведен код, используемый в моем проекте в реальном времени.
Приведенный ниже код поможет вам идентифицировать все дочерние элементы управления из родительского элемента управления и выполнять действия по нашему желанию. Здесь я использовал панель в качестве родительского элемента управления и очистил все значения элемента управления текстовым полем одним выстрелом, используя простой метод.
Надеюсь, что приведенный выше код даст вам некоторые рекомендации. Пожалуйста, дайте мне знать.
Как уменьшить объём данного кода. Подразумевается что чем дальше тем больше окон надо будет очистить.
Очистить все TextBox на форме, кроме одного
Private Sub Image1_Click() Dim cntr As Control For Each cntr In Me.Controls .
Очистить все textbox на странице
вопрос мой скорее глупый чем умный, но все таки: у меня на странице есть 20 текстбоксов. и мне.
Очистить все текстовые поля на форме
Так почему то не работает: Dim TxtBox As Control For Each TxtBox In Me.Controls .
Решение
Вариант 1: компоненты называются одинаково, различна только цифра. Недостаток: нужно знать, сколько их всего
Вариант 2: Компоненты могут называться как угодно, и их может быть сколько угодно. Недостаток: они все должны находиться на одном контейнере (форме, а не GroupBox, Panel, etc.)
Я знаю сколько их всего. Так что пожалуй вариант 1.
Буду признательна ссылке на теорию по этим двум методам.
Спасибо большое.
PS только там было Button 2)))
Я даже не знаю. Все из головы. А то что в ней щас лежит - собиралось по крупицам в течение не одного года. В MSDN Вас отсылать не буду, там не так-то просто разобраться новичку, имхо, но там есть буквально все, при условии, что Вы знаете, из каких элементарных вещей состоит Ваша программа.
Ну хотя бы своими словами. Думаю не трудно догадаться, что в следующий раз я скорее смогу написать сама, если буду знать как это делается. А не тупо по примеру.
Решение
т.е. вызываем TextBox с 1 по 6. Ну и после вызова изменяем их свойство Text на пустую строку ("").
Подробнее о Me.Controls
Способ 2:
Перебираем коллекцию элементов управления, расположенных в контейнере (в данном случае - непосредственно на форме). В процессе перебора при каждой итерации переменной С присваивается ссылка на некоторый элемент управления. В теле цикла проверяем тип элемента управления (в переменной С) и, если тип соответствует типу TextBox, то меняем свойство элемента управления Text на пустую строку.
private
Вот так собственно выглядит форма.
void Cancel_Click(object sender, EventArgs e)
Close();
Form1 f = new Form1();
f.textBox1.Text = null;
f.textBox2.Text = "";
f.textBox3.Text = string.Empty;
>
Пробовал так писать, но не получается. Форма закрывается, а textBox'ы не очищаются.
- Вопрос задан более трёх лет назад
- 2353 просмотра
Оценить 5 комментариев
@demon123 А чем Вас не устроил метод Clear?
Вы не видите разницы между классом Form1 и экземпляром этого класса (главная форма отображаемая на экране). В обработчике события Cancel_Click вы создаете еще один экземпляр(f) класса Form1. Потом в этом новом экземпляре очищаете какие-то поля. Естественно что в другом экземпляре (тот который отображается на экране) этой формы значения полей остаются неизменными.
Если делать так Form1.textBox1.Text = ""; то он ругается, говорит что надо поставить static, а если он будет статичным то появляются куча ошибок.
Я вам час назад написал ответ как это нужно сделать, но еще через час у вас появится новый вопрос. Вам нужно разобраться в основах, без них у вас будет очень много вопросов.
Если делать так Form1.textBox1.Text = "", то вы хотите обратиться к полю через название класса (Form1).
Естественно, что обратиться через название класса можно только к статическому полю, т.к. статические поля общие для всех экземпляров класса и создаются сразу при запуске программы.
Все остальные поля создаются отдельно для каждого объекта в момент создания этого объекта.
Вам нужно обращаться через конкретный экземпляр класса Form1 к textBox1
Вы создаете новую форму и в ней очищаете данные, поэтому и не работает текущий вариант.
Я так понимаю вам нужно очищать данные в уже созданной форме.
Наиболее правильным решением будет
в Form1:
Альтернативным решением будет хранить в статическом поле класса Program ссылку на Form1 и обращаться к форме 1 через Program.form1
Дык у вас объект f выбрасывается сразу после завершения метода Cancel_Click, вы не делаете с ним ничего, не открываете эту форму и т.д..
Идите читайте что-нибудь про программирование и ООП, вы что-то странное делаете сами не понимая что.
Тут вы создали _новую_ форму и ничего с ней не сделали, кроме очистки текстбоксов.
Включив режим телепата 99 уровня, я понял, что сначала у вас был код типа такого, который даже не компилировался:
Form1.textBox1.Text = ""
Методом тыка вы изменили его на этот, который работает, но не так, как вы хотели.
Вывод: надо идти читать про ООП, чтобы понимать разницу между классом и объектом/экземпляром (instance).
Не телепат вы вовсе, т.к я уже отписывал свою проблему, но все же как решить проблему?(если вы не можете мне помочь, не надо отписываться)
Доброго времени суток! В этом уроке я кратко расскажу о таком элементе графического интерфейса, как поле ввода текста (TextBox). Расскажу о самых важных, на начальном этапе, свойствах, событиях и методах данного контрола.
И так, поля ввода текста предназначены для получения от пользователя тестовых данных. Таким образом, этот элемент интерфейса нужен скорее для ввода информации, но может быть использован и для её вывода.
Контрол TextBox расположен на панели инструментов в группе «Стандартные элементы управления» (или «Common Controls» в англоязычной версии Visual Studio), как показано на рисунке ниже.
Элемент TextBox на панели элементов Visual Studio
По традиции, начну с описаний основных свойств элемента.
Основные свойства
Name — задает уникальное имя для поля ввода текста (специфическое свойство, необходимо, для работы с элементом из кода).
BorderStile — задает рамку вокруг поля ввода, может иметь одно из представленных в таблице ниже значений.
Значение | Краткое описание |
---|---|
None | Рамки вокруг поля ввода нет |
FixedSingle | Простая рамка из одинарной линии |
Fixed3D | 3D рамка вокруг поля ввода |
Enabled — разрешает или запрещает доступ к элементу, если указать значение true, то поле ввода будет доступно для пользователя (он сможет вводить текст), значение false — наоборот, запрещает доступ.
MaxLenght — задает максимально допустимое для ввода количество символов.
Multiline — разрешает или запрещает многострочный режим ввода, если значение установлено в true, то поле ввода считается многострочным, если false — однострочным.
PasswordChar — если задать свойству какой-нибудь символ, то введенные пользователем символы, визуально (и только визуально, а не по факту), будут заменяться на него (например, при вводе пароля, введенные символы отображаются как звездочки, т.е. «*»).
ReadOnly — если установлено в true, то редактировать текст в поле ввода, пользователю нельзя, если установлено в false текст доступен для редактирования.
Text — предназначено для установки текста в поле ввода или получения введенного пользователем текста.
TextAlign — устанавливает выравнивание введенного текста, возможные значения представлены в таблице ниже.
Значение | Краткое описание |
---|---|
Left | Текст выравнивается по левому краю |
Right | Текст выравнивается по центру |
Center | Текст выравнивается по правому краю |
Visible — позволят скрыть текстовое поле, если установлено в false. Для отображения элемента снова, нужно установить этому свойству значение true.
Основные методы
AppendText — добавляет текст (указанный в качестве аргумента) к уже введенному в поле тексту.
Clear — очищает поле ввода (удаляет весь текст).
Copy — копирует выделенный текст в буфер обмена.
Cut — вырезает выделенный текст из буфера обмена.
Past — вставляет текст из буфера обмена в поле ввода (в позицию, в которую установлен курсор).
Hide — скрывает поле ввода.
Show — показывает поле ввода (скрытое до этого).
А вот пример окна с различными полями ввода текста:
Пример окна с различными полями ввода текста
Основные события данного контрола в этом уроке я описывать не стал, так как необходимость в их использовании появляется на более продвинутых уровнях программирования.
А в следующем уроке, будет практика использования элементов интерфейса, который были описаны в этом и предыдущих уроках!
Я помню, как кто-то спросил что-то в этом роде некоторое время назад, но я сделал поиск и ничего не смог найти.
Я пытаюсь придумать самый чистый способ очистить все элементы управления в форме до их значений по умолчанию (например, очистить текстовые поля, снять флажки).
Как бы вы это сделали?
то, что я придумал до сих пор что-то вроде этого:
Теперь вы можете просто вызвать метод расширения ClearControls следующим образом:
EDIT: я только что добавил общий метод ClearControls, который очистит все элементы управления этого типа, которые можно назвать так:
на данный момент он будет обрабатывать только элементы управления верхнего уровня и не будет копать через groupboxes и панели.
Я знаю, что это старый вопрос, но только мои 2 цента. Это вспомогательный класс, который я использую для очистки форм.
и я вызываю метод из любой формы, подобной этой, передавая объект формы в качестве параметра.
вы можете расширить его для других типов элементов управления. Вы просто должны бросить его.
вы можете цикл контроля
Я проголосовал за решение Натана, но хотел добавить немного больше, чем может обработать комментарий.
его на самом деле очень хорошо, но я думаю, что лучшее решение будет включать подкласс каждого из типов элементов управления, которые вы можете добавить, прежде чем добавлять их в GUI. Пусть все они реализуют интерфейс "Clearable" или что-то в этом роде (я программист java, но концепция должна быть там), а затем перебирают его как коллекцию" Clearable " объектов, вызывая единственный метод .clear () на каждом
вот как GUIs действительно должен быть сделан в системе OO. Это сделает ваш код легко расширить в будущем-почти слишком легко, вы будете в шоке.
Edit: (в комментарии Натана о том, чтобы не изменять существующие элементы управления)
возможно, вы могли бы создать классы "контейнер", которые ссылаются на ваш элемент управления (по одному для каждого типа элемента управления). В цикле, подобном тому, который вы создали в своем ответе, вы можете создать экземпляр правильного контейнера, поместите реальный элемент управления внутри контейнера и сохраните контейнер в коллекции.
таким образом, вы вернулись к итерации по коллекции.
Это было бы хорошим простым решением, которое не намного сложнее, чем вы предложили, но бесконечно более расширяемым.
вышеуказанные решения, похоже, игнорируют вложенные элементы управления.
рекурсивная функция может потребоваться, например:
вы не хотите просто очистить свойство Text без проверки типа элементов управления.
реализация интерфейса, такого как IClearable (как предложено Биллом K), на наборе производных элементов управления сократит длину этой функции, но потребует дополнительной работы над каждым элементом управления.
вот то же самое, что я предложил в своем первом ответе, но в VB, пока мы не получим VB10, это лучшее, что мы можем сделать в VB, потому что он не поддерживает функции возврата в lambdas:
решение В. Б.:
тел.:
Я просто размещаю это здесь, чтобы люди могли видеть, как делать то же самое в VB.
частная пустота FormReset()
Ниже приведены методы, которые я использую для очистки текста от тип управления, реализующего ITextBox.
Я заметил, что в Примере булевых значений по умолчанию. Я уверен, что вы можете изменить его, чтобы установить значения по умолчанию для булевых компонентов.
передайте метод Clear тип элемента управления (TextBox, Label. etc) и коллекцию элементов управления, и он очистит весь текст от элементов управления, реализующих ITextBox.
что-то вроде этого:
в Метод Clear предназначен для страницы или Masterpage. Тип коллекции элементов управления может отличаться. то есть. Форма, ContentPlaceHolder.. и т. д.
Читайте также: