![]() |
Запустившее приложение в качестве родителя на C#
Есть программа CorelDRAW и в неё интегрирован VSTA.
Пишу Addin на C# в этом VSTA, из кода в приложении создаю кнопку, которая запускает мою форму: Form1 frm = new Form1(this.app); frm.Show(); Но форма создаётся как независимое окно. К примеру сворачивание разворачивание CorelDRAW на мою форму никак не влияет. Если использовать ShowDialog(), тогда всё вроде бы ок, форма становится зависимой от окна CorelDRAW, но она блокирует его. Т.е. в приложении невозможно что либо делать пока открыта моя форма. Вопрос: Как так хитро запустить форму что бы она зависела от окна приложения и не блокировала его? Есть идеи? |
Sanchos, тебе надо вызывать форму как обычную форму, т.к. ты и так указываешь при вызове, что Corel является родителем твоей формы. Далее тебе надо привязаться к событию главного приложения - State Changed. И проверять примерно так:
Код:
if(this.WindowsState == WindowState.Minimized) |
Delirium, если ты про Form1(this.app) тогда это просто передача переменной app в форму, т.к. она объявляется в Main.cs внутри #region VSTA generated code след. видом app = (Application)this.Host;.
По поводу отслеживать состояние окна CorelDRAW идея вроде хорошая, у него в объектной модели даже есть AppWindow.WindowState, вот только события нету на которое можно было бы эту проверку повешать. Да и проблема останется в том, что если я с формы переключусь на CorelDRAW, форма окажется под окном приложения. Можно конечно и TopMost менять, но это уже каким то гемороем попахивает ((( Должно же быть какое то элементарное и изящное решение. |
придумал таки:
Код:
frm.Show(System.Windows.Forms.Control.FromHandle((IntPtr)app.AppWindow.Handle)); |
Ну вот видишь, главное было подтолкнуть в нужную сторону :)
|
Время: 01:07. |
Время: 01:07.
© OSzone.net 2001-