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

Ваш аккаунт

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

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

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

Помагите новичкам

1.8K
15 марта 2004 года
Syama
97 / / 01.03.2004
Хочу попросить вас помоч мне и наверника многим начинаюшим.Как вы предложыли бы изучить Visual Basic?Какими методами,с чего начать?Я например читаю книги о Visual Basic-ке но чуствою что ,эффект не очень хорошый.
Заранее благодарень за ответ:)
Страницы:
528
15 марта 2004 года
olegnet
154 / / 17.11.2003
Цитата:
Originally posted by Syama
Хочу попросить вас помоч мне и наверника многим начинаюшим.Как вы предложыли бы изучить Visual Basic?Какими методами,с чего начать?Я например читаю книги о Visual Basic-ке но чуствою что ,эффект не очень хорошый.
Заранее благодарень за ответ:)


***
ты дзнаешь, я сам не очень то и селён в Vb, ноесть ряд книг которые так и называются, VB для начинающих,...ноАчни с них,...а так - если ты с_умел доабраться до этого форума, то в глоАбальных сетях инета ты весьма и весьма просто сможешь найти пособия для начинающих по VB и VBA, где тебе всё наглядно расскажут и поАкажУт...

266
15 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Syama
Хочу попросить вас помоч мне и наверника многим начинаюшим.Как вы предложыли бы изучить Visual Basic?Какими методами,с чего начать?Я например читаю книги о Visual Basic-ке но чуствою что ,эффект не очень хорошый.
Заранее благодарень за ответ:)


Посмотри посты в теме:
http://forum.codenet.ru/showthread.php?threadid=15556

5.7K
15 марта 2004 года
Ворчун
8 / / 16.12.2003
Цитата:
Originally posted by Syama
Хочу попросить вас помоч мне и наверника многим начинаюшим.Как вы предложыли бы изучить Visual Basic?Какими методами,с чего начать?Я например читаю книги о Visual Basic-ке но чуствою что ,эффект не очень хорошый.
Заранее благодарень за ответ:)



Я считаю, что лучший способ изучения VB (да и не только его) - это ставить себе самому практические задачи. Т.е. задаешься целью написать какую-либо очень полезную программу, при ее написании пользуешься информацией из различных источников (книги, сеть, этот форум) и применяешь те или иные интересные решения.
Хотя основы языка в этом случае надо все-равно знать. Но если ты читал книги вдумчиво, то тут проблемы возникнуть не должно.

1.8K
16 марта 2004 года
Syama
97 / / 01.03.2004
Цитата:
Originally posted by mhaturov

Посмотри посты в теме:
http://forum.codenet.ru/showthread.php?threadid=15556


Я посматрел,метод понравился.Если возможносьт будет,прошу вас для меня тоже подкинуть задачу.Но имейте введу я не так силен,как тот парень:)
и thanks for attention

266
16 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Syama

Я посматрел,метод понравился.Если возможносьт будет,прошу вас для меня тоже подкинуть задачу.Но имейте введу я не так силен,как тот парень:)
и thanks for attention


ОК, прямо тут вечерком и выложк задачку.;)

269
16 марта 2004 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by mhaturov

ОК, прямо тут вечерком и выложк задачку.;)


mhaturov, а может меня тоже в класс запишешь ? :)
И мне задачку накинешь ?
Только я в VB не просто ноль, а супер-мега-сверх-ноль.
а VB который за макросы в EXcel и Word отвечает, это ТОТ САМЫЙ VB на котором вы все пишете?

258
16 марта 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Greenering

mhaturov, а может меня тоже в класс запишешь ? :)
И мне задачку накинешь ?
Только я в VB не просто ноль, а супер-мега-сверх-ноль.
а VB который за макросы в EXcel и Word отвечает, это ТОТ САМЫЙ VB на котором вы все пишете?



В Word'e и Excel'e это VBA, в Access называют VBE посколько он все таки отличается немного от VBA, ну и наконец еще есть просто VB1/2/3/4/5/6

266
16 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Greenering

mhaturov, а может меня тоже в класс запишешь ? :)
И мне задачку накинешь ?
Только я в VB не просто ноль, а супер-мега-сверх-ноль.
а VB который за макросы в EXcel и Word отвечает, это ТОТ САМЫЙ VB на котором вы все пишете?


Ситуация следующая.
Есть, так называемый "чистый" VB. До версии, по-моему, 5.0 он поставлялся как самостоятельный продукт. Затем он начал поставляться в составе пакета Microsoft Visual Studio. Это - полноценный компилятор. Позволяет писать свои *.exe программы (как в обычной, ассемблеровской, так сказать, тоесть двоичной компиляции, так и в так называемой "псевдокомпиляции", которая позволяет при установке виртуальной машины VB переносить его на любую платформу), позволяет создавать библиотеки полноценные, писать контролы и т.д.
Но для облегчения работы с приложениями Офиса Mocrosoft создала интерпритаторы языков, очень похожих на VB и встраиваемых в офисные приложения. Это, так называемые, языки макросов - VBA (Visual Basic From Applications). Их существует (по неофициальной классификации) несколько видов, например VBA - для Word и Excel, VBE - для Access и т.п.
Языки очень близки и человек, умеющий, например, писать на VB, сможет писать и на VBA. Но из-за различных ньюансов, конечно же. "чистый" VB-шник струдом напишет оптимальный код на VBA, равно как и "чистый" VBA-шник - на VB.
Но, часто, работая на VB, приходится работать и с VBA, и наоборот. Поэтому, как Вы можете здесь видеть, я, например, постоянно задаю вопросы по VBA, и отвечаю, в основном, на вопросы, по VB.
Аналогично, с точностью до наоборот, здесь помогает и уважаемый SergeySV - т.е. отвечает по VBA, в основном. Это как раз и иллюстрирует специфику языков.
А задачки я тут как бы для всех выкладываю. Если есть желание - решайте. Я буду только рад, что мой труд не пропал:D

269
16 марта 2004 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by mhaturov

Поэтому, как Вы можете здесь видеть, я, например, постоянно задаю вопросы по VBA, и отвечаю, в основном, на вопросы, по VB.


mhaturov, на ты, пора бы !
ДАйте задачку-у-у-у!

266
16 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Greenering

mhaturov, на ты, пора бы !
ДАйте задачку-у-у-у!


Вечером. Подождите пока. Ща мне совсем, к сожалению, некогда.:{

266
16 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by mhaturov

Вечером. Подождите пока. Ща мне совсем, к сожалению, некогда.:{


Ну я буду по VB чистому подкидывать задачки.
Значит так, задача первая.
Создайте форму с 1 кнопкой. По "клику" на кнопку должен открываться диалог выбора цвета. Если пользователь выбрал в нём цвет, то форма должна менять свой цвет на выбранный, иначе должна оставаться прежнего цвета.
Подсказываю. Вам нужно использовать контрол CommonDilog.
Задачка простая, но, если будут вопросы, обязательно обращайтесь сюда.:)

1.8K
18 марта 2004 года
Syama
97 / / 01.03.2004
Я както написал код:)

Private sub command1_click
commonDialog1.ShowColor
Form1.Backcolor=CommonDialog1.Color
End Sub

Private Sub Command2_click
unload me
End Sub


Хотелось бы ещо.Если возможно оставьте темп сложности таким же.
Thanks.
266
18 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Syama
Я както написал код:)

Private sub command1_click
commonDialog1.ShowColor
Form1.Backcolor=CommonDialog1.Color
End Sub

Private Sub Command2_click
unload me
End Sub


Хотелось бы ещо.Если возможно оставьте темп сложности таким же.
Thanks.


Хорошо, но есть один нюанс. Нажми в Common Dialog Cancel. Посмотри, как на это среагирует форма. Если нормально, считай задание выполненым, а если нет - поищи путь обхода возникающей ошибки;)

269
18 марта 2004 года
Greenering
892 / / 04.02.2003
Цитата:
Originally posted by mhaturov

Хорошо, но есть один нюанс. Нажми в Common Dialog Cancel. Посмотри, как на это среагирует форма. Если нормально, считай задание выполненым, а если нет - поищи путь обхода возникающей ошибки;)


mhaturov, срочно переименовывайся в "Великого учителя" :)

258
18 марта 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Greenering

mhaturov, срочно переименовывайся в "Великого учителя" :)



Ему нужно присвоить звание - сэнсей и пусть он высвечивается вместо Мега-флудер.... тем более mhaturov'у надо срочно написать еще одно сообщение, чтобы день не был испорчен :)

266
18 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by SergeySV


Ему нужно присвоить звание - сэнсей и пусть он высвечивается вместо Мега-флудер.... тем более mhaturov'у надо срочно написать еще одно сообщение, чтобы день не был испорчен :)


Ну вы там пока не звания мне присваивайте, а с CommonDilog'ом разбирайтесь;) :D .
Кстати, следующая задачка будет на создание массива контролов. Потом мы изучим работу со строками, преобразования типов, стеки и в конце "1 курса" надеюсь, что мы все вместе напишем калькулятор - классическая задачка со школьных олимпеад. Я, кстати, в своё время с ней не справился;)

1.8K
19 марта 2004 года
Syama
97 / / 01.03.2004
Хорошо, но есть один нюанс. Нажми в Common Dialog Cancel. Посмотри, как на это среагирует форма. Если нормально, считай задание выполненым, а если нет - поищи путь обхода возникающей ошибки

Да все работает:)



Цитата:
Originally posted by mhaturov

Ну вы там пока не звания мне присваивайте, а с CommonDilog'ом разбирайтесь;) :D .
Кстати, следующая задачка будет на создание массива контролов. Потом мы изучим работу со строками, преобразования типов, стеки и в конце "1 курса" надеюсь, что мы все вместе напишем калькулятор - классическая задачка со школьных олимпеад. Я, кстати, в своё время с ней не справился;)



Ждем задачку

266
19 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Syama
Хорошо, но есть один нюанс. Нажми в Common Dialog Cancel. Посмотри, как на это среагирует форма. Если нормально, считай задание выполненым, а если нет - поищи путь обхода возникающей ошибки

Да все работает:)





Ждем задачку



Создай форму, на которой будут 2 кнопки. Одна в правом углу формы, другая - в левом. При "клике" на левую кнопку под правой должнв возникать ещё одна кнопку. При следующем - ещё одна. И т.д. Сколько "кликов" по левой кнопке, столько добавляется кнопок справа.
При "клике" по правой кнопке, она "должна исчезать". Тоесть, кнопка должна выгружаться из памяти (подумай - тут хтиро можно сделать). На её место должна становиться следующая.
Правые кнопки должнв иметь кэпшны "Кнопка 1", "Кнопка 2" и т.д.
Справишься?
Если будут проблемы - обязательно помогу.

319
19 марта 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by mhaturov


Создай форму, на которой будут 2 кнопки. Одна в правом углу формы, другая - в левом. При "клике" на левую кнопку под правой должнв возникать ещё одна кнопку. При следующем - ещё одна. И т.д. Сколько "кликов" по левой кнопке, столько добавляется кнопок справа.
При "клике" по правой кнопке, она "должна исчезать". Тоесть, кнопка должна выгружаться из памяти (подумай - тут хтиро можно сделать). На её место должна становиться следующая.
Правые кнопки должнв иметь кэпшны "Кнопка 1", "Кнопка 2" и т.д.
Справишься?
Если будут проблемы - обязательно помогу.


а если все кнопки не влезают на диалог??

266
20 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by xelos

а если все кнопки не влезают на диалог??


Ну то, что кнопки не будут помещаться, думаю не важно - на мой взгляд важно научиться работать с динамическими массивами контролов.
Хотя, если у Вас есть предложение - то дополните задание им. Мы же, всё же, как-никак все вместе помогаем друг другу:) .
Вобщем, лучше, думаю, сделать так. Пока отработать момент подгрузки и выгрузки контролов. Потом дать задачку на ресайз, а потом попробовать свои силы в работе со скроллингом.
На мой взгляд, для новичков разбирать такие вещи по шагам проще и информативнее, нежели грузить их сразу большим объёмом работ.
Я, например, имею целью как бы на примерах заданий по шагам написать проект (в данном случае калькулятора). Тоесть, реализовать всё так, как в реальной рабочей обстановке я сам внедряю в проект новые приёмы и технологии. Сначала делаю тестовый проект, на котором в черновом варианте отрабатываю всё, что мне нужно. Ищу способы новые, изучаю свойства, методы, которые мне стали доступны после внедрения новинки. После этого разбиваю задачку на кусочки и реализую каждый из них. А под конец собираю весь этот "конструктор".
Так же и в данном случае. Единственное, задачку на шажки отдельные разбиваю за уважаемых новичков пока я. Но скоро, надеюсь, это делать будут уже они сами.:)

1.8K
24 марта 2004 года
Syama
97 / / 01.03.2004
Цитата:
Originally posted by mhaturov

Ну то, что кнопки не будут помещаться, думаю не важно - на мой взгляд важно научиться работать с динамическими массивами контролов.
Хотя, если у Вас есть предложение - то дополните задание им. Мы же, всё же, как-никак все вместе помогаем друг другу:) .
Вобщем, лучше, думаю, сделать так. Пока отработать момент подгрузки и выгрузки контролов. Потом дать задачку на ресайз, а потом попробовать свои силы в работе со скроллингом.
На мой взгляд, для новичков разбирать такие вещи по шагам проще и информативнее, нежели грузить их сразу большим объёмом работ.
Я, например, имею целью как бы на примерах заданий по шагам написать проект (в данном случае калькулятора). Тоесть, реализовать всё так, как в реальной рабочей обстановке я сам внедряю в проект новые приёмы и технологии. Сначала делаю тестовый проект, на котором в черновом варианте отрабатываю всё, что мне нужно. Ищу способы новые, изучаю свойства, методы, которые мне стали доступны после внедрения новинки. После этого разбиваю задачку на кусочки и реализую каждый из них. А под конец собираю весь этот "конструктор".
Так же и в данном случае. Единственное, задачку на шажки отдельные разбиваю за уважаемых новичков пока я. Но скоро, надеюсь, это делать будут уже они сами.:)



