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

Класс Form1 и экземпляр класса Form1. Путаница

08.09.2013, 19:52. Показов 2832. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Поиском подобной темы не нашел.

Создавая любой Windows Forms-проект на VB.NET, по умолчанию создается класс Form1.
При компилировании пустой программы, запускается окно Form1, т.е. автоматически создается объект - экземпляр класса. В коде мы этого нигде не пишем.

Чтобы обратиться к его элементам из него самого мы используем Me, например Me.Button1.Text="text"

Если создать новый экземпляр класса Form1 вручную, то мы знаем его имя и можем обратиться к нему или его контролам извне, например:

Dim frm as New Form1();
frm.Button1.Text="text"


Вопрос: Как обратиться к первому экземпляру Form1 или его дочерним контролам извне? Ведь у него, получается, нет имени. И еще, почему мы можем написать: Form1.Show() - ведь Form1 это же класс, а не его экземпляр.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.09.2013, 19:52
Ответы с готовыми решениями:

Запуск формы Form1 f1 = new Form1(); f1.Show();
Создал форму, но какой код необходимо добавить чтоб она сама открывалась, и куда его добавить? Открываться будет по ...

Не открывается Form1
Не открывается Form1. Что не так в этом коде ? Beep работает. Если без Loop'a - Form1. открываэтся. Спасибо. Imports System ...

Вызов Form1 из DLL
Есть форма Form1 которая компилируется в DLL-файл MyDLL.dll . Этот DLL затем используется в большом громоздком приложении из-за чего очень...

4
 Аватар для Gemorg
178 / 153 / 10
Регистрация: 08.11.2012
Сообщений: 224
08.09.2013, 22:49
Цитата Сообщение от ValeOFY Посмотреть сообщение
Вопрос: Как обратиться к первому экземпляру Form1 или его дочерним контролам извне? Ведь у него, получается, нет имени.
Так и обратится Form1.Show(), Form1.Button1.Text="text". Form1 это и есть имя его первого экземпляра.
1
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
09.09.2013, 12:58
Цитата Сообщение от ValeOFY Посмотреть сообщение
Как обратиться к первому экземпляру Form1 или его дочерним контролам извне?
Если мы не закрывали форму, то именно она будет лежать в
VB.NET
1
My.Forms.Form1
Цитата Сообщение от ValeOFY Посмотреть сообщение
При компилировании пустой программы, запускается окно Form1, т.е. автоматически создается объект - экземпляр класса. В коде мы этого нигде не пишем.
За нас это (и многое другое) делает компилятор VB.NET:
C#
1
2
3
4
5
6
7
8
    [HelpKeyword("My.Forms")]
    internal static MyProject.MyForms Forms
    {
      [DebuggerHidden] get
      {
        return MyProject.m_MyFormsObjectProvider.GetInstance;
      }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
      public Form1 Form1
      {
        [DebuggerNonUserCode] get
        {
          this.m_Form1 = MyProject.MyForms.Create__Instance__<Form1>(this.m_Form1);
          return this.m_Form1;
        }
        [DebuggerNonUserCode] set
        {
          if (Value == this.m_Form1)
            return;
          if (Value != null)
            throw new ArgumentException("Property can only be set to Nothing");
          this.Dispose__Instance__<Form1>(ref this.m_Form1);
        }
      }
Там ещё много интересного, позазий, если есть желание.
1
0 / 0 / 0
Регистрация: 13.08.2013
Сообщений: 24
09.09.2013, 13:26  [ТС]
Спасибо за ответы. Суть я понял, но свою проблему решить не смог.
Моя проблема более специфична.
У меня не получается обратиться к контролу Form1.ListBox1 из другого потока. Есть Form1 и Class1. В Form1 есть Button1 и ListBox1. При нажатии на Button1 создаем поток, в котором создаем экземпляр класса Class1 и выполняем его метод Class1.add_from_class, который в свою очередь выполняет метод add_error класса Form1(добавляет строку в листбокс).

В общем, на словах объяснить сложно. Получается только, если передать Form1 как аргумент(sender). В других вариантах не работает. В общем, при нажатии на Button1 должно добавляться 3 строки, а добавляется одна. А мне нужно, чтобы не передавать Form1 как аргумент, т.е. чтобы я мог использовать метод add_error из любого модуля, класса, потока и.т.п. Буду рад любой помощи.

Вот код, повторяющий структуру моей программы и сам исходник во вложении:

'Form1.vb:---------------------------------------------------------------------------------------------------

VB.NET
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
Imports System.Threading
 
Public Class Form1
 
    Delegate Sub deleg1(ByVal str As String)
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim thr As New Thread(AddressOf thread_starter)
        thr.Start()
    End Sub
 
    Sub thread_starter()
        Dim Cl1 As New Class1
        Cl1.add_from_class(Me)
    End Sub
 
    Public Sub add_error(ByVal err As String)
        If ListBox1.InvokeRequired Then
            ListBox1.Invoke(New deleg1(AddressOf add_error), err)
            Exit Sub
        End If
        Me.ListBox1.Items.Add(err)
    End Sub
 
End Class
'Class1.vb:---------------------------------------------------------------------------------------------------

VB.NET
1
2
3
4
5
6
7
8
9
Public Class Class1
 
    Public Sub add_from_class(sender As Object)
        My.Forms.Form1.add_error("variant1") 'не работает!
        Form1.add_error("variant2") 'не работает!
        sender.add_error("sender") 'только так работает
    End Sub
 
End Class
Вложения
Тип файла: rar learning3.rar (89.1 Кб, 2 просмотров)
0
0 / 0 / 0
Регистрация: 13.08.2013
Сообщений: 24
09.09.2013, 13:35  [ТС]
Я понял где искать проблему!
Не срабатывает вот эта строка:
VB.NET
1
ListBox1.Invoke(New deleg1(AddressOf add_error), err)
Только почему?..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.09.2013, 13:35
Помогаю со студенческими работами здесь

Добавление usercontrol1 в form1 программно
Напишите пожалуйста полный код на добавление usercontrol1 в form1 программно (usercontrol1 и form1 в одном проекте). Пробовал так но не...

Блокирование form1 когда активен form2
Как заблокировать переход на form1 когда активен form2?

Как передать изображение от Form1 до Form2
Здравствуйте, У меня есть проект с двумя формами ,Form1 с PictureBox1 и Form2 с PictureBox2 Я рисовать в Picturebox1 линии, точки,...

Как прикрепить Form2 к Form1 с правого края
Задача в следующем: Есть Form1 и Form2 на форме1 есть кнопка которая открывает форм2... Так вот как сделать так что бы при нажатии на...

Как открыть Form2 из Form1 через MenuStrip
Доброго дня всем кто подскажет как открыто Form2 из Form1 через ToolStripMenu что-то на форуме не нашел :-[


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru