Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2010, 12:47   #1
Teor
Пользователь
 
Регистрация: 20.12.2008
Сообщений: 46
Вопрос Проблема с событием OnChange компонента DriveComboBox (C++Builder 6)

Здраствуйте. Недавно начал заниматся С++ и столкнулся со следующей проблемой. Вообщем выставил на форму компонент DriveComboBox и засунул на его событие OnChange нужный код. Вот что вышло
Код:
void __fastcall TForm2::DriveComboBox1Change(TObject *Sender)
{
String s;
int ok;
TSearchRec rec;
TTreeNode *t;
c10=DriveComboBox1->Drive;
s=c10;
s=s+":\\*";
t=NULL;
ok=FindFirst(s,faAnyFile,rec);
t=TreeView1->Items->Add(t,rec.Name);
FindClose(rec);
}
Данный код компилируется и работает (переменная с10 объявлена вне данной процедуры), однако выполняется почему-то 2 раза. При вставке данного кода на нажатие кнопки он выполняется как и положено 1 раз. Можно ли как-то сделать, что бы он как и положено выполнялся 1 раз на событие OnChange?
Teor вне форума Ответить с цитированием
Старый 15.07.2010, 14:25   #2
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Возможно стоит попробовать другой подобный метод, например OnChanged();
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 15.07.2010, 14:31   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
однако выполняется почему-то 2 раза.
Поставь бряк на c10=DriveComboBox1->Drive;
Когда прога на нем остановится нажми CHIFT+CTRL+S и посмотри откуда пришел вызов этого обработчика. Может у тебя его еще что-то вызывает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.07.2010, 14:39   #4
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Если не следовать хорошему стилю, можно создать вспомогательную переменную например типа static bool, и менять ее значения на противоположные с каждым вызовом события, на каждый второй вызов сделать выполнение основного кода
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 15.07.2010, 21:58   #5
Teor
Пользователь
 
Регистрация: 20.12.2008
Сообщений: 46
По умолчанию

Цитата:
OnChanged()
Но в данном компоненте нету такого события, да и похожего на просто OnChange тоже нету.
Использовать другую переменную это вариант, скорее всего сделаю что-то подобное.
Цитата:
CHIFT+CTRL+S
Может Shift? Но тогда просто произойдет сохранение проекта.
Но все же, как оказалось, именно после выполнения строки c10=DriveComboBox1->Drive; процедура доходит до конца и начинается заново. Это что-ли присваивание буквы диска воспринимается как изменение в компоненте?
Teor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с ресурсами компонента Shouldercannon Общие вопросы Delphi 1 21.04.2009 11:34
Странности в работе с событием OnTimer Mixasik Общие вопросы Delphi 3 17.01.2009 01:22
Проблема ONCHANGE в IE mihali4 JavaScript, Ajax 11 25.11.2008 07:15