Страница: 1 |
Страница: 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-сайт:
Профиль | | #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
вот как ни странно это и не помогало... пока не объявил В МОДУЛЕ - только тогда все стали видеть.
Вопрос и озвучен выше - КАК передать значение? Т.е. иначе говоря этот ответ для меня оказался непонятным.
Все "съедает" при вводе, но при запуске ругается:
-----
Object reference not set to an instance of an object
-----
Номер ответа: 4
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #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
Это он про Owner?
Значит ты не сделал foo.Show(Me)
Номер ответа: 5
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #5
Добавлено: 16.09.06 10:35
можно ещё объявить не в модуле, а в классе, но shared - тож будет видна всем, но одна для всех экзепляров - т.е. собсна экв-но модульной объяве.
Номер ответа: 6
Автор ответа:
Marki
Вопросов: 42
Ответов: 94
Профиль | | #6
Добавлено: 16.09.06 10:54
почему-то не заработало... но важен результат - объявление в модуле спасло, так что все ок, спасибо.
Номер ответа: 7
Автор ответа:
Marki
Вопросов: 42
Ответов: 94
Профиль | | #7
Добавлено: 16.09.06 11:01
Значит ты не сделал foo.Show(Me)
Каюсь, был немного невнимателен.
Но оказалась и другая засада.
После
foo.MdiParent = Form1
ругается на
foo.Show(Me)
вот если без MdiParent, то все ок, но "из песни слов не выкинешь".
Номер ответа: 8
Автор ответа:
Marki
Вопросов: 42
Ответов: 94
Профиль | | #8
Добавлено: 16.09.06 11:12
зашился
VB 2005 Express Edition ругается на "555"
Номер ответа: 9
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #9
Добавлено: 16.09.06 11:22
по-моему ты мой код кусками как-то копируешь (причём не те куски) - хоть бы вникал уж тогда. Как он, скажи мне, может ругаться, если ему сказано, что Public Sub New(ByVal some_var As Integer)?
Про MDI ты вообще первый раз сказал.
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-сайт:
Профиль | | #10
Добавлено: 16.09.06 11:25
Это у тебя реально работает? Экземпляру приравниваешь класс и всё тип-топ?
Стганно, очень стганно...
Номер ответа: 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
с
разобрался, ВСЕ ОК!
ПРЕМНОГО благодарен
Виноват, видимо упоминалось раньше в другом вопросе, здесь выпало из поля зрения.