Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблемы с распознованием нажатой кнопки в форме

2.0K
07 июля 2007 года
nevile
138 / / 05.01.2007
Привет всем.

У меня возникла следующая проблема:
Имеется программа состоящая из двух окон. в первом окне имеется два эдита и две кнопки (см. ris1). Обе кнопки вызывают одно и то же окно (см. ris2). Сначала нажимаем на первый обзор появляется окно 2. Находим путь, нажимаем ок он передается в эдит1. Затем проделываем то же самое для кнопки2 и результат в эдит2. Проблема в том что я не могу понять как определить какая кнопка нажата: обзор1 или обзор2, не создавать же две одинаковые формы для выбора пути.
В поиск попрошу не отправлять. Был, нашел там интересную возможность, но применить к своей проге не смог.
Кто сталкивался или может помочь. Милости просим.
257
08 июля 2007 года
kosfiz
1.6K / / 18.09.2005
может можно и как-то по-другому, но что-то в голову ничего не приходит кроме как завести глобальную переменную, при нажатии одной из кнопок присваивать ей соответствующее значение, а потом в модуле второй формы это значение сверять и отправлять текст или что там в соответствующий Edit, например:
 
Код:
if MyVar = MyVal then
  Form1.Edit1.Text:='asd'
else
  Form1.Edit2.Text:='dfg';

вот в этом духе что-нибудь.
2.0K
08 июля 2007 года
nevile
138 / / 05.01.2007
правдо помогло. Все просто. Что то я вчера загнался. Спасибо.
309
09 июля 2007 года
el scorpio
1.1K / / 19.09.2006
Цитата:
Проблема в том что я не могу понять как определить какая кнопка нажата: обзор1 или обзор2, не создавать же две одинаковые формы для выбора пути.


А чем поиск не угодил???

 
Код:
procedure TMyForm.BtnClick(Sender: TObject); // Своя функция
begin
   if (Sender = Button1) then begin
   // Кнопка 1 нажата
   else if (Sender = Button2) then begin
   // Кнопка 2 нажата
   end;
   Form2->ShowModal; // Открываем другое окно
end;


[quote=Kosfiz]но что-то в голову ничего не приходит кроме как завести глобальную переменную[/quote]
ОЧЕНЬ плохая идея - приучает к неправильному стилю программирования. Если и "заводить" что-либо, так это переменную класса, как дополнительное поле объекта формы.
257
09 июля 2007 года
kosfiz
1.6K / / 18.09.2005
Цитата: el scorpio
А чем поиск не угодил???
 
Код:
procedure TMyForm.BtnClick(Sender: TObject); // Своя функция
begin
   if (Sender = Button1) then begin
   // Кнопка 1 нажата
   else if (Sender = Button2) then begin
   // Кнопка 2 нажата
   end;
   Form2->ShowModal; // Открываем другое окно
end;


ОЧЕНЬ плохой код:
1. ты уверен, что все правильно?
2.

 
Код:
Form2->ShowModal;

Borland C++ Builder это в соседнюю ветку вот тебе ссылка http://forum.codenet.ru/forumdisplay.php?f=8 чтобы ты не заплутал.
3.
 
Код:
if (Sender = Button1) then begin
   // Кнопка 1 нажата
   else

а где закрывающий end?
[quote=el scorpio]ОЧЕНЬ плохая идея[/quote]
зато предложенный мной вариант в отличие от твоего работает.

и еще: мой ник пишется с маленькой буквы, т.е. kosfiz, понятно El scorpio?
309
10 июля 2007 года
el scorpio
1.1K / / 19.09.2006
kosfiz
В моём коде ошибки грамматические (ну редко я на дельфи пишу), что очень легко исправляется, но всё остальное правильно. Тем более, что параметр Sender как раз для этого передаётся, и не нужно изобретать велосипед.

А вот "завести глобальную переменную" - это ошибка алгоритмическая. Причём глобальная - замучаешься тараканов ловить, особенно если создашь ещё один объект окна.

 
Код:
procedure TMyForm.BtnClick(Sender: TObject); // Своя функция
begin
   if (Sender = Button1) then begin
   // Кнопка 1 нажата
   end else if (Sender = Button2) then begin
   // Кнопка 2 нажата
   end;
   Form2.ShowModal; // Открываем другое окно
end;
2.0K
10 июля 2007 года
nevile
138 / / 05.01.2007
el scorpio ты не совсем понял что мне нужно сделать и предложенным тобой способом это сделать не получается.
303
23 июля 2007 года
makbeth
1.0K / / 25.11.2004
nevile, все правильно он тебе подсказал. В общем смотри. У тебя есть форма, по сути диалог, результатом вызова которого является путь к папке (Кстати, зачем было воротить новую форму, когда есть отличная стандартная функция SelectDirectory? Ну да не важно...). Теперь посмотрим, что предложил el scorpio:
Код:
procedure TMyForm.BtnClick(Sender: TObject); // Своя функция
var path: string;
begin
    // Здесь мы получаем путь с помощью вызова формы с ris2
    path:= ...;
    if (Sender = Button1) then
    begin
        // Кнопка 1 нажата
        Edit1.Text:=path;
    end else if (Sender = Button2) then
    begin
        // Кнопка 2 нажата
        Edit2.Text:=path;
    end;
end;

Вот, собственно, и вся идея... Да, этот обработчик нажатия кнопки надо повесить на обе кнопки.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог