Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как поймать нажатие на кнопку, программно созданную на форме / 11 сообщений из 11, страница 1 из 1
23.01.2004, 12:50
    #32386036
novss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как поймать нажатие на кнопку, программно созданную на форме
Идея заключается в следующем. Хочу чтобы при нажатии на кнопку появлялась форма с рабочими листами в Екселе. Причем на форме появлялись CommandButton (по кол-ву листов), с названиями листов. Нажимаешь на кнопку - попадаешь на нужный тебе лист.

Вопрос следующий:

1. Есть форма, пустая
2. Запускаю макрос, он счиатет кол-во листов, записывает их названия в массив.
3. Запускает форму, добавляет на нее нужно кол-во кнопок, приваивает им названия листов.
4. Проблема: что дальше. Как поймать событие, что юзер нажал на какую-то кнопку?

У меня в свое время была похожая задача, но там были CheckBox'ы и я проверял их значение на True, а как быть с кнопками?

Помогите, плиз, если можно кодом
...
Рейтинг: 0 / 0
23.01.2004, 13:00
    #32386061
newbie VB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как поймать нажатие на кнопку, программно созданную на форме
Private Sub yourButtonName_Click()

code.......

End sub
...
Рейтинг: 0 / 0
23.01.2004, 13:28
    #32386121
novss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как поймать нажатие на кнопку, программно созданную на форме
Пояснение, кнопок может создаться очень много и всякий раз разное кол-во. На каждую я процедуру не напишу...
Соответсвенно имени я их не знаю...
...
Рейтинг: 0 / 0
23.01.2004, 13:32
    #32386130
Дима444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как поймать нажатие на кнопку, программно созданную на форме
Не знаю как в VB но в Delphi можно так:

procedure TForm1.AllButtonsClick(Sender: TObject);
begin
// процедура для всех твоих кнопок
end;

procedure TForm1.Button1Click(Sender: TObject);
var b:TButton;
begin
// Создаем кнопку
b:=TButton.Create(self);
b.Name := 'MyButton87897';
b.Parent := Self;

// Привязываем событие
b.OnClick := AllButtonsClick;
end;
...
Рейтинг: 0 / 0
23.01.2004, 14:41
    #32386271
APM
APM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как поймать нажатие на кнопку, программно созданную на форме
Не знаю как вы "програмно" создаете кнопки.
Но есть такой способ:
ставим на форму кнопку называем ее button ставим index 0
тогда програмно создать еще кнопку можно коммандой
Код: plaintext
1.
load (button( 1 ))
button( 1 ).left= 0 ;button( 1 ).right= 0 ;button( 1 ).caption= "hi all" ;button( 1 ).visible=true

далее пишем обработчик события
Код: plaintext
1.
2.
3.
4.
5.
6.
private sub button_click(index)
select case index ' или button(index).caption
    case 1 ' или case  "ara" 
    
end select
end sub

и тд и тп.

если напишете код как создаете кнопки постараюсь помочь.
...
Рейтинг: 0 / 0
23.01.2004, 14:50
    #32386289
novss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как поймать нажатие на кнопку, программно созданную на форме
Sub CreateForm()

Application.ScreenUpdating = False

Dim MyArray() As String

With ActiveWorkbook

SheetsQty = ActiveWorkbook.Worksheets.Count ' Кол-во листов в книге
ReDim MyArray(SheetsQty) ' Определяем размер массива

For i = 1 To SheetsQty
ActiveWorkbook.Worksheets.Item(i).Select
N = ActiveWorkbook.Worksheets.Item(i).Name
MyArray(i) = N 'заносим данные в массив
Next i

t = 5 ' определям верхнюю границу будущей первой кнопки

For i = 1 To SheetsQty ' цикл равный кол-ву листов в книге

Set Mycmd = Controls.Add("Forms.CommandButton.1", , Visible) 'создание кнопки

Mycmd.Left = 5
Mycmd.Top = t
Mycmd.Width = 80
Mycmd.Height = 20
Mycmd.Caption = MyArray (i)
' можно поставить Mycmd.Name тогда названия
' кнопок будут CommandButton1, CommandButton2, ...

t = t + 25 ' отступ для след. кнопки

Next i

h = i * 25 + 10 ' определяется высота формы

If h > 200 Then ' если высота слишком большая, тогда включаем скроллинг

With FrmLists
.Height = 200
.Width = 115
.ScrollBars = fmScrollBarsVertical
.ScrollHeight = h - 25
.Left = 10
.Top = 200
End With
Else

FrmLists.Height = h

End If


End With

Application.ScreenUpdating = True



End Sub



Best Regards
...
Рейтинг: 0 / 0
23.01.2004, 15:13
    #32386337
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как поймать нажатие на кнопку, программно созданную на форме
Хм. Так это в VBA происходит или нет? У контролов, созданных с помощью Add события отловить нельзя (в VB можно), а массивов контролов VBA не поддерживает.
...
Рейтинг: 0 / 0
23.01.2004, 15:15
    #32386342
novss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как поймать нажатие на кнопку, программно созданную на форме
to Antonariy:

это точно, про события. Я просто не в курсе, поэтому и использовал этот метод. Но если действительно события отловить нельзя (это VBA), то блин я зря запостил этот топик.

Best Regards
...
Рейтинг: 0 / 0
23.01.2004, 16:12
    #32386457
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как поймать нажатие на кнопку, программно созданную на форме
Да блин!! Сочувствую. Придется, наверное, заполнять Листбокс или комбобокс именами листов и подсовывать их значение (выбранное) как параметр стандартной функции.
...
Рейтинг: 0 / 0
23.01.2004, 16:40
    #32386504
novss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как поймать нажатие на кнопку, программно созданную на форме
Конец топика :-(
Сделал ComboBox, работает. Наверное даже удобнее, т.к. места меньше на экране занимает.
Спасибо всем.
...
Рейтинг: 0 / 0
29.01.2004, 12:25
    #32392162
Как поймать нажатие на кнопку, программно созданную на форме
Есть один способ.
Устанавливаешь на всю форму процедуру перехвата нажатия на левую кнопку мыши. В ней определяешь имя активного в данный момент объекта и исходя из этого выполняешь какие-либо действия.

Пример:
Код: plaintext
1.
2.
3.
4.
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim ctrlName As String
    ctrlName = Me.ActiveControl.Name
    ...
End Sub

В переменной ctrlName содержится имя оюъекта формы, в данный момент имеющего фокус
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как поймать нажатие на кнопку, программно созданную на форме / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]