Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Множество кнопок


Автор: Izuver 11.10.2006, 23:51
На форме существует около 40 кнопок, все они отвечают за запись в разные ячейки, но ячейки последовательные (A1, A2,A3......A40) и данные которые записываются тоже последовательные (1,2,3....40)

Как осуществить единый код, чтоб не прописывать каждую?

Автор: ElMichael 12.10.2006, 01:07
Пример для Delphi:

Обязательное условие: один обработчик нажатия для всех кнопок

1) Введи для каждой кнопки в свойстве "Tag" порядковый номер, соответствующий ячейке
Код

procedure TForm1.Button1Click(Sender: TObject);
var
   NumButton: Integer;
begin
  NumButton := (Sender as TButton).Tag;
  // NumButton - это и есть искомый номер ячейки(кнопки)
  ...
end;

2) Если кнопки не переименованы, то воспользуйся конструкцией типа  

Код

procedure TForm1.Button1Click(Sender: TObject);
var
   NumButton: Integer;
begin
  NumButton := StrToInt(Copy((Sender as TButton).Caption, 7, Length((Sender as TButton).Caption) - 6));
  // NumButton - это и есть искомый номер ячейки(кнопки)
  ...
end;



Автор: Naghual 12.10.2006, 09:15
Пользуйся массивом кнопок.

Автор: Izuver 13.10.2006, 00:15
Цитата(Naghual @ 12.10.2006,  09:15)
Пользуйся массивом кнопок.

Как это, заключить CommandButton_Click в For ... to ... Next?

Автор: Naghual 13.10.2006, 09:32
Прости пожалуйста.
Это в VB возможно но не в VBA

Добавлено @ 09:36 
А для VBA нужно искать более оптимальное интерфейсное решение.
Поясни, зачем тебе столько кнопок? Что за действия такие выполняются?

Автор: Izuver 14.10.2006, 00:40
Цитата(Naghual @ 13.10.2006,  09:32)
Поясни, зачем тебе столько кнопок? Что за действия такие выполняются?

А ты представь такое, представь что это не только кнопки, это OptionButton и TextBox.

Автор: Staruha 15.10.2006, 23:09
http://forum.vingrad.ru/index.php?showtopic=31803&hl=label

Автор: Izuver 16.10.2006, 22:06
Цитата(Staruha @ 15.10.2006,  23:09)
http://forum.vingrad.ru/index.php?showtopic=31803&hl=label

Думаю эту проблему я решил здесь http://www.forum.vingrad.ru/index.php?showtopic=112499
Я не знаю кокого элемента, под каким событием совершить код.

Расскажу на примере той темы:
На форме 2 ряда переключателей по 22 шт. При нажатии 11-го происходит:
Код

Private Sub OptionButton11_Click()
Label1 = Cells(13, 2)
For i = 23 To 44
Controls("OptionButton" & i).Enabled = True
Next i
OptionButton33.Enabled = False
End Sub

Чтоб не рисовать 44 таких кода нужон один

Автор: Дмит 17.10.2006, 22:29
http://dimit.pochta.ru/excel/chek_na_liste.zip пример для создания массива CheckBox на листе, через класс.
Может поможет.

Автор: Naghual 17.10.2006, 23:13
Создай одну процедуру с параметром - индексом Оптиона.
Пропиши ее вызов в событии каждого Оптиона, но с указанием его Номера как параметра.

Далее, все действия выполняются в этой одной общей процедуре.

Автор: Izuver 17.10.2006, 23:51
Цитата(Дмит @ 17.10.2006,  22:29)
http://dimit.pochta.ru/excel/chek_na_liste.zip пример для создания массива CheckBox на листе, через класс.
Может поможет.

Да, оно. Сейчас вот разберу все что написано и подумаю можно это для формы пименить.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)