Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
ВнизУправление выпадаюшим списком ComboBox-а Найти похожие ветки
← →
alex-ran (2002-04-26 17:47) [0]Уважаемые Мастера Делфи. Обращаюсь к Вам как к последней инстанции :)) Проблема в принципе проста (наверное) но реализовать ее не могу. Необходимо чтобы ComboBox по нажатию Enter разворачивался и далее после выбора необходимого элемента сворачивался. Если Stile ComboBox-а установлен в csDropDown то никаких проблем. Но если csDropDownList то развернуть получается, а свернуть - ну никак. Вместо этого происходит передвижение выбранного элемента вверх или вниз выпавшего списка.
Реализую все это так:
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 and (Sender as TComboBox).DroppedDown=False Then
begin
Key:=0;
(Sender as TComboBox).DroppedDown:=True;
Exit
end;
if Key=#13 and (Sender as TComboBox).DroppedDown=True Then
begin
Key:=0;
(Sender as TComboBox).DroppedDown:=False;
end;
end;
Что я не так делаю? И еще, я почему то при выпавшем списке считываю (Sender as TComboBox).DroppedDown и получаю False !!??
С уважением, Александр.
← →
Игорь Шевченко (2002-04-26 17:52) [1]День добрый,
Я бы рекомендовал обрабатывать событие OnKeyDown.
А по Enter ComboBox вообще-то сам сворачивается :-)))
С уважением,
← →
Vovchik (2002-04-26 17:58) [2]> И еще, я почему то при выпавшем списке считываю (Sender as
> TComboBox).DroppedDown и получаю False !!??
Скорее всего, событие в котором ты проверяешь это свойство вызывается до разворачивания списка.
А чем не нравится csDropDown, если с ним всё работает?
← →
alex-ran (2002-04-26 18:47) [3]Спасибо за проявленное участие, но:
для Vovchik - в том то и дело что необходим стиль именно csDroppedDown, дабы оградить юзера от неправильного ввода. А писать процедуру на проверку введенного значения по моему нецелесообразно, раз есть такое свойство которое не допускает произвольный ввод, это все изврат.
Я поставленную проблему мог бы решить по другому, но хотелось бы разобраться в поведении компонента поглубже.
для Игорь Шевченко:
я понимаю что Вам не до меня, но Вы попробуйте - увидите что получится :) А то что по Энтеру он сворачивается - я понял, но к сожалению второе условие моей программы вообще никогда не реализуется из-за того что DroppedDown=False даже при развернутом списке. Почему? Не знаю. Потому и спрашиваю.
С уважением, Александр
← →
pj (2002-04-26 21:04) [4]все ясно с ним при Key = 13 у тебя в обработчик приходит
DroppedDown = False и поэтому при любом нажатии на Enter
он закрывается и опять открывается...
Вот и не закрыть тебе его...
← →
Vovchik (2002-04-26 22:26) [5]> alex-ran
Ты же сказал, что csDroppedDown работает. Вот и юзай его. А почему он работает так как у тебя - это надо конкретно смотреть. Пришли свой исходник, посмотрю.
← →
Andrey007 (2002-04-27 09:13) [6]По-моему надо так:
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 and (Sender as TComboBox).DroppedDown=False Then
begin
Key:=0;
(Sender as TComboBox).DroppedDown:=True
end
else if Key=#13 and (Sender as TComboBox).DroppedDown Then
begin
Key:=0;
(Sender as TComboBox).DroppedDown:=False
end
end;
А вообще-то, сам я делаю так:
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
(Sender as TComboBox).DroppedDown:=(key<>#27) and (key<>#13)
end
← →
Lusha (2002-04-27 10:32) [7]Изврат, конечно, но работать будет... :)
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
TComboBox(Sender).Tag := TComboBox(Sender).Tag xor 1;
if not boolean(TComboBox(Sender).Tag) then
TComboBox(Sender).DroppedDown := not TComboBox(Sender).DroppedDown;
Key := #0;
end;
end;
← →
Lord Warlock (2002-04-29 09:06) [8]Если не еще не сделал, слухай сюды:
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
ComboBox1.DroppedDown:=not IsOpen;
Key:=#0;
end;
и
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
IsOpen:=ComboBox1.DroppedDown;
end;
Здесь IsOpen - Приватная в классе формы или глобальная, как хочешь, начальное значение - FALSE
Пользуйся
← →
alex-ran (2002-04-29 11:38) [9]Огромное всем спасибо. Заработало!!!
Lord Warlock - Заработало!!!
В заключение - не могли бы Вы объяснить почему состояние DroppedDown необходимо отслеживать именно в KeyDown?
Я так понял у меня не полдучалось из-за того что я его отслеживал в KeyPress.
С уважением, Александр.
← →
Lusha (2002-04-29 11:55) [10]Я так понял у меня не полдучалось из-за того что я его отслеживал в KeyPress.
Вы поняли неправильно... Дело не в обработчике, а в том что клавиша VK_RETURN явным образом обрабатывется в процедуре WndProc еще до вызова какого либо обработчика...
← →
Lord Warlock (2002-04-29 14:05) [11]> Lusha ©
Совершенно верно!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c