Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 08.03.2015
Сообщений: 3

Доступ к форме

05.11.2013, 11:32. Показов 2159. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, как осуществить следующее: есть 2 формы, на одной таблица с значениями, на второй 2 текстовых поля куда эти значения нужно вставить. Значения должны быть разными и вставляться по нажатии 2 кнопок со второй формы.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2013, 11:32
Ответы с готовыми решениями:

Доступ к форме из метода
При создании родительской формы создаётся другая форма: InitializeComponent(); BrowserForm bf = new BrowserForm(); bf.Owner = this; ...

Доступ к форме из потока
Привет Всем! Сразу скажу что программист из меня так себе :) Старался как мог..... (искать в интернете :)) Суть во в чем. Я сделал...

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

22
Заблокирован
05.11.2013, 15:32
Зарание обяви переменные формы
в модуле .bas
пример:
Visual Basic
1
2
Public frm1 As New Form1
Public frm2 As New Form2
пример вызова
Visual Basic
1
2
3
sub main()
    frm1.show
end sub
а затем передавай параметры

друг другу пример:

Visual Basic
1
2
3
private sub command1_Click()
    frm1.myList(1) = frm2.text1
end sub
Добавлено через 2 минуты
Написать полностью весь текст вашей программы не предлогать )))
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
06.11.2013, 21:50
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
Public frm1 As New Form1 Public frm2 As New Form2
- как раз так не надо... Это приведет к удвоению frm1 и frm2
0
Заблокирован
07.11.2013, 22:10
Объявление переменной
dim frm1 as form1
а затем вызвать
Set frm1 = form1
frm1.show

тоже самое что и
dim frm1 as new form1
и вызвать
frm1.show
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
07.11.2013, 23:31
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
Объявление переменной
dim frm1 as form1
а затем вызвать
Set frm1 = form1
frm1.show
тоже самое что и
dim frm1 as new form1
и вызвать
frm1.show
Нет, это не тоже самое. Ты создаешь во втором варианте еще один экземпляр формы. Зачем это делать, когда есть уже один? Тем более если ты во втором варианте напишешь Form1.Show То у тебя откроется еще одна форма, а в первом варианте это будет равнозначно frm1.Show.
2
Заблокирован
07.11.2013, 23:53
понятно ))) главное чтоб [ТС] понял
0
 Аватар для fireday
307 / 138 / 6
Регистрация: 17.04.2013
Сообщений: 1,943
08.11.2013, 08:58
По моему ТС надо было что-то вроде
Visual Basic
1
2
3
4
'код Form1
Private Sub Command1_Click()
Form2.Text1.Text = "lalala"
End Sub
Если из второй формы брать значения с первой из таблицы (что за таблица?)
То как-то так
Visual Basic
1
2
3
4
'код Form2
Private Sub Command1_Click()
Text1.Text = Form1.таблица.ячейка(N)
End Sub
0
 Аватар для Апострофф
9908 / 3919 / 742
Регистрация: 11.10.2011
Сообщений: 5,903
08.11.2013, 09:12
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
Объявление переменной
dim frm1 as form1
а затем вызвать
Set frm1 = form1
frm1.show
К чему такие изыски
Хватит одной строки
Visual Basic
1
form1.show
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
08.11.2013, 10:27
Цитата Сообщение от The trick Посмотреть сообщение
Нет, это не тоже самое. Ты создаешь во втором варианте еще один экземпляр формы.
- я именно это и имел в виду.
0
Заблокирован
08.11.2013, 18:37
Цитата Сообщение от Апострофф Посмотреть сообщение
Хватит одной строки
вы ошибаетесь проверьте сами если не допишете потом Set

Добавлено через 13 минут
dim frm1 as form1
Объявляя таким образом она еще не созданна а только созданны указатели
0
 Аватар для Апострофф
9908 / 3919 / 742
Регистрация: 11.10.2011
Сообщений: 5,903
08.11.2013, 18:50
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
dim frm1 as form1
Объявляя таким образом она еще не созданна а только созданны указатели
В данном контексте эта строка избыточна, обращайтесь к form1
0
Заблокирован
08.11.2013, 18:52
мой супер пример:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
Option Explicit
 
'-----------------------------------------[Глобальные переменные]
Global APN$ 'App.EXEName
Public frmMain1 As frmMain
Public frmList1 As frmList
Public frmText1 As frmText
 
Public Const ListSettings = "[Список настроек]"
Public Const Order$ = "[Порядок рассположения настроек]"
Public Const r1$ = "\", r2 = "#", r3 = ";", r4 = "["
Public Const ch = ";Check=", ch0 = ";Check=0", ch1 = ";Check=1"
'-------------------------------
Public Const Title1$ = "Сохранение настроек"
Public Const Promt1$ = "Введите имя настройки"
Public Const Promt2$ = "Проект был удален или перемещен" & vbCrLf & _
                                    "Удалить его из записи настроек ?"
 
 
'-----------------------------------------[Глобальные Константы]
Public Const GWL_EXSTYLE = (-20)
Public Const ICC_STANDARD_CLASSES = &H4000&
Public Const WS_EX_LAYERED As Long = &H80000
'-----------------------------------------[Типы]
Public Type InitCommonControlsExStruct
    lngSize As Long
    lngICC As Long
End Type
'-----------------------------------------[Api функции]
Public Declare Function FreeLibrary Lib "kernel32.dll" (ByVal hLibModule As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function InitCommonControlsEx Lib "comctl32.dll" (iccex As InitCommonControlsExStruct) As Boolean
Public Declare Function LoadLibrary Lib "kernel32.dll" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Sub InitCommonControls Lib "comctl32.dll" ()
'-----------------------------------------[Объекты]
Public Fso  As New FileSystemObject
Public Wsh As New WshShell
Public Sh As New Shell
 
Public Sub Main()
    APN = App.EXEName
    'Инициализация стиля НЕ УДОЛЯТЬ
    Dim iccex As InitCommonControlsExStruct, hMod As Long
    With iccex
        .lngSize = LenB(iccex)
        .lngICC = ICC_STANDARD_CLASSES ' встроенные элементы управления VB (кнопки, текстового поля и т.д.)
    End With
    On Error Resume Next ' если произошла ...
    hMod = LoadLibrary("shell32.dll")
    InitCommonControlsEx iccex
    If Err Then
        InitCommonControls ' попробовать версию Win9x
        Err.Clear
    End If
    On Error GoTo 0
    If hMod Then FreeLibrary hMod
    '--------------------------------------------
    Set frmMain1 = frmMain
    Set frmList1 = frmList
    Set frmText1 = frmText
    frmMain1.Show 'Запуск главной формы
 
End Sub
 
Public Function PictureBoxBorderStyle(Form As Object)
    Dim o
    For Each o In Form 'Убрать борд
        If TypeName(o) = "PictureBox" Then
            o.BorderStyle = 0
        End If
    Next
End Function
 
Public Function ButtonLoadSettings() As Boolean
    Dim v As Variant
    Const index& = 3 '[Кн. загрузить]
    v = GetAllSettings(APN, ListSettings)
    With frmMain1
        If IsEmpty(v) Then
            .Command1(index).Enabled = False
        ElseIf UBound(v) < 1 Then
            .Command1(index).Enabled = False
        Else
            .Command1(index).Enabled = True
            ButtonLoadSettings = True
        End If
    End With
End Function
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
08.11.2013, 19:07
Form1 - DAN ссылка на экземпляр формы Form1, frm1 - обычная ссылка на экземпляр формы Form1. И это не одно и тоже, как и
Visual Basic
1
2
Dim frm1 As Form1
Set frm1 = New Form1
и
Visual Basic
1
Dim frm1 As New Form1
Грубо говоря, Form1 в этом контексте, можно сказать что объявлена как
Visual Basic
1
Dim Form1 As New Form1
а frm1 как
Visual Basic
1
Dim frm1 as Form1
Обращение к Form1 ссылке медленнее, чем обращение к frm1
0
 Аватар для Апострофф
9908 / 3919 / 742
Регистрация: 11.10.2011
Сообщений: 5,903
08.11.2013, 20:27
The trick, Вы и меня запутали...
Form1.show не есть правильный вызов формы?
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
08.11.2013, 20:31
Цитата Сообщение от Апострофф Посмотреть сообщение
Form1.show не есть правильный вызов формы?
Нет, почему же он правильный, и в контексте ТС - это предпочтительный способ.
Просто у JoraVoenyjHaker'а написано здесь
Объявление переменной
dim frm1 as form1
а затем вызвать
Set frm1 = form1
frm1.show

тоже самое что и
dim frm1 as new form1
и вызвать
frm1.show
Что это тоже самое, хотя это разные вещи объявление переменной как
Visual Basic
1
Dim X As Class: Set X = New Class
и
Visual Basic
1
Dim X As New Class
И они по разному работают
0
 Аватар для fireday
307 / 138 / 6
Регистрация: 17.04.2013
Сообщений: 1,943
08.11.2013, 23:02
Цитата Сообщение от The trick Посмотреть сообщение
Что это тоже самое, хотя это разные вещи объявление переменной как
Код Visual Basic
1
Dim X As Class: Set X = New Class
и
Код Visual Basic
1
Dim X As New Class
И они по разному работают
Объясни пожалуйста разницу
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
08.11.2013, 23:34
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Цитата Сообщение от fireday Посмотреть сообщение
Объясни пожалуйста разницу
Ну если коротко то при объявлении DAN ссылки, перед каждым обращением к ней, проверяется равна ли она Nothing, если да, то создается объект.
Например имеем класс clsTest с одним свойством:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private mVar As String
 
Public Property Get Var() As String
    Var = mVar
End Property
Public Property Let Var(Value As String)
    mVar = Value
End Property
 
Private Sub Class_Initialize()
    Debug.Print "Initialize"
End Sub
Private Sub Class_Terminate()
    Debug.Print "Terminate"
End Sub
Корректно будет работать этот код
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
' Каждое обращение к переменной Test предваряется такой конструкцией
' If Test Is Nothing Then Set Test = New clsTest
 
Private Sub Form_Load()
    Dim Test As New clsTest         ' Конструктор не вызывается
    Dim S As String
 
    Test.Var = "Variable"           ' Вызывается конструктор, затем Property Let
    
    Set Test = Nothing              ' Вызывается деструктор
       
    S = Test.Var                    ' Вызывается конструктор, затем Property Get (S="")
                
    Set Test = Nothing              ' Вызывается деструктор
    
    Test.Var = "Variable"           ' Вызывается конструктор, затем Property Let
End Sub                             ' Вызывается деструктор
Окно Immediate
Initialize
Terminate
Initialize
Terminate
Initialize
Terminate
Поэтому работа с такой переменной медленней чем с той которая создана непосредственно с помощью Set = New , зато мы должны сами проверять и создавать переменную:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Form_Load()
    Dim Test As clsTest
    Dim S As String
    
    Set Test = New clsTest          ' Вызывается конструктор
    
    Test.Var = "Variable"           ' Вызывается Property Let
    
    Set Test = Nothing              ' Вызывается деструктор
    
    Test.Var = "Variable"           ' Ошибка! Test = Nothing
End Sub
Окно Immediate
Initialize
Terminate
1
 Аватар для fireday
307 / 138 / 6
Регистрация: 17.04.2013
Сообщений: 1,943
08.11.2013, 23:39
Visual Basic
1
' Вызывается конструктор
Это значит вызывается эта проверка?
Visual Basic
1
'If Test Is Nothing Then Set Test = New clsTest
верно понял?
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
08.11.2013, 23:42
Form1, в сообщении Апостроффа, есть не что иное как DAN ссылка.

Добавлено через 1 минуту
Цитата Сообщение от fireday Посмотреть сообщение
Это значит вызывается эта проверка?Код Visual Basic1
'If Test Is Nothing Then Set Test = New clsTestверно понял?
При любом явном обращении к переменной, вызывается проверка. Даже например через ObjPtr(Test) создастся объект Test, если он был Nothing, а затем он передастся в функцию ObjPtr
1
Заблокирован
08.11.2013, 23:42
молодчага The trick не лень тебе было такое объяснить )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.11.2013, 23:42
Помогаю со студенческими работами здесь

Доступ к форме в vba
у меня есть форма ввод_данных, из этой формы в модуле мне надо обратится текстовому полю, в самом модуле форме это было бы так...

Доступ к другой форме
FAQ почитал, но все равно не понял механизм взаимодействия форм.. Вообщем имеется frm_main - главная форма. Из главной формы...

Доступ к форме из класса
Или я тупой, или лыжи не едут, я так и не понял как это сделать. Есть форма, на ней textBox1 и button1. Есть мой класс MyClass в котором...

Доступ к загруженной форме из базы
Здравствуйте. На странице есть select с выбором вставляемого шаблона. Выберите шаблон:&lt;select id=&quot;choose_cat&quot; &gt; ...

Доступ к многократно открытой форме
Доброго времени суток. Имеется родительская форма, на которой рисуется график, который состоит из нескольких линий, и из координат...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru