.NET WinForms Custom Control: как получить ссылку на содержащую форму - PullRequest
2 голосов
/ 24 сентября 2010

Существует ли способ при создании пользовательского элемента управления / пользовательского элемента управления WinForms получить ссылку во время выполнения на форму, на которой размещен элемент управления, чтобы получить доступ к различным свойствам этой формы? Я бы не стал передавать ссылку на форму в конструктор элемента управления, поскольку по разным причинам мне нужно оставить конструктор по умолчанию без параметров.

Один пример: у меня есть несколько пользовательских элементов управления, которые инкапсулируют вызовы Win32 API, и некоторые вызовы требуют, чтобы дескрипторы окна передавались как параметры. Я хотел бы иметь возможность получить дескриптор содержащей формы, чтобы я мог передать его функции API.

Другой пример: у меня есть пользовательский элемент управления, который предоставляет пользовательские уведомления в стиле «тост». Я хотел бы иметь возможность открывать форму уведомления в месте, относящемся к местоположению основной формы приложения, например по центру главного окна, справа и т. Д. Это невозможно, очевидно, без знания координаты главного окна приложения.

I может прибегнуть к использованию вызовов API типа FindWindowEx () в некоторых случаях, но это похоже на пометку и не будет работать во всех случаях.

Кто-нибудь знает, возможно ли это?

Ответы [ 3 ]

1 голос
/ 24 сентября 2010

Вы можете использовать Control.TopLevelControl свойство.

0 голосов
/ 24 сентября 2010

Попробуйте метод FindForm .Имейте в виду, что он вернет null, если вызывается в конструкторе вашего элемента управления.

Если вы можете дождаться события OnParentChanged, FindForm вернет ссылку на родительскую форму.

0 голосов
/ 24 сентября 2010

Вы хотите Control.Parent, который возвращает родительский элемент управления. Чтобы получить форму, просто вызывайте parent на всех ваших родительских элементах управления, пока не нажмете System.Windows.Forms.Form.

...