Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.15;
Скачать: CL | DM;

Вниз

Помогите! Событие OnExit вызывается 2 раза!!   Найти похожие ветки 

 
semion   (2002-04-02 17:14) [0]

Народ! Может кто подскажет как сделать, чтобы при выходе из контрола проверялось значение на какое-либо условие и если условие не верно, то чтобы фокус оставался на этом контроле. Проблема в том, что если обрабатывать событие OnExit и туда вставлять self.SetFocus, то при переходе на некоторые контролы (например, TRxDataEdit) это событие вызывается дважды. Как это можно побороть или может другой способ кто посоветует!


 
Song ©   (2002-04-02 17:35) [1]

IF условие then класс(Sender).SetFocus;


 
semion   (2002-04-03 10:42) [2]

Дело в том, что перед этим надо вывести диалог типа "поле заполнено неверное". Если вставить то, что ты предлагаешь в OnExit, то это диалог, по описанным выше причинам появится 2 раза.


 
Anatoly Podgoretsky ©   (2002-04-03 10:54) [3]

У тебя где то ошибка, я как раз и использую описанный тобой алгоритм, но вот это self.SetFocus нельзя.


 
Sat7 ©   (2002-04-03 11:10) [4]

Зачем self.setfocus? Попробуй так:

procedure TForm1.Edit1Exit(Sender: TObject);
begin
if TEdit(Sender).Text<>"555" then
begin
MessageDlg("Incorrect!",mtError,[mbok],0);
TWinControl(Sender).Setfocus;
end;

end;

У меня работает, на все rx-компоненты тоже.


 
semion   (2002-04-03 12:37) [5]

Упрощаем ситуацию, чтобы было проще проверять :)
Создаем пустой проект. На форму кидаем ComboBox и DateEdit (из RX)

Пишем код

procedure TMainForm.ComboBox1Exit(Sender: TObject);
begin
MessageDlg("Incorrect!",mtError,[mbok],0);
TWinControl(Sender).Setfocus;
end;


Заходим в Combobox и оттуда пытаемся выйти в DateEdit. Считаем сколько раз выводится диалог. У меня 2.


 
Sat7 ©   (2002-04-03 12:48) [6]

А у меня один!

У меня 5-ый delphi стоит... Может в этом дело? Хотя что-то я сомневаюсь.


 
Sat7 ©   (2002-04-04 06:17) [7]

Ради спортивного интереса поставил дома 6-ой. Я не знаю, что у тебя за проблема, но в 6-ом delphi диалог тоже вызывается 1 (1!!!) раз. На все компоненты! Если у тебя все же 2 раза, попробуй так:

procedure TForm1.Edit1Exit(Sender: TObject);
begin
Edit1.OnExit:=nil;
MessageDlg("Incorrect!",mtError,[mbok],0);
TWinControl(Sender).Setfocus;
Edit1.OnExit:=Edit1Exit;
end;

(Конкретно для Edit1, конечно). Если и так не будет работать...


 
semion   (2002-04-04 11:25) [8]

Твой вариант не помогает :(.
Я так чувствую, что проблема в RX. У тебя под D6 какой порт RX стоит? Если не трудно, скинь ссылку где ты его брал.

Кстати, я посмотрел как это получается, что onExit вызывается 2 раза. И вот что получил: Сначала вызывается onExit, потом (после того как onExit отрабатывает!!) вызывается
TCustomComboEdit.MouseDown
Это происходит от того, что был щелчок мыши на другой компоненте.
В этом обработчике стоит установка Focus
Соответственно фокус переходит на него и снова вызывается мой onExit. Причем TCustomComboEdit.MouseDown выглядит таким образом:


if (FPopup <> nil) and (Button = mbLeft) then begin
if CanFocus then
SetFocus;
if not FFocused then Exit;
if FPopupVisible then PopupCloseUp(FPopup, False);
{else if (not ReadOnly or AlwaysEnable) and (not DirectInput) then
PopupDropDown(True);}
end;
inherited MouseDown(Button, Shift, X, Y);

В каких-то случаях FPopup = Nil и все работает отлично. В каких я пока не понял :((.



Страницы: 1 вся ветка

Текущий архив: 2002.04.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
3-46229
Octav
2002-03-23 16:05
2002.04.15
Insert Blob in the table


1-46400
dimonf
2002-04-01 20:46
2002.04.15
Господа программисты, можно ли в QuickReport засунуть данные из S


3-46215
Dimonka
2002-03-22 14:18
2002.04.15
Вопрос по структуре БД


1-46443
Leonon
2002-04-03 09:54
2002.04.15
TMemo - где предел вместимости под Win98 ???


6-46478
ECM
2002-02-02 01:03
2002.04.15
Функция InternetDial(…) под Win2K