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

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

08.09.2013, 19:52. Показов 1848. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2013, 19:52
Ответы с готовыми решениями:

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

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

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

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

4
176 / 151 / 10
Регистрация: 08.11.2012
Сообщений: 224
08.09.2013, 22:49 2
Цитата Сообщение от ValeOFY Посмотреть сообщение
Вопрос: Как обратиться к первому экземпляру Form1 или его дочерним контролам извне? Ведь у него, получается, нет имени.
Так и обратится Form1.Show(), Form1.Button1.Text="text". Form1 это и есть имя его первого экземпляра.
1
829 / 637 / 100
Регистрация: 20.08.2013
Сообщений: 2,524
09.09.2013, 12:58 3
Цитата Сообщение от 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  [ТС] 4
Спасибо за ответы. Суть я понял, но свою проблему решить не смог.
Моя проблема более специфична.
У меня не получается обратиться к контролу 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
0
Вложения
Тип файла: rar learning3.rar (89.1 Кб, 2 просмотров)
0 / 0 / 0
Регистрация: 13.08.2013
Сообщений: 24
09.09.2013, 13:35  [ТС] 5
Я понял где искать проблему!
Не срабатывает вот эта строка:
VB.NET
1
ListBox1.Invoke(New deleg1(AddressOf add_error), err)
Только почему?..
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2013, 13:35

Помощь в написании контрольных, курсовых и дипломных работ здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.