powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Цикл for для checkbox'ов
53 сообщений из 53, показаны все 3 страниц
Цикл for для checkbox'ов
    #34628163
Здрасти всем. Нужна помощь в след. вопросе: у меня в экселе 250 checkbox'ов и надо сделать цикл такого вида:
for i=1 to 250
checkbox i . visible=false
next i
Проблема заключается в том, что система не понимает, что такое checkbox i.
Помогите плиззз.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34628227
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
массив контролей
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34628263
Дело в том, что мой ник не случайно Почти Лузер. Объясните по подробнее и желательно с примером пжалста
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34628271
Дело в том, что мой ник не случайно Почти Лузер. Объясните по подробнее и желательно с примером пжалста
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34628392
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почти ЛузерДело в том, что мой ник не случайно Почти Лузер. Объясните по подробнее и желательно с примером пжалста

Хоть один честный. Это похвально, но тогда фоту надо было выставить

Ладно, к делу.
Прежде чем помощи просить надо показать свой пример.
Я понял так, что ты умудрился вставить в книгу или лист 250 чекбоксов! эта работа похвальна... для почти лузера...но сделать можно было проще создать массив контролов:

помещаешь один чек и его свойство Индекс делаешь равным хотя бы 0
потом надо создать процедуру вывода 249 оставшихся чексов

и тогда общаться с ними в твоей проце, но немного её изменив

for i=1 to 250
let checkbox( i).visible=false
next i

Надеюсь понятно, а если нет, поищи "массивы контролов"
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34628427
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ден ПрограммёрЭто похвально, но тогда фоту надо было выставитьАхтунг?

PS: По делу. Дело происходит в экселе, а он не поддерживает массивы контролов. Нужно юзать, если мне ни с кем не изменяет память, коллекцию Shapes. Поиск даст больше, эта тема не раз обсуждалась.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34628444
Фотография @TM@ROZчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знаю как в екселе, попробуй сам преобразовать.

в простом бейсике этоо делается так:

1. НЕ программный способ
создаётся первый чекбокс

в свойстве Index пишется первое значение ( у нас - 1)

создаётся второй чекбокс

в свойстве Index пишется второе значение ( у нас - 2)

и так оставшиеся 248 раз

код:
Код: plaintext
1.
2.
3.
For i =  1  to  250 
Сheckbox(i).Visible = False
Next i
2. Программный способ

создаётся ОДИН чекбокс

в свойстве Index пишется первое значение ( у нас - 1)

код для открытия формы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Form_Load()
For i =  2  to  250  ' первый элемент есть, начинаем со второго
Load checkbox(i)
checkbox(i).Visible = True
checkbox(i).Left = значение_положения_данного_чекбокса_от_левого_края_формы
checkbox(i).Top = значение_положения_данного_чекбокса_от_верхнего_края_формы
Next i
End Sub

Дальше - как обычно (пишешь где надо):
Код: plaintext
1.
2.
3.
For i =  1  to  250 
Сheckbox(i).Visible = False
Next i
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34628455
Фотография @TM@ROZчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока я писакал выяснилось, что массивов то нетути в екселе :) сорри
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34628456
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял речь идет о VBA? Там нет массива чекбоксов, как и любого контрола кажется (точно за все не помню). А выход - коллекция контролов. Примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
Dim x As Object
For Each x In Me.Controls
If TypeName(x) = "CheckBox" Then
x.visible=false
End If
Next x
Не проверял, может и не работает. На ходу пишу.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34628466
Фотография @TM@ROZчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, если чёт непонятно, Лузер, тогда гугли "VB коллекция"
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34628526
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только вот непонятно. 250 чекбоксов!!! Я бы это принял за психическую атаку и немедленно бы удалил этот файл.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34628559
Фотография @TM@ROZчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyMp...Я бы это принял за психическую атаку...
;)
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34628745
AndreyMpТолько вот непонятно. 250 чекбоксов!!! Я бы это принял за психическую атаку и немедленно бы удалил этот файл.

Да на самом деле это просто эл. тест.

