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

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

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2013, 09:07   #1
Максим La
Новичок
Джуниор
 
Регистрация: 03.07.2013
Сообщений: 1
По умолчанию Возвращение имени нажатого объекта

Добрый день.
У меня 20 чекбоксов, которые я создаю массивом.
Код:
TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Ndatch: tlabel;
…
public
    sh: array [0..19] of tcheckbox;
…
for i := 0 to 19 do
    begin
sh[i]:=tcheckbox.Create(groupbox1);
      sh[i].Top:=49+i*24;
      sh[i].Caption:='';
      sh[i].Height:=24;
      sh[i].Width:=20;
      sh[i].Left:=18;
      sh[i].Parent:=groupbox1;
…
Далее в зависимости от того на какой чекбокс я нажимаю, должно произойти определенное действие. Но я не пойму: как определить на какой именно я нажимаю чекбокс. Пробую так:
ndatch.caption:=(sender as tcheckbox).Name;
Такой способ не работает. Выводит на экран пустое место.
Если пробовать ndatch.caption:=(sender as tcheckbox).ToString; то выводит на экран: “TcheckBox”.
Пробовал по onmousedown на groupbox1, хотел в зависимости от от места нажатия по большому групбоксу, определить какой чекбокс стоит. Но тогда чекбоксы загоражимают место клика и групбокс клика не видит. В таком случае нужно рисовать кнопки на самом групбоксе канвасом, тогда наверно сработает, но хочется както по нормальному.
Как же все-таки правильно определить объект клика? Должен же быть простой способ.

Последний раз редактировалось Stilet; 09.07.2013 в 17:15.
Максим La вне форума Ответить с цитированием
Старый 03.07.2013, 09:14   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
ndatch.caption:=(sender as tcheckbox).Name;
а покажите место в вашем коде, где Вы при создании очердного чекбокса присваиваете ему Name ?

допишите в коде что-то вроде:
Код:
sh[i]:=tcheckbox.Create(groupbox1);
sh[i].Name := 'MyCheck'+IntToStr(i+1);
sh[i].Top:=49+i*24;
а по сути, да, всё верно делаете...

Последний раз редактировалось Serge_Bliznykov; 03.07.2013 в 09:17.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.07.2013, 10:07   #3
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

может всё-таки имеет смысл вместо имени заполнять
Код:
sh[i].Tag := i;
а потом создать общее OnClick для всех CheckBox-ов в котором
Код:
case TCheckBox(Sender).Tag of 
  0 : ;
  1 : ;
  // и т.д.
end;
пс. хотя и нормальное имя компоненту не помешает)
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 03.07.2013 в 10:10.
Yurk@ вне форума Ответить с цитированием
Старый 09.07.2013, 12:01   #4
Reimscher
Пользователь
 
Регистрация: 01.02.2011
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
может всё-таки имеет смысл вместо имени заполнять
Код:
sh[i].Tag := i;
а потом создать общее OnClick для всех CheckBox-ов в котором
Код:
case TCheckBox(Sender).Tag of 
  0 : ;
  1 : ;
  // и т.д.
end;
пс. хотя и нормальное имя компоненту не помешает)
Тоже в таких случая предпочитаю использовать Tag.
Reimscher вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод имени объекта через texbox alik98 C# (си шарп) 3 28.11.2012 21:08
возвращение экзэипляра объекта из функции(дружественной, к примеру) monolit111 Общие вопросы C/C++ 2 06.10.2012 21:21
Возвращение объекта из функции класса atenon Общие вопросы C/C++ 9 19.05.2010 03:24
Передача имени объекта в процедуру (Потоки) Delphi edmynt Помощь студентам 3 03.02.2010 20:58
Задание имени объекта процедурке Alex Cones Общие вопросы Delphi 4 24.05.2009 12:05