Обявление глобальной переменной

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

dmitriy22
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 121
Зарегистрирован: 27.04.2006 (Чт) 12:04
Откуда: Москва

Обявление глобальной переменной

Сообщение dmitriy22 » 16.08.2006 (Ср) 14:04

я в одной форме объявил переменную intLoginID и сделал переход в другую форму Form2
Код: Выделить всё
Public Class Form1
    Inherits System.Windows.Forms.Form

    Public intLoginID As String
.......

        Dim f2 As Form2

        f2 = New Form2()
        f2.Show()

End Class


и хочу вытащить значение во второй форме(классе)

Код: Выделить всё
Public Class Form2
    Inherits System.Windows.Forms.Form

.... вот здесь вытащить значение переменной..., но никак не получается

End Class


подскажите как можно это организовать???
Я не волшебник, я просто учусь.

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 16.08.2006 (Ср) 14:23

представь себе у тебя есть класс, и в этом классе ты объявляешь переменную а как Public :

Public a as long.

Внимание вопрос: как ты опросишь или присвоишь значение этой переменной? Таким макаром делой при опросе переменной в форме, так как это ни что иное как самый обыкновенный класс.
Guten Morgen! А если не Guten, то тогда это и не Morgen...

dmitriy22
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 121
Зарегистрирован: 27.04.2006 (Чт) 12:04
Откуда: Москва

Сообщение dmitriy22 » 16.08.2006 (Ср) 14:32

Alex_2005

да большое спасибо, что-то я пропустил в книжках про тип Long :oops: ... виноват ...исправлюсь :oops: :oops:
Я не волшебник, я просто учусь.

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 16.08.2006 (Ср) 14:35

при чём тут long???!!!!
на его месте может быть string, да и вообще любой другой тип или объект. Мне кажется, тебе для начала нужно понять суть объектно ориентированного программирования. Для начала узнай что такое классы, хотя бы в общих формулировках. Потом узнай о свойствах класса. Ага! А вото это уже то, что тебе нужно.
Guten Morgen! А если не Guten, то тогда это и не Morgen...

dmitriy22
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 121
Зарегистрирован: 27.04.2006 (Чт) 12:04
Откуда: Москва

Сообщение dmitriy22 » 16.08.2006 (Ср) 14:46

Alex_2005

смотрю конечно...получается надо вызывать функцию?
Я не волшебник, я просто учусь.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 16.08.2006 (Ср) 15:18

Причем тут функция? Тебе нужен доступ к открытому члену класса (то бишь формы в данном случае). Это делается так:

Код: Выделить всё
Debug.WriteLine pForm1.intLoginID


где pForm1 - экземпляр класса (формы).
Весь мир матрица, а мы в нем потоки байтов!

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 16.08.2006 (Ср) 15:22

Не функцию а свойство класса. Хотя объявления свойств класса следует делать более защищёнными от несанкционированного доступа. Ну, это уже другая история. Вобщем делашь так:

Public Class Form2
Inherits System.Windows.Forms.Form

Private Sub Test()
Messagebox.Show(Form1.intLoginID)
End Sub

End Class


А книжку об объектно-ориентированном программировании поищи. Это раньше на VB6 можно было на первых порах обойтись без ООП. А в VB.NET этот номер не пройдёт. Даже для новичка, так как в VB.NET всё является классами (даже тип string, который уже и не тип а класс).
Так что почитай, без этого в .NET дальше объявлений процедур не уйдёшь!
Guten Morgen! А если не Guten, то тогда это и не Morgen...

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 16.08.2006 (Ср) 15:24

о!!, прошу прощение. Многоуважаемый Viper меня уже опередил! :wink:
Guten Morgen! А если не Guten, то тогда это и не Morgen...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 16.08.2006 (Ср) 15:26

2 Alex_2005, а где у тебя в примере создание экземпляра? Стоит ли путать новичка возможностью обращения к классу формы без ее фактического создания? (Поубивал бы разработчиков за внесение в VB2005 этой фишки! :twisted: )
Весь мир матрица, а мы в нем потоки байтов!

dmitriy22
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 121
Зарегистрирован: 27.04.2006 (Чт) 12:04
Откуда: Москва

Сообщение dmitriy22 » 16.08.2006 (Ср) 15:59

а как тогда объявлять переменную....т.к. Public и Private.... не проходит???
Я не волшебник, я просто учусь.

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 16.08.2006 (Ср) 16:01

Да, ну, это он потом поймёт, что по идее такое обращение к свойству является не коректным, но для его примера пойдёт. Хотя ты прав, путать не стоит. :oops:
Guten Morgen! А если не Guten, то тогда это и не Morgen...

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 16.08.2006 (Ср) 16:15

Вот, попробуй. В свойствах проекта укажи старт из Sub Main

Код: Выделить всё


Public Module Start
    '
    Public f1 As Form1
    Public f2 As Form2
    '
    Public Sub Main()
        f1 = New Form1
        f1.Show()
        f2 = New Form2
        f2.Show()
    End Sub
    '
End Module

Public Class Form1
    Inherits System.Windows.Forms.Form
    '
    Public ID As String
    '
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ID = "Почему всё так сложно?"
    End Sub
    '
End Class

Public Class Form2
    Inherits System.Windows.Forms.Form
    '
    Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        MessageBox.Show(f1.ID)
    End Sub
End Class



Guten Morgen! А если не Guten, то тогда это и не Morgen...

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 16.08.2006 (Ср) 16:18

Если Private - доступна только для членов своего класса. Public - доступна для членов как своего класса, так и чужих.
Guten Morgen! А если не Guten, то тогда это и не Morgen...

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 16.08.2006 (Ср) 16:32

Public Shared? тока есть ньюанс , лучше почитай что такое Shared member :roll:

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 16.08.2006 (Ср) 16:49

to Ramzes

что то я не понял, при чём тут Shared... проясни пожалуйста
Guten Morgen! А если не Guten, то тогда это и не Morgen...

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 17.08.2006 (Чт) 10:43

Так она доступна для всего мира, и она одна (т.е. для каждого экземпляра класаа она не будет новой), я так понимаю, это и нужно :roll:

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 17.08.2006 (Чт) 10:59

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

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 17.08.2006 (Чт) 11:08

А автору остается купить книгу, где будет написано про .Net и ООП :)

dmitriy22
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 121
Зарегистрирован: 27.04.2006 (Чт) 12:04
Откуда: Москва

Сообщение dmitriy22 » 17.08.2006 (Чт) 14:41

одну на всех....чтобы была и в том и в другом классе
т.е. создав класс и объявив в нем переменную
допустим так
Код: Выделить всё
Public class Test
        Public testID AS integer
        testID=22
.......
End class

то чтобы это значение стало доступным в другом классе необходимо, чтобы новый класс наследовал первый....т.е.

Код: Выделить всё
Public class Test2

Dim i as integer
Dim t as Test = New Test
i=t.testID

End class

и тогда в результатате получается i=22 ... правильно...??? :?
Я не волшебник, я просто учусь.

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 17.08.2006 (Чт) 15:07

ЧТО И ТРЕБОВАЛОСЬ ДОКАЗАТЬ :)

dmitriy22
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 121
Зарегистрирован: 27.04.2006 (Чт) 12:04
Откуда: Москва

Сообщение dmitriy22 » 17.08.2006 (Чт) 15:24

спасибо за всегда оперативные советы....!!! Изображениев который раз понимаю...всё-таки учебники учебникам, но вот так направить на путь истинный могут только здесь!!! :P
Я не волшебник, я просто учусь.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.08.2006 (Пт) 7:53

dmitriy22 писал(а):одну на всех....чтобы была и в том и в другом классе
т.е. создав класс и объявив в нем переменную
допустим так
Код: Выделить всё
Public class Test
        Public testID AS integer
        testID=22
.......
End class

то чтобы это значение стало доступным в другом классе необходимо, чтобы новый класс наследовал первый....т.е.

Код: Выделить всё
Public class Test2

Dim i as integer
Dim t as Test = New Test
i=t.testID

End class

и тогда в результатате получается i=22 ... правильно...??? :?


А в каком месте здесь наследование? Если наследование, то
Код: Выделить всё
Public Class Test1
Public testID As Integer = 22
End Class

Public Class Test2:Inherits Test1
End Class

'....

Public Sub Main
Dim T as New Test2
Console.WriteLine T.testID
' выведено будет 22
End Sub


А если одна общая переменная, то:

Код: Выделить всё
Public Class Test1
Public Shared testID As Integer = 22
End Class

'....

Public Sub Main
Console.WriteLine Test1.testID
' выведено будет 22
End Sub
Весь мир матрица, а мы в нем потоки байтов!

dmitriy22
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 121
Зарегистрирован: 27.04.2006 (Чт) 12:04
Откуда: Москва

Сообщение dmitriy22 » 18.08.2006 (Пт) 8:51

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

ну а с помощью shared даже и не знаю..... :wink:

так все-таки каккие различия....при наследовании и при объявлении с помощью shared... когда какой метод лучше применять...???
Я не волшебник, я просто учусь.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.08.2006 (Пт) 10:47

Все зависит от того что тебе нужно. Попрубуй понятно объяснить то что тебе конкретно нужно и тогда можно будет сказать какой способ лучше.
Весь мир матрица, а мы в нем потоки байтов!

dmitriy22
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 121
Зарегистрирован: 27.04.2006 (Чт) 12:04
Откуда: Москва

Сообщение dmitriy22 » 18.08.2006 (Пт) 18:14

!Viper!
мне нужно переменную доступную во всех классах...
но ведь её можно несколькими способами сделать???
Я не волшебник, я просто учусь.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 19.08.2006 (Сб) 6:25

Поясняю. Shared мембер является общим для всех экземпляров данного класса. Он может быть как Public, то есть видим всем, Friend - виден всем в пределах проекта, Protected - видим экземплярам данного класса и экземплярам классов, наследующих от данного и Private - виден только экземплярам данного класса. Если ключевое слово Shared не установлено, то мембер является уникальным для каждого экземпляра класса, а видимость его также определяется ключевыми словами Public, Friend, Protected и Private.

Так что же тебе нужно то?
Весь мир матрица, а мы в нем потоки байтов!

dmitriy22
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 121
Зарегистрирован: 27.04.2006 (Чт) 12:04
Откуда: Москва

Сообщение dmitriy22 » 25.08.2006 (Пт) 16:19

!Viper!

вероятно мне нужен shared ....спасибо!
Я не волшебник, я просто учусь.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 100

    TopList