Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Запустившее приложение в качестве родителя на C# (http://forum.oszone.net/showthread.php?t=218130)

Sanchos 17-10-2011 01:43 1774990

Запустившее приложение в качестве родителя на C#
 
Есть программа CorelDRAW и в неё интегрирован VSTA.
Пишу Addin на C# в этом VSTA, из кода в приложении создаю кнопку, которая запускает мою форму:

Form1 frm = new Form1(this.app);
frm.Show();


Но форма создаётся как независимое окно. К примеру сворачивание разворачивание CorelDRAW на мою форму никак не влияет.
Если использовать ShowDialog(), тогда всё вроде бы ок, форма становится зависимой от окна CorelDRAW, но она блокирует его.
Т.е. в приложении невозможно что либо делать пока открыта моя форма.

Вопрос:
Как так хитро запустить форму что бы она зависела от окна приложения и не блокировала его? Есть идеи?

Delirium 17-10-2011 12:50 1775227

Sanchos, тебе надо вызывать форму как обычную форму, т.к. ты и так указываешь при вызове, что Corel является родителем твоей формы. Далее тебе надо привязаться к событию главного приложения - State Changed. И проверять примерно так:
Код:

if(this.WindowsState == WindowState.Minimized)
frm.WindowState = WindowState.Minimized;


Sanchos 17-10-2011 13:47 1775277

Delirium, если ты про Form1(this.app) тогда это просто передача переменной app в форму, т.к. она объявляется в Main.cs внутри #region VSTA generated code след. видом app = (Application)this.Host;.

По поводу отслеживать состояние окна CorelDRAW идея вроде хорошая, у него в объектной модели даже есть AppWindow.WindowState, вот только события нету на которое можно было бы эту проверку повешать. Да и проблема останется в том, что если я с формы переключусь на CorelDRAW, форма окажется под окном приложения. Можно конечно и TopMost менять, но это уже каким то гемороем попахивает (((

Должно же быть какое то элементарное и изящное решение.

Sanchos 17-10-2011 14:15 1775286

придумал таки:

Код:

frm.Show(System.Windows.Forms.Control.FromHandle((IntPtr)app.AppWindow.Handle));

Delirium 18-10-2011 01:08 1775770

Ну вот видишь, главное было подтолкнуть в нужную сторону :)


Время: 01:07.

Время: 01:07.
© OSzone.net 2001-