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

Как очистить textbox в c по нажатию кнопки

  • автор:

Как вернуть кнопки при после нажатия кнопки «Очистить»?

Здравствуйте, на форме распологаются кнопки: 3, -7, 304, 3691, дублировать, закрыть и очистить, а также поле ввода и метка под полем ввода.
Нажатие на кнопки с цифрами приводят к появлению в поле ввода в начале строки, «дублирование» дублирует значение на метку, а кнопка очистить должно очищать поле ввода и метку, при достижении в поле строкой длины 25 символов кнопки должно исчезать и появляться после нажатия кнопки «Очистить».
Как можно реализовать возращение систему в исходное состание после нажатия «Очистить»? Пока что у меня исчезают кнопки с цифрами при 25 символах, но не появляются обратно при нажатии кнопки «Очистить»

from tkinter import * import time root = Tk() root.geometry('600x300') max_len = 25 var = StringVar() def clear1(): entry.delete("0","end") metka['text']='' def close(): root.destroy() def metka1(): pole= entry.get() metka.config(text = ''+pole) def add_num(text): entry.insert(0,text) def limitsize(*args): s = var.get() if len(s) > max_len: metka_hide.place(x = 190, y =41) if len(s)< max_len: metka_hide.place_forget() var.trace_variable("w", limitsize) entry = Entry(root, width = 45,textvariable=var) entry.pack() metka = Label() metka.pack() metka_hide = Label( bg = 'red', width = 30,height = 7) metka_hide.pack() б3 =Button(metka_hide,text='3',width=25,command = lambda:add_num("3")) б3.pack() б7 =Button(metka_hide,text='-7',width=25,command = lambda:add_num("-7")) б7.pack() б304 =Button(metka_hide,text='304',width=25,command = lambda:add_num("304")) б304.pack() б3691 =Button(metka_hide,text='3691',width=25,command = lambda:add_num("3691")) б3691.pack() бcopy =Button( text='Дублировать',width=25,command = metka1) бcopy.pack() бclose =Button(root,text='Закрыть',width=25,command = close) бclose.pack() бclear =Button(root,text='Очистить',width=25,command=clear1) бclear.pack() root.mainloop()
  • Вопрос задан более двух лет назад
  • 148 просмотров

Комментировать
Решения вопроса 1
AlbertForest @AlbertForest

Ваше объяснение не совсем понятное но я попробую.
Для начала нужно:
- ̶П̶е̶р̶е̶с̶т̶а̶т̶ь̶ ̶и̶с̶п̶о̶л̶ь̶з̶о̶в̶а̶т̶ь̶ ̶к̶и̶р̶и̶л̶л̶и̶ц̶у̶ ̶в̶ ̶и̶м̶е̶н̶а̶х̶ ̶п̶е̶р̶е̶м̶е̶н̶н̶ы̶х̶
- Выяснить что означают символы "" и больше их не путать
- Хотя бы бегло пролистать документацию и выяснить, что place_forget() работает только для виджетов, установленных с помощью place()

Не буду особо вникать, так как с tkinter работать не приходилось. Но если вопрос только в скрытии/отображении, то вот пример:

from tkinter import * import time root = Tk() root.geometry('600x300') max_len = 25 var = StringVar() def clear1(): entry.delete("0","end") metka['text'] = '' def close(): root.destroy() def metka1(): pole= entry.get() metka.config(text = '' + pole) def add_num(text): entry.insert(0,text) def limitsize(*args): s = var.get() if len(s) > max_len: metka_hide.place_forget() else: metka_hide.place(x = 204, y = 120) var.trace_variable("w", limitsize) entry = Entry(root, width = 45, textvariable=var) entry.pack() metka = Label() metka.pack() metka_hide = Label( bg = 'red', width = 30,height = 7) metka_hide.pack() b3 = Button(metka_hide,text='3',width=25,command = lambda:add_num("3")) b3.pack() b7 = Button(metka_hide,text='-7',width=25,command = lambda:add_num("-7")) b7.pack() b304 = Button(metka_hide,text='304',width=25,command = lambda:add_num("304")) b304.pack() b3691 = Button(metka_hide,text='3691',width=25,command = lambda:add_num("3691")) b3691.pack() metka_hide.place(x = 204, y = 120) bcopy = Button( text='Дублировать',width=25,command = metka1) bcopy.pack() bclose = Button(root,text='Закрыть',width=25,command = close) bclose.pack() bclear = Button(root,text='Очистить',width=25,command=clear1) bclear.pack() root.mainloop()

Надеюсь смысл изменений в вашем коде понятен.

Как правильно очистить 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
19.1k 7 7 золотых знаков 37 37 серебряных знаков 99 99 бронзовых знаков

Если проследить цепочку вызовов свойства 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 по нажатию кнопки

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

Пользователь
Сообщений: 3007 Регистрация: 18.07.2016
12.01.2018 19:37:36
Пользователь
Сообщений: 223 Регистрация: 03.11.2014
12.01.2018 19:40:59
.Value="" Каждому полю присваивать?
Пользователь
Сообщений: 3007 Регистрация: 18.07.2016
12.01.2018 19:48:27
Я по-другому не умею, делаю так - каждому

Me.ComboBox1.Value = "" Me.TextBox1.Value = ""

Пользователь
Сообщений: 47199 Регистрация: 15.09.2012
12.01.2018 19:57:00
Если полей немного - очистка каждого. Если много, можно чистить в цикле.
Пользователь
Сообщений: 782 Регистрация: 06.04.2015
12.01.2018 20:08:36

Private Sub CommandButton1_Click() Dim c As Control For Each c In Controls Select Case TypeName(c) Case "TextBox", "ComboBox": c = "" End Select Next End Sub

-это если в цикле
Пользователь
Сообщений: 223 Регистрация: 03.11.2014
12.01.2018 21:49:00
Страницы: 1
Читают тему

© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru

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

ООО "Планета Эксел"
ИНН 7735603520
ОГРН 1147746834949
ИП Павлов Николай Владимирович
ИНН 633015842586
ОГРНИП 310633031600071

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); >

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

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