Кроме этого обнаружил, что в свойсвах чекбоксов не индекса, поэтому ничего не получается, можа есть какие еще варианты?
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34628785
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для особо одаренных и наблюдательных повторяю еще раз: AntonariyДело происходит в экселе, а он не поддерживает массивы контролов. Нужно юзать, если мне ни с кем не изменяет память, коллекцию Shapes (если они на листе) . Поиск даст больше, эта тема не раз обсуждалась.Если на форме, коллекцию Controls.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34628865
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почти Лузер,
если речь об элементах управления, внедрённых в рабочий лист, то код может выглядеть так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub HideEmbeddedCheckboxes()
 Dim oOLEObjs As Excel.OLEObjects
 Dim o As Excel.OLEObject
 Dim i As Long
 Set oOLEObjs = ActiveSheet.OLEObjects
 For i =  1  To  250 
    Set o = oOLEObjs("Checkbox" & i)
    o.Visible = False
 Next i
 Set o = Nothing
 Set oOLEObjs = Nothing
End Sub
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34628991
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а если на форму, то я чуть ранее писал. Проверил, работает.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34629286
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БенедиктПочти Лузер,
если речь об элементах управления, внедрённых в рабочий лист, то код может выглядеть так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub HideEmbeddedCheckboxes()
 Dim oOLEObjs As Excel.OLEObjects
 Dim o As Excel.OLEObject
 Dim i As Long
 Set oOLEObjs = ActiveSheet.OLEObjects
 For i =  1  To  250 
    Set o = oOLEObjs("Checkbox" & i)
    o.Visible = False
 Next i
 Set o = Nothing
 Set oOLEObjs = Nothing
End Sub


Я бы использовал цикл без жестко заданного количества чекбоксов. Я бы также убрал Set o = Nothing, Set oOLEObjs = Nothing, поскольку это излишне:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub HideEmbeddedCheckboxes()
    Dim oOLEObjs As Excel.OLEObjects
    Dim o As Excel.OLEObject
    Dim objWsht As Worksheet
    
    Set objWsht = ThisWorkbook.Worksheets( 1 )
    Set oOLEObjs = ActiveSheet.OLEObjects
    
    For Each o In objWsht.OLEObjects
        o.Visible = Not o.progID = "Forms.CheckBox.1"
    Next o
    
End Sub
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34629317
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, к сожалению, код Бенедикта не будет работать, если давать индивидуальные имена чекбоксам, что часто ожидается в обычной практике кодирования.

Как вариант для любых OLE objects на листе:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Sub CommandButton1_Click()
    HideUnhideEmbeddedCheckboxes "Forms.CheckBox.1"
End Sub

Sub HideUnhideEmbeddedCheckboxes(ByVal pstrProgID As String)
    Dim oOLEObjs As Excel.OLEObjects
    Dim o As Excel.OLEObject
    Dim objWsht As Worksheet
    
    Set objWsht = ThisWorkbook.Worksheets( 1 )
    Set oOLEObjs = ActiveSheet.OLEObjects
    
    For Each o In objWsht.OLEObjects
        If o.progID = pstrProgID Then
            o.Visible = Not o.Visible
        End If
    Next o
    
End Sub
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34629321
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже короче:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub HideUnhideEmbeddedCheckboxes(ByVal pstrProgID As String)
    Dim oOLEObjs As Excel.OLEObjects
    Dim o As Excel.OLEObject

    Set oOLEObjs = ActiveSheet.OLEObjects
    
    For Each o In oOLEObjs
        If o.progID = pstrProgID Then
            o.Visible = Not o.Visible
        End If
    Next o
    
End Sub
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34629386
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConn,
1) В общем случае надо либо список имён элементов управления хранить, либо как-то признаки принадлежности группе, требующей обработки, им навешивать. Но это [пока для меня] выглядит усложнением задачи (ещё не понятно, правильно ли понятой).
2) Я предпочитаю сравнивать тип через TypeOf ... Is ...: TypeOf o.Object Is MSForms.Checkbox.
3) Set ... = Nothing я бы не убирал. Из педагогических соображений :)
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34629442
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, конечно. Группы, тэги и т.п. - ясное дело. Для этого я и использовал ProgID, чтобы указать на такую проблему. Насчет педагогических соображений. Как раз я бы убирал, т.к. это демонстрирует понимание манипулирования памятью в VB6 и раз и навсегда ставит крест на мифах и легендах о Set ... Nothing.

Еще раз о последнем. Я хочу сказать, что использование в данном контексте Set ... Nothing на самом деле ни плохо, ни хорошо. Это чисто вопрос стиля. Тут на самом деле нет смысла спорить. Я сам много лет так делал. Стиль есть стиль. Важно только понимать, что делать это необязательно.

Успехов
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34629480
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnДа, конечно. Группы, тэги и т.п. - ясное дело. Для этого я и использовал ProgID, чтобы указать на такую проблему. Насчет педагогических соображений. Как раз я бы убирал, т.к. это демонстрирует понимание манипулирования памятью в VB6 и раз и навсегда ставит крест на мифах и легендах о Set ... Nothing.

Еще раз о последнем. Я хочу сказать, что использование в данном контексте Set ... Nothing на самом деле ни плохо, ни хорошо. Это чисто вопрос стиля. Тут на самом деле нет смысла спорить. Я сам много лет так делал. Стиль есть стиль. Важно только понимать, что делать это необязательно.

Успехов

А мона вопрос, а если set ...=Nothing'ом я "обнуляю" ненужные в данный момент рекордсеты, это хорошо или плохо?
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34629522
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если черeз несколько линий кода его исполнение перейдет в другой блок, где ваш рекордсет, видимый только в своем блоке, уже все равно невидим, то можно обойтись без Set ... Nothing. Он умрет и без вашей помощи. Вот в аварийном завершении процедуры я бы предусмотрел Set ... Nothing. Если возникла ошибка, то мне лично будет трудно сказать, что там произойдет с памятью. Т.е.:

On error goto MethodError

.....
....

MethodError:

If Err.Number <> 0 then
....
Set ... Nothing
end if
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34629543
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnЕсли черeз несколько линий кода его исполнение перейдет в другой блок, где ваш рекордсет, видимый только в своем блоке, уже все равно невидим, то можно обойтись без Set ... Nothing. Он умрет и без вашей помощи. Вот в аварийном завершении процедуры я бы предусмотрел Set ... Nothing. Если возникла ошибка, то мне лично будет трудно сказать, что там произойдет с памятью. Т.е.:

On error goto MethodError

.....
....

MethodError:

If Err.Number <> 0 then
....
Set ... Nothing
end if


Мало что понял!!!
У меня несколько глобальных (на уровне формы) рекордсетов. И для экономии памяти и неуменьшения быстродействия операций, если данные из одного рекорда не нужны в данный момент я его обнуляю, и заполняю и работаю с другим, который нужен именно сейчас.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34629552
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мои объяснения не затрагивали глобально определенных объектов. Касательно именно рекордсетов: в своей практике мне не приходилось еще сталкиваться с оправданностью их декларирования глобально.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34629560
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, у вас они определены не глобально, а Private, раз на уровне формы, что, впрочем, мало что меняет.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34629562
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnМои объяснения не затрагивали глобально определенных объектов. Касательно именно рекордсетов: в своей практике мне не приходилось еще сталкиваться с оправданностью их декларирования глобально.

Мне интересно? а как тогда работать с базами данных, добавлять-удалять-изменять если объект создан лишь на уровне процы
А если через рекорд связь идёт с ДатаКонтролом. Вот мне интересно это знать. Как с БД работают без постоянных рекордов на уровне формы
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34629569
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnКстати, у вас они определены не глобально, а Private, раз на уровне формы, что, впрочем, мало что меняет.

Даже если так!
Мне всё равно приходится в силу ограничений на ядро Джет обновлять рекорды.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34629609
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, это серьезный вопрос, касающийся дизайна проекта и уже не этой темы. Я не в состоянии по времени углубляться и в эту дискуссию. Могу лишь сказать, что я участвовал во многих очень и не очень больших проектах с разными базами. Когда я только начинал, я пытался использовать Recordets на уровне форм и выше. Это жестоко пресекалось отделом качества и на ревью проекта другими разработчиками, т.к. шло вразрез с принципом инкапсулирования и прочими вещами. Можно представить Recordset на уровне специализированного класса. Такой Recordset должен был бы быть при этом очень "dedicated" и скорее всего возвращаться как одно из свойств класса. Его инкарнация и убиение при этом должны поддерживаться в соответствующих событиях класса. Смысл в том, что использование одного и того же объекта в разных методах для разных целей уже не поощряется. Ваш же случай мне неизвестен.

Успехов
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34629686
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConn,
я знаю, что ты знаешь, ты знаешь, что я знаю...
это не совсем вопрос стиля. Это, в большей мере, вопрос управления моментом и порядком уничтожения объектов, и самодисциплины (я отчётливо это почувствовал, начав, после VB, работать с COM на C, потом на C++). О стиле. Некоторые программисты (зависит от опыта, иногда от школы (индусы, например)) предпочитают метод Copy-Paste. Вот и пусть копипастят блок кода, в котором объекты (которые могут быть "тяжёлыми") явно уничтожены. О педагогике. Лучше заложить на уровне рефлекса - закончил пользоваться ресурсом, освободи явно (CComPtr не спасает - деструктор вызывается при выходе за область видимости. Этот выход может быть далеко, путь к нему может быть долгим, с ошибками...).

Вот к теме (или не совсем), в качестве почти что шутки. Есть процедура, который обращается к базе данных через DAO. После обращения к базе надо осводить память, в том числе надо выгрузить библиотеку DAO:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Declare Sub CoFreeUnusedLibraries Lib "ole32" ()
'...
Public Sub ProcessDatabase()
 Dim db As DAO.Database
 Set db = DBEngine.OpenDatabase(база, параметры открытия)
 '... работа с БД
 db.Close
 Set xxx = Nothing
 Set yyy = Nothing
 CoFreeUnusedLibraries
End Sub
Что надо написать вместо xxx и yyy, чтобы библиотека DAO была выгружена?
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34629700
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В VB6 явное уничтожение внутренних объектов перед выходом из процедуры не требуется. Это все, что я хотел сказать. С, С++ и прочее - вне форума. Вопрос самодисциплины и пр. - это тоже другая тема. С точки зрения исполнения кода - есть это или нет - без разницы. В этом смысле это есть вопрос стиля.

Касательно ДАО. Я не знаю, как можно выгрузить целую библиотеку, присоединенную к проекту на стадии дизайна.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34632081
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConn,
IDE и компилятору нужна не сама библиотека, а библиотека типов (другое дело, библиотека типов часто лежит в ресурсах исполняемого файла библиотеки). Это не библиотека со статической компоновкой (.lib), а ActiveX D LL. Процесс, в котором выполняется код проекта (отдельный .exe, или VB6.EXE при отладке), подгружает библиотеку динамически при первом вызове функции из библиотеки; выгрузить библиотеку тоже можно динамически. Для этого надо закрыть объекты и убить ссылки, чтобы вызов точки входа DllCanUnloadNow мог вернуть S_OK, и библиотека могла быть выгружена. Итого, перед вызовом CoFreeUnusedLibraries должны стоять строки:
Код: plaintext
1.
 Set db = Nothing
 Set DBEngine = Nothing
, причём вторая строка выгрузит DLL, которую использовала DAO для работы с базой данных конкретного формата, а CoFreeUnusedLibraries уже выгрузит саму библиотеку DAO.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34632284
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БенедиктVladConn,
IDE и компилятору нужна не сама библиотека, а библиотека типов (другое дело, библиотека типов часто лежит в ресурсах исполняемого файла библиотеки). Это не библиотека со статической компоновкой (.lib), а ActiveX D LL. Процесс, в котором выполняется код проекта (отдельный .exe, или VB6.EXE при отладке), подгружает библиотеку динамически при первом вызове функции из библиотеки; выгрузить библиотеку тоже можно динамически. Для этого надо закрыть объекты и убить ссылки, чтобы вызов точки входа DllCanUnloadNow мог вернуть S_OK, и библиотека могла быть выгружена. Итого, перед вызовом CoFreeUnusedLibraries должны стоять строки:
Код: plaintext
1.
 Set db = Nothing
 Set DBEngine = Nothing
, причём вторая строка выгрузит DLL, которую использовала DAO для работы с базой данных конкретного формата, а CoFreeUnusedLibraries уже выгрузит саму библиотеку DAO.


Спасибо ещё разок, Бенедикт, очень полезная информация про объекты! А Вы можете ещё просветить по вопросу объектных переменных? Хотя нет, лучше поделитесь ссылочками, коли не трудно?
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34632707
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Библиотеки типов (type library) имеют расширение tlb. Они ничего не загружают, а раз так, то и выгрузить их никак не получится - выгружать просто нечего. Что касается Set ... Nothing - опять же могу повторить - для процедурно объявленных объектов в этом нет надобности.

Ден Программёр, касательно "объектных переменных" - на мой взгляд, лучше всего начать надо с изучения классов. Именно они и есть суть того, что потом становится объектом. К сожалению, все мои ресурсы - англоязычные, я не знаю, какие русскоязычные ресурсы вам отрекомендовать.

Вот здесь (English, sorry!):

How to create classes and objects in Visual Basic .NET or in Visual Basic 2005

http://support.microsoft.com/kb/307210


неплохой вводный курс.

Одно из основных отличий между классами (читай, объектами) в VB6 и VB.NET это отсутствие конструктора в первом (то, что исполняется при употреблении New). Есть много других отличий, например, отсутствие Set в VB.NET (сравни objMyObj = Nothing и Set objMyObj = Nothing). Есть много других принципиальных отличий.

Я бы строго рекомендовал изучение классов начать сразу с объектно-ориентированного программирования:

Object-Oriented Programming in Visual Basic

http://msdn2.microsoft.com/en-us/library/b86b82w0(VS.80).aspx


Надеюсь, я дал полезную информацию для того, чтобы начать изучение "объектных переменных".


Успехов.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34632740
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ден Программёр,

Мне кажется, я нашел для вас русскоязычный ресурс по объектам:

Основные понятия языка Visual Basic
Создание и использование объектов

http://msdn.microsoft.com/library/rus/default.asp?url=/library/rus/vbcn7/html/vbconcreatingandusingobjects.asp

Успехов
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34632753
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnБиблиотеки типов (type library) имеют расширение tlb. Они ничего не загружают, а раз так, то и выгрузить их никак не получится - выгружать просто нечего. Что касается Set ... Nothing - опять же могу повторить - для процедурно объявленных объектов в этом нет надобности.

Ден Программёр, касательно "объектных переменных" - на мой взгляд, лучше всего начать надо с изучения классов. Именно они и есть суть того, что потом становится объектом. К сожалению, все мои ресурсы - англоязычные, я не знаю, какие русскоязычные ресурсы вам отрекомендовать.

Вот здесь (English, sorry!):

How to create classes and objects in Visual Basic .NET or in Visual Basic 2005

http://support.microsoft.com/kb/307210


неплохой вводный курс.

Одно из основных отличий между классами (читай, объектами) в VB6 и VB.NET это отсутствие конструктора в первом (то, что исполняется при употреблении New). Есть много других отличий, например, отсутствие Set в VB.NET (сравни objMyObj = Nothing и Set objMyObj = Nothing). Есть много других принципиальных отличий.

Я бы строго рекомендовал изучение классов начать сразу с объектно-ориентированного программирования:

Object-Oriented Programming in Visual Basic

http://msdn2.microsoft.com/en-us/library/b86b82w0(VS.80).aspx


Надеюсь, я дал полезную информацию для того, чтобы начать изучение "объектных переменных".


Успехов.

Хотя я вроде просил помощи у Бенедикта, но всё же спасибо, хотя томик про ВБ 6 лежит перед носом и там полно про классы и ООП, но то, что там описано, пока до меня струдом идёт, хотя общую схему я понял.
Спасибо, вобщем!
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34632766
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То, что доходит с трудом - это вполне нормально. Со временем, оно все устаканивается, если использовать.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34632790
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnТо, что доходит с трудом - это вполне нормально. Со временем, оно все устаканивается, если использовать.

спасибо, будем, будем! куда нам деться?-)

Модератор: Просьба не оффтопить. Вы своими вопросами уводите топик слишком далеко от его начальной темы, что не может удовлетворять автора. Прошу в дальнейшем для своих вопросов создавать отдельные темы.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34634432
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ден ПрограммёрА Вы можете ещё просветить по вопросу объектных переменных? Хотя нет, лучше поделитесь ссылочками, коли не трудно?Ссылки на русскоязычные ресурсы не знаю.

По англоязычным. Главный источник - MSDN Library. К сожалению, она в процессе перехода с msdn.microsoft.com на msdn2.microsoft.com, поэтому навигация может не полностью работать. Глава, где описывается работа с объектами в VB6, называется Visual Basic Concepts. Programming with Objects . Лучше найти старый (~1999-2001) выпуск MSDN на CD. Другой источник - книги из коробочных версий VB (Pro, Enterprise Edition). Вторичным источником можно взять архивы Visual Basic Programers Journal , но надо рыться, искать. Особенное внимание статьям под авторством Matthew Curland.
Для понимания подсчёта ссылок, времени жизни объекта, множественности поддерживаемых объектом интерфейсов рекомендую главы 1-4 книги Дейла Роджерсона "Основы COM" . Книга из серии must have.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34634580
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConn,
Я говорю о загрузке/выгрузке кода и структур данных (программных) библиотек в момент выполнения программы, т.е. о функциональности, предоставляемой функциями (Co-)LoadLibrary(-Ex), (Co-)FreeLibrary. Объём занимаемой процессом памяти можно проконтролировать Task Manager-ом, моменты загрузки/выгрузки Dependency Walker -ом.
Библиотека типов может находиться как в отдельном .tlb/.olb файле, так и лежать в виде ресурса в исполняемом файле программной библиотеки (.dll, .ocx, .exe) (на практике чаще последнее). Я не говорил о загрузке/выгрузке библиотеки типов.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34636010
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Позволю себе одно замечание. Вот фразы вроде этой:

Хотя я вроде просил помощи у Бенедикта, но всё же спасибо, хотя томик про ВБ 6 лежит перед носом...

надолго отбивают охоту помогать. На мой взгляд, это просто неуважение к человеку, согласившемуся помочь. Вообще, просто слов нет, никогда раньше такого не встречал. Если тяжело из себя выдавливать элементарное "спасибо", так лучше вообще этого не делать.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34636042
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БенедиктVladConn,
Я говорю о загрузке/выгрузке кода и структур данных (программных) библиотек в момент выполнения программы, т.е. о функциональности, предоставляемой функциями (Co-)LoadLibrary(-Ex), (Co-)FreeLibrary. Объём занимаемой процессом памяти можно проконтролировать Task Manager-ом, моменты загрузки/выгрузки Dependency Walker -ом.
Библиотека типов может находиться как в отдельном .tlb/.olb файле, так и лежать в виде ресурса в исполняемом файле программной библиотеки (.dll, .ocx, .exe) (на практике чаще последнее). Я не говорил о загрузке/выгрузке библиотеки типов.

Да, конечно. Я этот вопрос перезадал на другом форуме, англоязычном. Можете посмотреть, если вам интересно, там в основном народ задумался над легитимностью этого дела, я и не ожидал:

автор BobRodes (Instructor) 29 Jun 07 11:24
At first glance, yes, it does sound a bit crazy. Why do you want to do this?

strongm (MIS) 29 Jun 07 11:45
If it really is a type library, then the answer is no

JoeAtWork (Programmer) 29 Jun 07 13:37
If he has some legitimate reason to do this, maybe late binding would be the answer?

strongm (MIS) 29 Jun 07 14:36
If it is a type library then it doesn't matter if there is a legitimate reason or not. Type libraries do not load anything, so there is nothing to unload.

strongm (MIS) 2 Jul 07 9:25
I think what JoeAtWork was suggesting is that it is difficult to think of a compelling reason why a VB programmer might require control of the unloading of a Type or COM library

BobRodes (Instructor) 2 Jul 07 13:14
Sounds like "straining out gnats" to me.

strongm (MIS) 2 Jul 07 13:39
Given that VB and COM already handle all that for you and keep everything safe for you and your application (e.g correctly maintaining reference counts, pointers etc), that isn't a convincing reason ...
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34636050
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConn


Вот тут уже точно идёт чистая провокация, причём не с моей стороны!!!!!!!

СПАСИБО, надеюсь эти слова согреют Вашу!

Хотя замечу, все меня пытаются учить, хотя при этом поступают совершенно непедагогично! Ошибки я свои признал уже давно, а меня всё ещё пытаются натыкать носом пусть и в свою каку, да ещё забаннить всё время хотят. И как вы думаете, после такого на одного хакера станет явно больше, уже мыслишки всякие завелись в моей вполне светлой голове.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34636098
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вы умудряетесь одновременно косвенно назвать человека, пытавшегося вам помочь, провокатором и сказать СПАСИБО так, что его как-то и не хочется?
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34636548
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ден ПрограммёрОшибки я свои признал уже давно, а меня всё ещё пытаются натыкать носом пусть и в свою каку, да ещё забаннить всё время хотят. И как вы думаете, после такого на одного хакера станет явно больше, уже мыслишки всякие завелись в моей вполне светлой голове.
На ошибках надо учиться а не признавать их, здесь не комсомольское собрание. Просто удивительно как ты умудряешься постоянно влезть в конфликтные ситуации с разными людьми в разных топиках и при этом в своей невоспитанности обвинять других участников и модераторов. Замечания к тебе считаю вполне справедливыми, чего ты постоянно огрызаешься на всех? Умудряешься грубить людям на каждом шагу а перемежая грубость с благодарностями. Хватит флуда и оффтопа, чтоб мне не пришлось закрывать еще и этот топик.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34636743
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Magnus23Модератору

