Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Не смейтесь только :) Добавлено: 16.09.06 01:13  

Автор вопроса:  Marki
Пусть вопрос не покажется очень банальным... ))
Интересует как объявить переменную (используется в коде родительской формы) так, чтобы она была доступна в коде дочерних форм.
Ну или как можно при открытии формы "заслать" ей необходимые данные.

ps смотрю тут достаточно ответов на разные вопросы - как простые, так и сложные (в моем, конечно, понимании). Хотя я несколько раз обращался - мне ни разу не ответили. Слишком простое спрашиваю? :)

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 Viper



ICQ: 249094859 

Вопросов: 0
Ответов: 310
 Профиль | | #1 Добавлено: 16.09.06 07:36
1. объявляй As Public. и она будет доступна всем.
2. передавай значение переменной в конструкторе формы.

Ответить

Номер ответа: 2
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #2
Добавлено: 16.09.06 08:35
3. Объявляешь public внутри класса формы, а потом из дочерней вынимаешь это значение:

Public Class Form1
    Public MyVar As Integer = 555

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim foo As New Form2
        foo.Show(Me)
    End Sub
End Class


Public Class Form2

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox(CType(Me.Owner, Form1).MyVar.ToString)
    End Sub
End Class

Ответить

Номер ответа: 3
Автор ответа:
 Marki



Вопросов: 42
Ответов: 94
 Профиль | | #3 Добавлено: 16.09.06 10:02
объявляй As Public. и она будет доступна всем

вот как ни странно это и не помогало... пока не объявил В МОДУЛЕ - только тогда все стали видеть.

передавай значение переменной в конструкторе формы.

Вопрос и озвучен выше - КАК передать значение? Т.е. иначе говоря этот ответ для меня оказался непонятным.

MsgBox(CType(Me.Owner, Form1).MyVar.ToString)

Все "съедает" при вводе, но при запуске ругается:
-----
Object reference not set to an instance of an object
-----

Ответить

Номер ответа: 4
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #4
Добавлено: 16.09.06 10:31
пока не объявил В МОДУЛЕ - только тогда все стали видеть.

Это настолько само собой разумеется, что об этом не говорят.

Вопрос и озвучен выше - КАК передать значение? Т.е. иначе говоря этот ответ для меня оказался непонятным.

У класса формы


Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim foo As New Form2(555)
        foo.Show()
    End Sub
End Class

Public Class Form2
    Dim m_var As Integer
    Public Sub New(ByVal some_var As Integer)
        Me.InitializeComponent()
        m_var = some_var
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox(m_var.ToString)
    End Sub
End Class


Object reference not set to an instance of an object

Это он про Owner?
Значит ты не сделал foo.Show(Me)

Ответить

Номер ответа: 5
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #5
Добавлено: 16.09.06 10:35
можно ещё объявить не в модуле, а в классе, но shared - тож будет видна всем, но одна для всех экзепляров - т.е. собсна экв-но модульной объяве.

Ответить

Номер ответа: 6
Автор ответа:
 Marki



Вопросов: 42
Ответов: 94
 Профиль | | #6 Добавлено: 16.09.06 10:54
можно ещё объявить не в модуле, а в классе, но shared

почему-то не заработало... но важен результат - объявление в модуле спасло, так что все ок, спасибо.

Ответить

Номер ответа: 7
Автор ответа:
 Marki



Вопросов: 42
Ответов: 94
 Профиль | | #7 Добавлено: 16.09.06 11:01
Это он про Owner?
Значит ты не сделал foo.Show(Me)

Каюсь, был немного невнимателен.
Но оказалась и другая засада.
После

foo.MdiParent = Form1

ругается на

foo.Show(Me)

вот если без MdiParent, то все ок, но "из песни слов не выкинешь".

Ответить

Номер ответа: 8
Автор ответа:
 Marki



Вопросов: 42
Ответов: 94
 Профиль | | #8 Добавлено: 16.09.06 11:12
Dim foo As New Form2(555)


зашился :(
VB 2005 Express Edition ругается на "555"

Ответить

Номер ответа: 9
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #9
Добавлено: 16.09.06 11:22
VB 2005 Express Edition ругается на "555"

по-моему ты мой код кусками как-то копируешь (причём не те куски) - хоть бы вникал уж тогда. Как он, скажи мне, может ругаться, если ему сказано, что Public Sub New(ByVal some_var As Integer)?

вот если без MdiParent, то все ок, но "из песни слов не выкинешь".

Про MDI ты вообще первый раз сказал.

Public Class Form1
    Public MyVar As Integer = 555
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim foo As New Form2
        foo.MdiParent = Me
        foo.Show()
    End Sub
End Class

Public Class Form2
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox(CType(Me.ParentForm, Form1).MyVar.ToString)
    End Sub
End Class

Ответить

Номер ответа: 10
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #10
Добавлено: 16.09.06 11:25
foo.MdiParent = Form1

Это у тебя реально работает? Экземпляру приравниваешь класс и всё тип-топ?
Стганно, очень стганно...

Ответить

Номер ответа: 11
Автор ответа:
 Marki



Вопросов: 42
Ответов: 94
 Профиль | | #11 Добавлено: 16.09.06 11:48
Некорректно сюда мысль перенес, сорри. Дословно работает вот это:

Public Class Form1
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim frm As New form2()
    With frm
        .MdiParent = Me
        .Show()
    End With
  End Sub
End Class


с
Dim foo As New Form2(555)

разобрался, ВСЕ ОК!
ПРЕМНОГО благодарен :)

Про Про MDI ты вообще первый раз сказал

Виноват, видимо упоминалось раньше в другом вопросе, здесь выпало из поля зрения.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам