|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Очистка большого числа Edit, ComboBox и т.д
Добрый день. Подскажите пожалуйста, как можно одновременно не перечисляя все нужные "контролы" очистить их. Например, есть форма на которой 10 Edit, 10 ComboBox из которых нужно очистить только те, Name которых равны: tb_1, tb_2, tb_3, cb_1, cb_2, cb_3. Очистка происходит по нажатию на кнопки. Спасибо.
|
#2
|
|||
|
|||
Цитата:
|
#3
|
||||
|
||||
Можно требуемым для очистки контролам присвоить одинаковый и уникальный Tag. Затем используя цикл с использованием ComponentCount очистить их, примерно так:
Код:
var I : Integer; begin for I := 0 to ComponentCount - 1 do if (Components[i] is TEdit) and ((Components[i] as TEdit).Tag = 12345) then (Components[i] as TEdit).Text := '' else if (Components[i] is TComboBox) and ((Components[i] as TComboBox).Tag = 12345) then (Components[i] as TComboBox).Clear; end; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
DOR (29.07.2012)
|
#4
|
|||
|
|||
Цитата:
|
#5
|
||||
|
||||
Пусть пробует по-своему, может получится.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#6
|
||||
|
||||
Можешь извращаться типа массивом Pointer'ов:
Код:
var pt:array of ^TWinControl; ccount:Integer; ........... begin ccount:=6; setlength(pt, ccount); pt[0]:=@edit1; pt[1]:=@edit2; pt[2]:=ComboBox1; .............. if pt[0].ClassType = TEdit then (pt[0]^ as TEdit).text:='' else if pt[0].ClassType = TComboBox then (pt[0]^ as TCombobox).clear else .................................... |
#7
|
||||
|
||||
В любом случае идёт перечисление контролов.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#8
|
||||
|
||||
Ну, тогда просто - если они не на главной форме - "убить" форму, на которой они расположены, а потом создать заново. Но я все-же думаю, что и там идет перечисление всех контроллов на форме (при создании).
|
#9
|
|||
|
|||
Цитата:
Подобное использовал в VBA, это ближе. Спасибо всем, кто не прошел мимо, кто высказал свое мнение и предложил возможные варианты решения. |
#10
|
|||
|
|||
А если сделать так, чтобы при создании формы все данные о элементах образовали непрерывный массив в памяти. То есть, допустим, есть 5 CheckBox и в памяти каждый занимает 10 байт, тогда 5 CheckBox будут занимать 50 ПОСЛЕДОВАТЕЛЬНЫХ байт. После создания формы кидаешь дамп памяти длиной в 50 байт в переменную, а потом просто меняешь значение памяти на значение переменной. Тут все, вроде даже перерисоваться должно на форме сразу (я имею ввиду наличие и отсутствие галочек на CheckBox).
Вы понимаете, о чем я? Господа, Гуру, убейте меня ржавым носком, если такое невозможно реализовать. |
#11
|
||||
|
||||
Вот ещё один вариант с использованием FindComponent:
Код:
for i := 1 to 3 do begin (FindComponent('tb_' + inttostr(i)) as TEdit).Text := ''; (FindComponent('cb_' + inttostr(i)) as TComboBox).Clear; end; |
#12
|
|||
|
|||
Цитата:
Ну вобщем как-то так... |