Как правильно очистить textBox
Всем привет, в процессе изучения C#, возник вопрос, по поводу очистки textBox с WinForms. На просторах встречаются, разные способы:
textBox.Text = null; textBox.Clear(); textBox.Text = "";
Какой правильнее использовать? Может есть какие-то особенности? Спасибо.
Отслеживать
28.7k 4 4 золотых знака 40 40 серебряных знаков 81 81 бронзовый знак
задан 23 фев 2019 в 8:35
87 1 1 золотой знак 2 2 серебряных знака 10 10 бронзовых знаков
Откуда этот текстбокс: WinForms, WPF, что-то ещё? | Вообще, если следовать шаблонам MVC/MVVM и т. п., то контрол должен быть привязан к модели (свойству модели данных). Следовательно, очищать нужно это свойство, а контрол (в нашем случае текстбокс), очистится сам.
23 фев 2019 в 9:25
textBox с WinForms
23 фев 2019 в 10:20
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Мое мнение — плевать как ты будешь очищать) Любым из этих способов.
но раз уж есть функция textBox.Clear(); то я бы пользовался бы ею. Как минимум — потому что короче запись и читабельнее код.
Отслеживать
ответ дан 23 фев 2019 в 12:16
Andrew Stop_RU_war_in_UA Andrew Stop_RU_war_in_UA
19k 6 6 золотых знаков 36 36 серебряных знаков 98 98 бронзовых знаков
Если проследить цепочку вызовов свойства Text 1, 2, 3, то мы увидим следующий код:
if (value == null)
То есть null задать этому свойству невозможно, всё равно будет присвоена пустая строка. Следовательно, способ textBox.Text = null; отпадает.
Проследив цепочку вызовов метода Clear 4, 5, видим:
public void Clear()
Внезапно, присвоение null . Мда, почему бы сразу не присваивать «» .
Вообще, используйте метод, раз уж он есть и вызов его на пару символов короче.
В современных приложениях обычно используется привязка данных. Напрямую мы не работаем с графическими контролами. Значения в них меняются опосредованно.
Пример получается громоздкий, но раз уж взялся объяснять, то доведу дело до конца.
Допустим, у нас имеется класс, описывающий человека, у которого есть имя (другие свойства добавьте сами). Чтобы экземпляры этого класса могли участвовать в двусторонней привязке данных, нужно реализовать у него интерфейс INotifyPropertyChanged.
class Person : INotifyPropertyChanged < private string _name; public string Name < get =>_name; set < if (_name != value) < _name = value; NotifyPropertyChanged(); >> > private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") < PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); >public event PropertyChangedEventHandler PropertyChanged; >
Создадим экземпляр этого класса и прибиндим его к имеющемуся текстбоксу:
var person = new Person < Name = "Bob" >; textBox.DataBindings.Add( nameof(TextBox.Text), person, nameof(Person.Name), false, DataSourceUpdateMode.OnPropertyChanged);
Теперь для очистки текстбокса достаточно очистить привязанное свойство:
person.Name = "";
Если вы будете создавать большие серьёзные приложения, то неизбежно столкнётесь с data binding и INotifyPropertyChanged, поэтому придётся их освоить.
Как очистить textbox в c по нажатию кнопки
Argument ‘Topic id’ is null or empty
Сейчас на форуме
© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru
Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.
| ООО «Планета Эксел» ИНН 7735603520 ОГРН 1147746834949 |
ИП Павлов Николай Владимирович ИНН 633015842586 ОГРНИП 310633031600071 |
Нужно сделать кнопку очистки полей ввода в калькуляторе (windows forms c++)
Работаю с textBox в качестве полей ввода. Могу вводить цифры с панели программы и получать результат, но после 1 действия ввод данных прекращается. Нужно чтобы я мог обнулять ячейки ввода.
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) this->Text = «Калькулятор»;
label1->Text = «Текущая операция: «;
label2->Text = «»;
>
private: System::Void button22_Click(System::Object^ sender, System::EventArgs^ e) double x,c;
switch (label2->Text[0])
case’+’:
x = System::Convert::ToDouble(textBox1->Text)+System::Convert::ToDouble(textBox2->Text);
textBox3->Text = Convert::ToString(x);
break;
case’-‘:
x = System::Convert::ToDouble(textBox1->Text) — System::Convert::ToDouble(textBox2->Text);
textBox3->Text = Convert::ToString(x);
break;
case’*’:
x = System::Convert::ToDouble(textBox1->Text) * System::Convert::ToDouble(textBox2->Text);
textBox3->Text = Convert::ToString(x);
break;
case’/’:
x = System::Convert::ToDouble(textBox1->Text) / System::Convert::ToDouble(textBox2->Text);
textBox3->Text = Convert::ToString(x);
break;
>
>
private: System::Void button13_Click(System::Object^ sender, System::EventArgs^ e) label2->Text = «+»;
n = true;
>
.
Лучший ответ
Очищай textbox и всё, в чём проблема?
textBox1->Clear();
textBox2->Clear();
Остальные ответы
Я так понял что ты в калькулятор решил вписывать значения с клавиатуры а не по нажатию виртуальных кнопок — которые должны быть расположены на форме калькулятора !
И не совсем понятно что у тебя не получаеться конкретно !
ПавелМастер (2366) 8 лет назад
наоборот
ввод будет производиться через кнопки в программе
поставил ReadOnly в настройках textBox, чтобы при запуске исключить ввод букв
My world of C #
Задача: на форме есть n — колличество TextBox’ов, их нужно очистить все одновременно нажатием одной кнопки.
Делаем функцию:
void LoopVisualTree(DependencyObject obj)//обнуление текст боксов < for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) < if (obj is TextBox) < ((TextBox)obj).Text = null; > // РЕКУРСИЯ LoopVisualTree(VisualTreeHelper.GetChild(obj, i)); > >
Потом нажимаем на кнопку на форме 2 раза, чтобы перейти в её обработчик и прописываем там(пример. ):
private void button10_Click(object sender, RoutedEventArgs e) < LoopVisualTree(this); >