| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > Получить ссылку на форму,содержащую мой Компонент |
| Автор: lam0x7C4 12.7.2007, 17:54 | ||
Создал я типа свой компонент ( myComponent: Component), в дизайнере форми бросаю его на форму. Как получить ссилку на эту форму.
Ничего не получаеться |
| Автор: Naum 12.7.2007, 18:36 |
А чем это не нравится? |
| Автор: lam0x7C4 12.7.2007, 18:39 | ||
Не работает. После етого frmParent == null. |
| Автор: tol05 12.7.2007, 19:19 |
значит, контрол принадлежит не форме, а контолу на этой форме (панели, например, или GroupBox-у) Если контейнер принял твой контрол в свою коллекцию (container.Add(this); сработало), то он не может быть равен null. контейнер не приводится к типу Form (базовому для всех форм) - Значит контейнер - просто не форма |
| Автор: lam0x7C4 13.7.2007, 09:40 |
| Просто у меня не контрол( Control ), a компонент( Component ). Ето немножко разние вещи. В дизайнере он[Component] бросаеться не на форму, он бросаеться на полоску, что под формой( туда куда MenuStrip бросаетья )... Ну предположим, принадлежит компонент не форме, а контролу. Как тогда контрол найти? Проблема вроде елементарная, но |
| Автор: tol05 13.7.2007, 10:09 | ||||
| я говорил об общем принципе, когда упоминал о контроле. Это не принципиально. Как найти? Ну допустим, есть форма, на ней панель, на панели - кнопка. Тогда так:
можно и так...
тогда все ищется только через форму. Но "[0]" - сам понимаешь, криво... Все равно потом цикл по всем найденным делать нужно. |
| Автор: Naum 13.7.2007, 10:20 | ||
|
| Автор: lam0x7C4 13.7.2007, 10:46 | ||||||
Unable to cast object of type 'System.ComponentModel.Container' to type 'System.Windows.Forms.Control'. tol05, пасиба за инфу. Но проблема немножко не в этом. Мне не надо находить контрол, зная форму. Все, что у меня есть, ето компонент, который я буду потом юзать на разных формах . Тоесть, форму надо всегда определять в конструкторе.(Хотя я уже сомневаюсь, что ето реально)
p.s.Опять же, если бы это был Control, я бы форму уже давно нашел(там просто), у меня Component. p.p.s. Все равно, всем пасиба за помощь |
| Автор: lam0x7C4 13.7.2007, 15:04 | ||||
Пасиба Ща потестирую... |
| Автор: Naum 13.7.2007, 16:04 |
| А еще в отладчике можно посмотреть какого типа IConteiner передается в конструктор твоего компонента. |
| Автор: lam0x7C4 13.7.2007, 17:38 |
| ммм, чё-то не очень оно хочет работать Короче: |
| Автор: mr.DUDA 13.7.2007, 22:57 |
| Извиняюсь, а this.Parent что не катит ? |
| Автор: lam0x7C4 16.7.2007, 17:05 | ||
Сорри, что не отвечал так долго - инет глючит. Неа, в даном случае не катит. Просто надо получить ссилку на форму еще до того как она становиться видимой для юзера. И вот фишка в том, что до етого момента this.Parent == null. Нужно ловить ссилку на форму в каком-то собитии(Пробовал "Load" компонента, но и там не катит, больше не нашел подходящих событий). -- Ах, да. Свойства Parent в компонента нет. |
| Автор: mr.DUDA 16.7.2007, 22:59 |
| Метод FindForm ещё есть. |
| Автор: lam0x7C4 17.7.2007, 12:16 | ||
Спасиба, пригодиться Думаю, тему можно закривать. |
| Автор: Mr_Smith 1.4.2008, 10:05 |
| Рановато закрывать, потому как итог такой - много флуда, а решение так и не найдено. |
| Автор: mr.DUDA 1.4.2008, 10:40 |
| Mr_Smith, на основании чего сделан столь глубокомысленный вывод? |
| Автор: Mr_Smith 1.4.2008, 10:54 | ||||
| Потому как все упорно рассказывали как получить свойство от контрола, а не от компонента, а это разные вещи. Сделать можно так: http://www.codeproject.com/KB/smart/VBNET__Windows_Forms_.aspx а так сделали микрософтовцы в своем еррор провайдере:
|
| Автор: mr.DUDA 1.4.2008, 10:59 |
| Мда, компонент и контрол действительно разные вещи, в Controls некоторые не найдёшь. |
| Автор: Mr_Smith 1.4.2008, 11:29 |
| Хмммм.... попробовал и как в статье и как в примере. не получается. поделитесь кодом если у кого получится, вполне вероятно что все дело в кривизне моих рук |
| Автор: Mr_Smith 2.4.2008, 04:59 | ||
Покамлав, получил такое решение:
|