Даааааа,признаюсь не могу справится:)
Помагите.Если можно подсказка.

266
24 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Syama


Даааааа,признаюсь не могу справится:)
Помагите.Если можно подсказка.


А в чём загвоздка?
Не знаешь, как динамически создать кнопку?
Знать так, тут будем использовать самый простой способ.
Создай форму (в VB, но не VBA!). В верхнем левом углу её помести кнопку. Назови её, например, CbAdd. В правом верхнем помести кнопку и назови её, например, CbNew и присвой ей индекс 0. (В свойствах она будет теперь отобажаться как CbNew(0) CommandButton).
Потом посмотри по Help, как работать с командами Load и Unload - если не разберёшься по Help'у, спрашивай, что конкретно не понятно. Но полностью код давать пока не буду, дабы ты сам разобрался - так полезнее будет.:)

1.8K
27 марта 2004 года
Syama
97 / / 01.03.2004
Dim Des As Integer
Private Sub cmdadd_click()
If Des = 0 Then Des = 1
Des = Des + 1
Load knopka(Des)
knopka(0).SetFocus
knopka(Des).Top = knopka(Des - 1).Top + 600
knopka(Des).Visible = True
knopka(Des).Caption = "Knopka"
End Sub
Private Sub cmdClose_click()
Unload Me

End Sub

Private Sub cmdDelete_click()
Unload knopka(Des)
Des = Des - 1
knopka(0).SetFocus

End Sub
========================================
Napisal tu proqu:)(spasibo vam)
Jdu esho zadachi . Esli mojno zadach o peremennix(variables).No ochen proshu ne ochen trudniy.
319
28 марта 2004 года
xelos
577 / / 27.02.2003
Вопрос к знатокам VB: как определить обработчики к динамически созданным кнопкам? Т.е. если я переформулирую задачу - смысл тот же, только теперь в caption пишем номер кнопки, и надо, чтобы удаление и добавление кнопок производилось по последним кнопкам в столбце? На VC++ я знаю как это можно сделать, а на VB теряюсь вот...

насчет переменных...
Создай 1 кнопку и 1 объект для вывода текста (можно static, например). в обработчике нажатия кнопки используй одну локальную переменную. при нажатии на кнопку в объекте выводи количество нажатий на кнопку. ОБЯЗАТЕЛЬНОЕ УСЛОВИЕ: глобальные переменные использовать нельзя.

вторая задача - создай функцию, в которой вычисляешь корни уравнения второй степени (их 2, насколько мы помним из курса школьной математики, если их нет, то необходимо, чтобы функция это определяла). на форме создай объекты для ввода 3-х коэффициентов для уравнения и один объект для вывода результата. при нажатии кнопки ты вызываешь функцию для рассчета корней, что ты сделал в самом начале и выводишь результат в объект для этого предназначенный. Нужно обойтись только локальными переменными.


P.S. глобальная переменная - это переменная, к которой ты можешь обратится из любой функции программы, они обычно объявляются в начале программы. такая переменная создается при загрузке программы и уничтожается при ее завершении.
локальная переменная - переменная, объявленная в теле функции, она доступна только внутри функции,за ее пределами она не существует, т.к. создается при входе в функцию и уничтожается при завершении функции.
266
29 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Syama
Dim Des As Integer
Private Sub cmdadd_click()
If Des = 0 Then Des = 1
Des = Des + 1
Load knopka(Des)
knopka(0).SetFocus
knopka(Des).Top = knopka(Des - 1).Top + 600
knopka(Des).Visible = True
knopka(Des).Caption = "Knopka"
End Sub
Private Sub cmdClose_click()
Unload Me

End Sub

Private Sub cmdDelete_click()
Unload knopka(Des)
Des = Des - 1
knopka(0).SetFocus

End Sub
========================================
Napisal tu proqu:)(spasibo vam)
Jdu esho zadachi . Esli mojno zadach o peremennix(variables).No ochen proshu ne ochen trudniy.


Хорошо. С задачкой справился.
Для примера хочу теперь скинуть самый простой вариант такого кода, написанный мною - сравни свой и мой коды обязательно, а потом переходи к задачке, которую тебе уважаемый xelos подкинул. Задачка очень интересная...
Вот пример моего кода:

