powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Открытие формы по имени, и доступ к ней из другой формы
11 сообщений из 11, страница 1 из 1
Открытие формы по имени, и доступ к ней из другой формы
    #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
Открытие формы по имени, и доступ к ней из другой формы
    #39388107
Kolu4ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Настенька,
Нужно в модуле сделать чтобы frm переменная была public. А из другой формы обращаться не к Form1.Button1.Text = "тест", а к MyModule.frm.Button1.Text = "тест".
Думаю что так.
...
Рейтинг: 0 / 0
Открытие формы по имени, и доступ к ней из другой формы
    #39388122
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Вы так открываете формы, то формы надо наследовать от некого интерфейса, где объявить все что нужно Вам.
Создав Instance далее приводите его к этому интерфейсу и вперед.

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

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

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



Если появится ошибка компиляции Button1 сделать public. Должно помочь
...
Рейтинг: 0 / 0
Открытие формы по имени, и доступ к ней из другой формы
    #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
Открытие формы по имени, и доступ к ней из другой формы
    #39428161
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделала пример, очень простенький, там две формы. И там тоже это не работает. Прикладываю его.
Если не трудно, посмотрите его, помогите, пожалуйста, в этом примере сделать правильно.
Заранее спасибо.
...
Рейтинг: 0 / 0
Открытие формы по имени, и доступ к ней из другой формы
    #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
Открытие формы по имени, и доступ к ней из другой формы
    #39428224
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kolu4ka, спасибо огромное. Открыть удалось эту форму, потом закрываю ее, и при повторном открытии пишет вот такое сообщение (в скриншоте).
Что надо сделать, чтобы она повторно открывалась нормально?
...
Рейтинг: 0 / 0
Открытие формы по имени, и доступ к ней из другой формы
    #39428235
Kolu4ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Настенька, можно ее не закрывать, а спрятать, метод Hide.
А если закрываешь, то объект уничтожается и его снова нужно создавать заново, у тебя он создается в методе auto_font.
...
Рейтинг: 0 / 0
Открытие формы по имени, и доступ к ней из другой формы
    #39428259
Addx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что только не сделаешь, чтобы из типизированного языка сделать PHP!
Сколько можно придумать методов, чтобы обмануть компилятор, и получить ошибки на рантайме, а не при построениии!
Дали людям Reflection ...
...
Рейтинг: 0 / 0
Открытие формы по имени, и доступ к ней из другой формы
    #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
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Открытие формы по имени, и доступ к ней из другой формы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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