Страница: 1 |
Страница: 1 |
Вопрос: Изменить значение у контрола на родительской форме
Добавлено: 30.06.06 14:12
Автор вопроса: Алексей | Web-сайт:
Собственно проблема такая:
Есть mdi-форма (IsMdiContainer=True), отображаю в ней окно:
Dim frmStart as New Form1
frmStart.MdiParent=Me
frmStart.Show()
На mdi-форме есть StatusBar, как мне из формы потомка изменить у StatusBar значение св-ва "Text"???
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
LeX
ICQ: 301424893
Вопросов: 28
Ответов: 277
Web-сайт:
Профиль | | #1
Добавлено: 30.06.06 14:35
Номер ответа: 2
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #2
Добавлено: 01.07.06 02:41
Что значит "потомка"? При чем тут вообще наследование?
Если речь идет о форме, открытой в контейнере MDI, то нужно иметь глобальную сыслку на MDI-форму, как это сделать, здесь не раз обсуждалось.
Разумеется, модификатор у контрола к которому ты хочешь получить доступ, должен быть Friend или Public
Номер ответа: 3
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #3
Добавлено: 01.07.06 02:46
Сори за второй пост, но...
В .NET 2.0 можно обращаться к свойствам класса формы напрямую, не использую глобальную ссылку.
Допустим, класс нашей MDI формы имеет имя MdiForm.
В этом случае в дочерней форме мы можем доступаться до ее членов через имя класса:
MdiForm.StatusBar1.Value=50
Я точно не знаю как работает данный механизм, судя по всему при компиляции генерируется shared-экземпляр формы к к котому адресуются эти вызовы.
Номер ответа: 4
Автор ответа:
LeX
ICQ: 301424893
Вопросов: 28
Ответов: 277
Web-сайт:
Профиль | | #4
Добавлено: 01.07.06 18:07
Суть та же, что и у меня...
Номер ответа: 5
Автор ответа:
Алексей
ICQ: 224329870
Вопросов: 4
Ответов: 5
Web-сайт:
Профиль | | #5
Добавлено: 03.07.06 08:22
сорри, не так выразился, имелась в виду дочерняя форма
собственно пытался делать так:
в дочерней форме:
dim frmParent as New mdiParent 'mdiParent - форма со StatusBar'ом
frmParent.StatusBar1.Panels(1).text="some text" 'на статусбаре есть 2 панели, на одной из них я хочу поменять текст
после выполнения данного кода на панели статусбара ничего не меняется...
Номер ответа: 6
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #6
Добавлено: 03.07.06 16:11
А ничего и не будет меняться.. поскольку ты создаешь НОВЫЙ (невидимый) экземпляр MDI-формы..
Тут у тебя 2 пути:
Как уже сказали, в VS2005 можешь обращаться на прямую к нужному свойству..
где MDIFormName - имя твоей MDI-формы
А в VS2003 сначала необходимо получить ссылку на MDI-форму.. сделать это можно через св-во MdiParent дочерней формы. Через CType приводишь это свойство к типу твоей MDI-формы, и дальше уже работаешь со всем что на ней находится...
Номер ответа: 7
Автор ответа:
Алексей
ICQ: 224329870
Вопросов: 4
Ответов: 5
Web-сайт:
Профиль | | #7
Добавлено: 03.07.06 16:51
Спасибо, помогло.
в дочерней форме:
mdiParent = CType(Me.MdiParent, Form1)
mdiParent.StatusBar1.Panels(0).Text = "some text"
Номер ответа: 8
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #8
Добавлено: 04.07.06 00:42
Вот и славненько.. )
Значит одной проблемой у тебя меньше стало.. ))