Код:
Private Sub CbLoad_Click()
'МАХ Клик по кнопке загрузки кнопки
 
 'МАХ Если у нас, типа, "выгружена" 0 - кнопка
 If CbUnload.UBound = CbUnload.LBound And Not CbUnload(CbUnload.LBound).Visible Then
  CbUnload(CbUnload.LBound).Visible = True
  Exit Sub
 End If
 'МАХ Подгружаем кнопку
 Load CbUnload(CbUnload.Count)
 'МАХ Помещаем её, куда надо
 CbUnload(CbUnload.UBound).Move CbUnload(CbUnload.LBound).Left, _
                                CbUnload(CbUnload.UBound - 1).Top + _
                                CbUnload(CbUnload.UBound - 1).Height + 50, _
                                CbUnload(CbUnload.LBound).Width, _
                                CbUnload(CbUnload.LBound).Height
 'МАХ Присваиваем кзпшн
 CbUnload(CbUnload.UBound).Caption = "Кнопка № " & CbUnload.UBound
 
 CbUnload(CbUnload.UBound).Visible = True
 
End Sub

Private Sub CbUnload_Click(Index As Long)
'МАХ Клик по кнопке выгрузки (самый простой алгоритм)
Dim TempArr() As String 'МАХ Массив для хранения кэпшнов
Dim I As Long 'МАХ Счётчик циклов
Dim B As Long 'МАХ Счётчик циклов
 
  'МАХ Если у нас 1 кнопка
  If CbUnload.UBound = CbUnload.LBound And CbUnload(CbUnload.LBound).Visible Then
   CbUnload(CbUnload.LBound).Visible = False
   Exit Sub
  End If
  'МАХ Несмотря на то, что можно выгружать любой контрол, мы, в _
   целях облегчения работы с массивом в дальнейшем _
   и избежания ошибок, будем выгружать последний контрол, но создавать _
   видимость выгрузки интересующего нас
   
   'МАХ Переразмечаю массив
   ReDim TempArr(CbUnload.UBound - Index)
   
   'МАХ Записываю все кэпшны в массив
   I = Index + 1
   B = 0
   While I <= CbUnload.UBound
    TempArr(B) = CbUnload(I).Caption
    I = I + 1
    B = B + 1
   Wend
   
   'МАХ Убиваю контрол
   Unload CbUnload(CbUnload.UBound)
   
   'МАХ Восстанавливаем кэпшны
   B = 0
   For I = Index To CbUnload.UBound
    CbUnload(I).Caption = TempArr(B)
    B = B + 1
   Next
   
End Sub

P.S. В процедуре CbUnload_Click есть возможность вместо 2 циклов и массива избавиться от массива и использовать 1 цикл. Я специально чуть - чуть "не дописал" код, чтобы, если у тебя будет время, ты мог подумать, как оптимизировать эту процедуру...
319
29 марта 2004 года
xelos
577 / / 27.02.2003
Так как там с обработчиками для динамически созданных кнопок?
1.8K
30 марта 2004 года
Syama
97 / / 01.03.2004
Цитата:
Originally posted by mhaturov

Хорошо. С задачкой справился.
Для примера хочу теперь скинуть самый простой вариант такого кода, написанный мною - сравни свой и мой коды обязательно, а потом переходи к задачке, которую тебе уважаемый xelos подкинул. Задачка очень интересная...
Вот пример моего кода:
Код:
Private Sub CbLoad_Click()
'МАХ Клик по кнопке загрузки кнопки
 
 'МАХ Если у нас, типа, "выгружена" 0 - кнопка
 If CbUnload.UBound = CbUnload.LBound And Not CbUnload(CbUnload.LBound).Visible Then
  CbUnload(CbUnload.LBound).Visible = True
  Exit Sub
 End If
 'МАХ Подгружаем кнопку
 Load CbUnload(CbUnload.Count)
 'МАХ Помещаем её, куда надо
 CbUnload(CbUnload.UBound).Move CbUnload(CbUnload.LBound).Left, _
                                CbUnload(CbUnload.UBound - 1).Top + _
                                CbUnload(CbUnload.UBound - 1).Height + 50, _
                                CbUnload(CbUnload.LBound).Width, _
                                CbUnload(CbUnload.LBound).Height
 'МАХ Присваиваем кзпшн
 CbUnload(CbUnload.UBound).Caption = "Кнопка № " & CbUnload.UBound
 
 CbUnload(CbUnload.UBound).Visible = True
 
End Sub

Private Sub CbUnload_Click(Index As Long)
'МАХ Клик по кнопке выгрузки (самый простой алгоритм)
Dim TempArr() As String 'МАХ Массив для хранения кэпшнов
Dim I As Long 'МАХ Счётчик циклов
Dim B As Long 'МАХ Счётчик циклов
 
  'МАХ Если у нас 1 кнопка
  If CbUnload.UBound = CbUnload.LBound And CbUnload(CbUnload.LBound).Visible Then
   CbUnload(CbUnload.LBound).Visible = False
   Exit Sub
  End If
  'МАХ Несмотря на то, что можно выгружать любой контрол, мы, в _
   целях облегчения работы с массивом в дальнейшем _
   и избежания ошибок, будем выгружать последний контрол, но создавать _
   видимость выгрузки интересующего нас
   
   'МАХ Переразмечаю массив
   ReDim TempArr(CbUnload.UBound - Index)
   
   'МАХ Записываю все кэпшны в массив
   I = Index + 1
   B = 0
   While I <= CbUnload.UBound
    TempArr(B) = CbUnload(I).Caption
    I = I + 1
    B = B + 1
   Wend
   
   'МАХ Убиваю контрол
   Unload CbUnload(CbUnload.UBound)
   
   'МАХ Восстанавливаем кэпшны
   B = 0
   For I = Index To CbUnload.UBound
    CbUnload(I).Caption = TempArr(B)
    B = B + 1
   Next
   
End Sub

P.S. В процедуре CbUnload_Click есть возможность вместо 2 циклов и массива избавиться от массива и использовать 1 цикл. Я специально чуть - чуть "не дописал" код, чтобы, если у тебя будет время, ты мог подумать, как оптимизировать эту процедуру...



Budet zdelano,komandir:)

266
30 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by xelos
Вопрос к знатокам VB: как определить обработчики к динамически созданным кнопкам? Т.е. если я переформулирую задачу - смысл тот же, только теперь в caption пишем номер кнопки, и надо, чтобы удаление и добавление кнопок производилось по последним кнопкам в столбце? На VC++ я знаю как это можно сделать, а на VB теряюсь вот...


Немного не понял вопрос... К динамически созданным кнопкам можно обращаться так же, как и к статическим. По имени и индексу. Если есть желание, можно и через API попариться, токмо в этом нет смысла...:)

319
30 марта 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by mhaturov

Немного не понял вопрос... К динамически созданным кнопкам можно обращаться так же, как и к статическим. По имени и индексу. Если есть желание, можно и через API попариться, токмо в этом нет смысла...:)


для обычных кнопок есть обработчик нажатия - OnClicked или что-то в этом духе, он создается когда на кнопку в редакторе диалога нажимаешь. Теперь в программе я создаю кнопки динамически и хочу чтобы каждая кнопка свое действие выполняла при нажатии. Как мне определить процедуры, вызывающиеся при нажатии каждой кнопки и как связать их с этими динамическими кнопками?

266
30 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by xelos

для обычных кнопок есть обработчик нажатия - OnClicked или что-то в этом духе, он создается когда на кнопку в редакторе диалога нажимаешь. Теперь в программе я создаю кнопки динамически и хочу чтобы каждая кнопка свое действие выполняла при нажатии. Как мне определить процедуры, вызывающиеся при нажатии каждой кнопки и как связать их с этими динамическими кнопками?


Разберём на примере кобытия Click для кнопки.
Когда у тебя есть простая кнопка с именем, например Button, то событие клика у неё вызывает процедуру Button_Click().
Если у тебя кнопка из массива, то событие генерируется такое же, но с передачей по ссылке индекса кнопки Button_Click(Index as Integer).
Тут из-за внутреннего объявления события Click с получением ByRef Index типа Integer, изменить, к сожалению, Button_Click(Index as Integer) на Button_Click(Index as Long) нельзя. Но это - отступление от темы.
Обрабатывать конкретную кнопку ты можешь по интедку. Тоесть, все клики на кнопки из массива генерируют вызов одной процедуры Button_Click(Index as Integer), но уже какая именно кнопка нажата, ты можёшь посмотреть по переменной Index. Напрмер, есть у тебя 3 кнопки Button. Тебе нужно повесить разные действия на них. Пишешь:

Код:
Private Sub Button_Click(Index as Integer)
'МАХ Обработка клика по кнопке из массива
 Select Case Index
  Case 0 'МАХ Нажата 1 кнопка из элементов
   действие 1
  Case 1 'МАХ Нажата 2 кнопка из элементов
   действие 2
  Case 2 'МАХ Нажата 3 кнопка из элементов
   действие 3
 End Select
End Sub

Надеюсь, понятно описал. Если есть вопросы, скинь сюда - постараюсь уточнить неясности.
319
30 марта 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by mhaturov

Разберём на примере кобытия Click для кнопки.
Когда у тебя есть простая кнопка с именем, например Button, то событие клика у неё вызывает процедуру Button_Click().
Если у тебя кнопка из массива, то событие генерируется такое же, но с передачей по ссылке индекса кнопки Button_Click(Index as Integer).
Тут из-за внутреннего объявления события Click с получением ByRef Index типа Integer, изменить, к сожалению, Button_Click(Index as Integer) на Button_Click(Index as Long) нельзя. Но это - отступление от темы.
Обрабатывать конкретную кнопку ты можешь по интедку. Тоесть, все клики на кнопки из массива генерируют вызов одной процедуры Button_Click(Index as Integer), но уже какая именно кнопка нажата, ты можёшь посмотреть по переменной Index. Напрмер, есть у тебя 3 кнопки Button. Тебе нужно повесить разные действия на них. Пишешь:
Код:
Private Sub Button_Click(Index as Integer)
'МАХ Обработка клика по кнопке из массива
 Select Case Index
  Case 0 'МАХ Нажата 1 кнопка из элементов
   действие 1
  Case 1 'МАХ Нажата 2 кнопка из элементов
   действие 2
  Case 2 'МАХ Нажата 3 кнопка из элементов
   действие 3
 End Select
End Sub

Надеюсь, понятно описал. Если есть вопросы, скинь сюда - постараюсь уточнить неясности.


а принципе понятно, только маленькое уточнение - если массив кнопок я создал динамически, с именем MyName(20) - обработчик будет MyName_Click? он автоматически определится как такой? в смысле, что в редактор диалогов я не залезаю для динамических кнопок.

266
30 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by xelos

а принципе понятно, только маленькое уточнение - если массив кнопок я создал динамически, с именем MyName(20) - обработчик будет MyName_Click? он автоматически определится как такой? в смысле, что в редактор диалогов я не залезаю для динамических кнопок.


Тут всё просто.
1. Ты можешь создавать элемент поздним связыванием. Этот случай мы сейчас не рассматриваем, но он аналогичен тому, что будет описан ниже.
2. Ты кладёшь элемент на форму. При этом у него нет индекса и событие для него, например, Button_Click().
Чтобы на его основе тебе создать масив, тебе можно:
а). На форме скопировать и вставить этот элемент, или создать такой же и присвоить ему такое же имя. При этом среда спросит, уверен ли ты, что создаёшь массив. При положительном ответе, среда автоматом присвоит индекс 0 1 элементу, а второму - индекс 1.
б). Можешь сам в редакторе присовить элементу индекс 0. Остальные элементы ты тогда сможешь подгружать, создавая экземпляры 0 объекта, присваивая им индексы.
В любом случае, если у тебя есть хоть 1 элемент с индексом на форме, среда автоматом создаёт для его событие Button_Click (Index as Integer). Тоесть, для того, чтобы это событие возникало, тебе нужно иметь хоть 1 элемент с индексом. И всё.
После этого ты можешь хоть 100 элементов создать (у VB ограничение начинается по-моему, где-то около 1000, если не больше, элементов (до "чистого" Integer это не дотягивает, к сожалению)). По какому из них не кликай, у тебя возникает одно событие Button_Click, вызвающеее одну процедуру Button_Click (Index as Integer), в которой Index и будет соответствовать твоему элементу.

319
30 марта 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by mhaturov

Тут всё просто.
1. Ты можешь создавать элемент поздним связыванием. Этот случай мы сейчас не рассматриваем, но он аналогичен тому, что будет описан ниже.
2. Ты кладёшь элемент на форму. При этом у него нет индекса и событие для него, например, Button_Click().
Чтобы на его основе тебе создать масив, тебе можно:
а). На форме скопировать и вставить этот элемент, или создать такой же и присвоить ему такое же имя. При этом среда спросит, уверен ли ты, что создаёшь массив. При положительном ответе, среда автоматом присвоит индекс 0 1 элементу, а второму - индекс 1.
б). Можешь сам в редакторе присовить элементу индекс 0. Остальные элементы ты тогда сможешь подгружать, создавая экземпляры 0 объекта, присваивая им индексы.
В любом случае, если у тебя есть хоть 1 элемент с индексом на форме, среда автоматом создаёт для его событие Button_Click (Index as Integer). Тоесть, для того, чтобы это событие возникало, тебе нужно иметь хоть 1 элемент с индексом. И всё.
После этого ты можешь хоть 100 элементов создать (у VB ограничение начинается по-моему, где-то около 1000, если не больше, элементов (до "чистого" Integer это не дотягивает, к сожалению)). По какому из них не кликай, у тебя возникает одно событие Button_Click, вызвающеее одну процедуру Button_Click (Index as Integer), в которой Index и будет соответствовать твоему элементу.


все понятно, спасибо большое! в VC++, вроде можно аналогично действовать, кроме этого есть возможность перехватывать сообщения на уровне окна, на котором расположены элементы и обрабатывать их в обработчике событий окна, если надо - то отправлять их дальше, элементам управления (через PreTranslateMessage).

266
30 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by xelos

все понятно, спасибо большое! в VC++, вроде можно аналогично действовать, кроме этого есть возможность перехватывать сообщения на уровне окна, на котором расположены элементы и обрабатывать их в обработчике событий окна, если надо - то отправлять их дальше, элементам управления (через PreTranslateMessage).


В классическом VB это тоже - не проблема (через API) так как там все элементы управления это либо окна, либо окноподобные объекты. А вот в VBA это не везде прокатит. Для того же Access 2000 большинство контролов - не больше, чем картинка поверх отображаемой области. И даже хендл этой картинки поймать - больше чем биг проблем, так как зачастую его просто не существует!:{

266
30 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Syama


Budet zdelano,komandir:)


Я немного ошибся.
В Private Sub CbUnload_Click(Index As Long)
тип Long нужно заменить на Integer, иначе может вылетать ошибка - там передаётся на внутреннем уровне всё по ссылке, и при автоматическом преобразовании типов (неявном преобразовании так называемом) Windows может вываливать твой код в нечитаемую область памяти. С этим нужно быть очень внимательным - я когда в первый раз с этим столкнулся, очень долго парился. Ещё хуже было от того, что когда среда выпадает в Out of memory, или Memory culd not be read, то не только приложение "вылетает", но и вся среда. И приходится всё начинать заново.:{

1.8K
31 марта 2004 года
Syama
97 / / 01.03.2004
Цитата:
Originally posted by mhaturov

Я немного ошибся.
В Private Sub CbUnload_Click(Index As Long)
тип Long нужно заменить на Integer, иначе может вылетать ошибка - там передаётся на внутреннем уровне всё по ссылке, и при автоматическом преобразовании типов (неявном преобразовании так называемом) Windows может вываливать твой код в нечитаемую область памяти. С этим нужно быть очень внимательным - я когда в первый раз с этим столкнулся, очень долго парился. Ещё хуже было от того, что когда среда выпадает в Out of memory, или Memory culd not be read, то не только приложение "вылетает", но и вся среда. И приходится всё начинать заново.:{



huh, ya to podumala problema s proqoy
i vot esho ne ponel vot eto
[COLOR=blue]If CbUnload.UBound = CbUnload.LBound And CbUnload(CbUnload.LBound).Visible Then
CbUnload(CbUnload.LBound).Visible = False
[/COLOR]

1.8K
31 марта 2004 года
Syama
97 / / 01.03.2004
Цитата:
Originally posted by xelos

насчет переменных...
Создай 1 кнопку и 1 объект для вывода текста (можно static, например). в обработчике нажатия кнопки используй одну локальную переменную. при нажатии на кнопку в объекте выводи количество нажатий на кнопку. ОБЯЗАТЕЛЬНОЕ УСЛОВИЕ: глобальные переменные использовать нельзя.



Kak vseqda ne moqu s pervoqo raza,reshit zadachu.
mojet kak to pomojete?Ya peremennix ne davno chital,i pomoemu prosil vas o nix zadachu dat.
Problema v tom chto ne moqu generirovat code v bashke (men kajetsya chto et iz toqo chto ya novichok) kak vi schitayete tak i dayte podskazku

1.8K
31 марта 2004 года
Syama
97 / / 01.03.2004
Цитата:
Originally posted by mhaturov

. Я специально чуть - чуть "не дописал" код, чтобы, если у тебя будет время, ты мог подумать, как оптимизировать эту процедуру...



Voopsheta ya ne znayu nicheqo o optimizasiye,esli mojete podskajite kak et zdelat ,no poka kod ne dayte

319
31 марта 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by Syama


Kak vseqda ne moqu s pervoqo raza,reshit zadachu.
mojet kak to pomojete?Ya peremennix ne davno chital,i pomoemu prosil vas o nix zadachu dat.
Problema v tom chto ne moqu generirovat code v bashke (men kajetsya chto et iz toqo chto ya novichok) kak vi schitayete tak i dayte podskazku


подсказка: переменную в процедуре нужно объявить специальным способом, чтобы она сохраняла свое значение.

кода тебе надо написать всего 3 строчки

266
31 марта 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Syama


huh, ya to podumala problema s proqoy
i vot esho ne ponel vot eto
[COLOR=blue]If CbUnload.UBound = CbUnload.LBound And CbUnload(CbUnload.LBound).Visible Then
CbUnload(CbUnload.LBound).Visible = False
[/COLOR]


Знать так,
UBound и LBound - это границы массивов элементов (такие эе свойства есть и у масссивов данных).
UBound - верхняя граница,
LBound - нижняя граница,
Count - количестиво
Тоесть, если ц тебя 4 элемента CbUnload, с индексами от 0 до 3, то
CbUnload.LBound = 0
CbUnload.UBound = 3
CbUnload.Count = 4
Тоесть CbUnload(CbUnload.LBound) это в данном случае всё равно, что CbUnload(0), просто ссылка не по фиксированному индексу, а по вычисляемому гораздо универсальнее.

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