Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Открытие формы по имени, и доступ к ней из другой формы / 11 сообщений из 11, страница 1 из 1
20.01.2017, 08:12
    #39388100
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Открытие формы по имени, и доступ к ней из другой формы
Всем доброго дня. Есть такая процедура в модуле, открывающая форму по имени

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Imports System.Reflection

Public Function CreateObjectInstance(ByVal objectName As String) As Object
        Dim obj As Object
        Try
            If objectName.LastIndexOf(".") = -1 Then
                objectName = [Assembly].GetEntryAssembly.GetName.Name & "." & objectName
            End If
            obj = [Assembly].GetEntryAssembly.CreateInstance(objectName)
        Catch ex As Exception
            obj = Nothing
        End Try
        Return obj
    End Function



Вызываю ее в модуле так, открываю форму с именем "Form1":

Код: vbnet
1.
2.
3.
Dim frm As New Form
frm = DirectCast(CreateObjectInstance("Form1"), Form)
frm.Show()



Все хорошо, форма открывается.

Далее из другой формы мне необходимо обратиться к компонентам этой открытой формы Form1. Пишу:

Код: vbnet
1.
Form1.Button1.Text = "тест"



И ничего не происходит, не ругается, ошибки нет, текст кнопки не меняется.
Подозреваю, что вот к открытой так форме надо обращаться как-то по другому, но не знаю, как.
Подскажите пожалуйста. Заранее спасибо.
...
Рейтинг: 0 / 0
20.01.2017, 08:44
    #39388107
Kolu4ka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Открытие формы по имени, и доступ к ней из другой формы
Настенька,
Нужно в модуле сделать чтобы frm переменная была public. А из другой формы обращаться не к Form1.Button1.Text = "тест", а к MyModule.frm.Button1.Text = "тест".
Думаю что так.
...
Рейтинг: 0 / 0
20.01.2017, 09:10
    #39388122
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Открытие формы по имени, и доступ к ней из другой формы
Если Вы так открываете формы, то формы надо наследовать от некого интерфейса, где объявить все что нужно Вам.
Создав Instance далее приводите его к этому интерфейсу и вперед.

К Button1 Вы не можете вот так вот просто обратится, он должен быть как public, что ни есть комильфо.
Лучше сделать свойство get ButtonЛя-ля, объявленное в интерфейсе и использовать его.

Примеры писать не буду у Вас VB.NET, а я на C# и мне просто лень.
...
Рейтинг: 0 / 0
21.01.2017, 01:49
    #39388810
Т-Миронов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Открытие формы по имени, и доступ к ней из другой формы
Option Strict On

Код: vbnet
1.
2.
Dim frm = DirectCast(CreateObjectInstance("Form1"), Form1)
frm.Show()



Если появится ошибка компиляции Button1 сделать public. Должно помочь
...
Рейтинг: 0 / 0
28.03.2017, 08:08
    #39428153
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Открытие формы по имени, и доступ к ней из другой формы
Возобновлю вопрос. В модуле есть 2 процедуры:

Код: vbnet
1.
2.
Public frm As Form
Public font_forms As New Font("MS Sans Serif", 10, FontStyle.Bold Xor FontStyle.Italic)



Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 Public Function CreateObjectInstance(ByVal objectName As String) As Object
        Dim obj As Object
        Try
            If objectName.LastIndexOf(".") = -1 Then
                objectName = [Assembly].GetEntryAssembly.GetName.Name & "." & objectName
            End If
            obj = [Assembly].GetEntryAssembly.CreateInstance(objectName)
        Catch ex As Exception
            obj = Nothing
        End Try
        Return obj
    End Function



Код: vbnet
1.
2.
3.
4.
5.
6.
Public Sub auto_font()
frm = DirectCast(CreateObjectInstance("frm_color"), Form)       
        For Each Ctrl As Control In frm.Controls
              Ctrl.Font = font_forms
        Next
End Sub



Первая ищет форму по ее имени

Вторая - присваивает всем ее элементам шрифт 10.

Проходит все без ошибок, но при открытии этой формы frm_color ничего не меняется.
Все компоненты этой формы имею Modifiers - Public.
Куда копать дальше?
...
Рейтинг: 0 / 0
28.03.2017, 08:20
    #39428161
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Открытие формы по имени, и доступ к ней из другой формы
Сделала пример, очень простенький, там две формы. И там тоже это не работает. Прикладываю его.
Если не трудно, посмотрите его, помогите, пожалуйста, в этом примере сделать правильно.
Заранее спасибо.
...
Рейтинг: 0 / 0
28.03.2017, 10:12
    #39428208
Kolu4ka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Открытие формы по имени, и доступ к ней из другой формы
Настенька,
Открывать нужно тот экземпляр формы к которому и применялись действия с шрифтами, т.е. вместо
Код: vbnet
1.
2.
3.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Form2.Show()
    End Sub


должно быть
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Module1.frm.Show()
End Sub
...
Рейтинг: 0 / 0
28.03.2017, 10:27
    #39428224
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Открытие формы по имени, и доступ к ней из другой формы
Kolu4ka, спасибо огромное. Открыть удалось эту форму, потом закрываю ее, и при повторном открытии пишет вот такое сообщение (в скриншоте).
Что надо сделать, чтобы она повторно открывалась нормально?
...
Рейтинг: 0 / 0
28.03.2017, 10:48
    #39428235
Kolu4ka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Открытие формы по имени, и доступ к ней из другой формы
Настенька, можно ее не закрывать, а спрятать, метод Hide.
А если закрываешь, то объект уничтожается и его снова нужно создавать заново, у тебя он создается в методе auto_font.
...
Рейтинг: 0 / 0
28.03.2017, 11:29
    #39428259
Addx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Открытие формы по имени, и доступ к ней из другой формы
Что только не сделаешь, чтобы из типизированного языка сделать PHP!
Сколько можно придумать методов, чтобы обмануть компилятор, и получить ошибки на рантайме, а не при построениии!
Дали людям Reflection ...
...
Рейтинг: 0 / 0
28.03.2017, 12:48
    #39428343
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Открытие формы по имени, и доступ к ней из другой формы
НастенькаDim frm As New Form
frm = DirectCast(CreateObjectInstance("Form1"), Form)
frm.Show()


Все хорошо, форма открывается.

Далее из другой формы мне необходимо обратиться к компонентам этой открытой формы Form1 . Пишу:

Form1.Button1.Text = "тест"



ну, вообще-то, у вас открыта форма не Form1, а frm

frm.Button1.Text = "тест";


и при этом, как было написано, Button1 должен быть публик.
А лучше сделать публичную функцию.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Открытие формы по имени, и доступ к ней из другой формы / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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