Уважаемый, Максим, а что делать? Такова се ля ви, мир вообще попа, но одним ею хочется восхищятся (это те "дурачки", типа меня, которые видят всю каку мира, скрытую в этой попе, но которые всё же восхищаются этим миром, потому что такова училковская доля), а другие хотят её лизать (ну, чтобы получить от неё всё самое лучшее), третьи — иметь её :)) (хотя это тоже большой вопрос), а четвёртым вообще такое от неё надо :)). И остаётся один выход, просто огрызаться, особенно когда машут кулаками после драки.
Кстати, ещё повод подметить (это я как педагог говорю), исправление ошибки начинается с её признания! ХОРОШО, вы желаете извинений в словесной форме, пожалуйста:"Простите меня пожалуйста люди добрые, простите!" Хотя вот вам притча:" Однажды дедушка Сталин сказал, убить человека ничего не стоит — всего каких-то 9 грамм —но даже если собирутся все легионы мира, даже они не смогут убить в человеке его мысли"
Ещё разок СПАСИБО за внимание! Кстати, я тоже в определённом смысле украинец, но я ведь говорю на русском языке
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34637002
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В последнее время открываешь форум - есть новые сообщения - открываешь посмотреть, а там опять Ден с кем нибуть срётся.
ДенЕщё разок СПАСИБО за внимание!
Трафик жалко и время жалко пока пролисташь весь этот базар. Вот такое внимание. Против тебя ничего не имею, но это ж ведь мешает, тем более многие вслед за тобой бросаются туда же в базар (вот и я не выдержал...)
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34637240
Всем спасибо и за помощь, и за простые разговоры о "высоком" (т.к. я впринципе ничего не понял), но есть одно маленькое НО. У меня снова ничего не работает.
Объясню по-подробнее. Есть кнопка, нажав которую должны скрыться 250 чекбосков. Можно просто их прописать типа:
checkbox1.visible=false
checkbox2.visible=false
и т.д., но это достаточно сильно грузит машину, т.к. кроме скрытия происходит выполнение еще 5 процедур. Поэтому хотелось бы сделать цикл for - и время съэкономить и клаву поберечь.
Все объекты на листе, а не на форме. Весь процесс происходит в екселе. То, что предлагалось выше не работает. Либо по определению, либо потому что руки у меня кривые.
Поэтому, снова прошу у Вас помощи.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34637323
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConn,
да, спасибо, по первому прочтению было интересно. tek-tips стОящий форум?
К сожалению, при повторном прочтении, кроме сообщения от strongm (MIS) 2 Jul 07 13:39, ничего не увидел. Слово "legitimate" применено во втором значении - "2) верный, истинный, правильный, разумный".
"straining out gnats" - отсылка к Евангелию от Матфея: "Вожди слепые, оцеживающие комара и проглатывающие верблюда!" Толковый словарь УшаковаОцеживать комара (поговорка) - проявлять мелочную заботливость о ничтожных вещах,преимущ. при невнимании к важному.Подсчёт ссылок не спасёт от проблемы освобождения ресурсов при циклических ссылках. VB не ответственен и не может быть ответственен за реализацию библиотек - вот DAO сделана так, что остаётся в памяти, пока её явно не "попросят на выход". И бывают ошибки в реализации. Будет время, почитайте эту тему. Обратите внимание, что я столь же стойко, как и Вы, стою на тех же позициях. Но последнее сообщение тоже писал я. Как Вам цитата: MicrosoftThe developer should not rely on Visual Basic for Applications to implicitly close objects when a Sub or Function procedure is exited.? ;)
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34637340
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почти Лузер,
беда в том, что цикл будет работать медленнее за счёт накладных расходов на организацию и проверок, чем прямой код checkbox1.visible=false: checkbox2.visible=false и т. д.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34637367
ОК, тему прочитаю, по поводу последней фразы именю сказать следующее - это микрософт **)).
И все же, если вернуться к моему вопросу?
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34637422
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почти Лузер,
то сообщение предназначалось VladConn.

По скрытию checkbox-ов: см. приложенный файл.
...
Рейтинг: 0 / 0
Цикл for для checkbox'ов
    #34637442
ОГРОМНЫЙ РЕСПЕКТ!!! Сделал - работает!!!
...
Рейтинг: 0 / 0
53 сообщений из 53, показаны все 3 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Цикл for для checkbox'ов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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