Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Передать в функцию ссылку на элемент формы / 13 сообщений из 13, страница 1 из 1
18.10.2007, 07:36
    #34876834
detail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в функцию ссылку на элемент формы
Хочу сделать такое:
в форме - несколько текстовых полей и кнопок напротив каждого из них. В текстовых полях - пути к папкам. Нажав кнопку можно найти папку, и путь должен записаться в соответствующее кнопке текстовое поле.

хочу написать код такого вида:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Sub browseErp_Click()
        browseDir (Forms![Импорт]!erpPath)
End Sub

Public Sub browseDir(ByRef element As Variant)
        Dim fdd As FileDialog: Set fdd = Application.FileDialog(msoFileDialogFolderPicker)

        With fdd
                .title = "Выберите папку"
    
                If .Show = - 1  Then
                        If .SelectedItems.Count >  0  Then element.Value = .SelectedItems( 1 )
                End If
        End With
End Sub
Такой код не работает, потому что в процедуре значение element - null. Хочу держать минимум кода в функции нажатия на кнопку. В принципе, есть другой вариант, но хотелось бы знать, как передать ссылку, чтобы из функции можно было в неё записать.
...
Рейтинг: 0 / 0
18.10.2007, 09:48
    #34876976
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в функцию ссылку на элемент формы
Возможно вам следует написать
Код: plaintext
Call browseDir(Forms![Импорт]!erpPath)
или
Код: plaintext
browseDir Forms![Импорт]!erpPath

А что это за библиотека с FileDialog ?
...
Рейтинг: 0 / 0
18.10.2007, 09:54
    #34876987
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в функцию ссылку на элемент формы
попробуй так, без всяких ссылок
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub browseErp_Click()
    Dim sh As New Shell 'Внимательней. Microsoft Shell, должен быть определён раньше чем Microsoft ScrRun
    Dim pt As Folder
    Set sh = CreateObject("shell.application")
    Set pt = sh.BrowseForFolder(hWnd, "  Выберите папку  -  ОТКУДА",  0 )
    If pt Is Nothing Then
    Else
        Me.OTKUDA = pt.Items.Item.Path
    End If
    Me.OTKUDA.SetFocus
End Sub
...
Рейтинг: 0 / 0
18.10.2007, 10:51
    #34877152
detail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в функцию ссылку на элемент формы
Worobjoff: спасибо, заработало! Библиотека - Microsoft common dialog control 6.0 (comdlg32.ocx)

klen_: я так тоже могу, суть в том чтобы вынести код, повторяющийся для нескольких кнопок.
...
Рейтинг: 0 / 0
18.10.2007, 10:54
    #34877168
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в функцию ссылку на элемент формы
а если сделать массив элементов и текстбоксов и кнопок?
тогда на все элементы всего одна процедура будет


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
18.10.2007, 12:03
    #34877413
detail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в функцию ссылку на элемент формы
Да, хотелось бы сделать так. Где можно прочитать пример?
...
Рейтинг: 0 / 0
18.10.2007, 12:05
    #34877424
detail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в функцию ссылку на элемент формы
Ещё одна особенность - эти пути к папкам сохраняются в таблице настроек ("пресетов"). Если форма будет генериться при загрузке, и я на ходу пишу свойство "данные" поля, оно нормально будет работать?
...
Рейтинг: 0 / 0
18.10.2007, 12:19
    #34877478
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в функцию ссылку на элемент формы
detailДа, хотелось бы сделать так. Где можно прочитать пример?

назначить всем элементам (к примеру текстбокс) одно имя
в результате в св-вах объекта можно будет проставить его индекс и от него плясать

пример выложить не могу, т.к у меня нет просто под рукой Васика. :(



I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
18.10.2007, 12:24
    #34877508
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в функцию ссылку на элемент формы
detailсуть в том чтобы вынести код, повторяющийся для нескольких кнопок.ещё вариантик, создать функцию в отдельном модуле
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub browseErp_Click()
    Me.OTKUDA = BrowseDir(Me.OTKUDA, "Выберите папку  -  ОТКУДА")
    Me.OTKUDA.SetFocus
End Sub

' Модуль1
Public Function BrowseDir(ByVal pt_OLD As String, ByVal msg As String) As String
    Dim pt As Folder
    Dim sh As New Shell
    Set sh = CreateObject("shell.application")
    Set pt = sh.BrowseForFolder(hWnd, msg,  0 )
    If pt Is Nothing Then
        BrowseDir = pt_OLD
    Else
        BrowseDir = pt.Items.Item.Path
    End If
End Function
только, я не знаю как открыть прежнюю папку, используя pt_OLD
...
Рейтинг: 0 / 0
18.10.2007, 12:56
    #34877662
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в функцию ссылку на элемент формы
Есть два способа "вынести повторяющийся код за скобки":
1) Процедурный стиль - создать глобальную процедуру и обращаться к ней передавая все нужные параметры.
2) Создать класс со всеми нужными полями и размещать в коде экземпляры этого класса, а они будут рабоать как бы "сами по себе". В данном случае этот вариант - создать UserControl на котором поля - текстбокс, кнопка, диалог_выбора_файла. Отдельные поля отдельных класса (изер-контрола) могут ссылаться и на одни единственный объект - например диалог_выбора_файла может быть общий для всех.

Второй путь требует кой-чему подучиться, но это основное направление в котором развиваются современные языки программирования.
...
Рейтинг: 0 / 0
18.10.2007, 12:57
    #34877675
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в функцию ссылку на элемент формы
WorobjoffОтдельные поля отдельных класса (изер-контрола) могут ссылаться и на одни единственный объект - например диалог_выбора_файла может быть общий для всех.
Читать как

Отдельные поля класса (изер-контрола) могут ссылаться и на один единственный объект. Например диалог_выбора_файла может быть общий для всех.
...
Рейтинг: 0 / 0
18.10.2007, 14:01
    #34878001
detail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в функцию ссылку на элемент формы
klen_ detailсуть в том чтобы вынести код, повторяющийся для нескольких кнопок.ещё вариантик, создать функцию в отдельном модуле
Вы читали код в первом сообщеии? Я, собственно, по сути то же самое и написал.
...
Рейтинг: 0 / 0
18.10.2007, 14:43
    #34878172
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать в функцию ссылку на элемент формы
согласен
суть одинакова
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Передать в функцию ссылку на элемент формы / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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