#c# #winforms #outlook #vsto #outlook-addin
#c# #winforms #outlook #vsto #outlook-надстройка
Вопрос:
Всем доброго дня.
У всех моих пользователей есть 2 монитора. У меня есть надстройка VSTO Outlook, которая в основном представляет собой кнопку ленты и форму. Если нажать кнопку моей ленты, я создаю и отображаю новую форму. Я не хочу, чтобы моя форма отображалась на том же мониторе, на котором отображается Outlook. Я хочу открыть его на другом мониторе. Это то, что я обычно делаю в обычных приложениях winforms:
Screen[] allScreens = Screen.AllScreens;
int i = allScreens.Count<Screen>();
if (i > 1)
{
foreach (Screen s in allScreens)
{
if (s.DeviceName != Screen.FromControl(this).DeviceName)
{
myForm.Location = s.WorkingArea.Location;
myForm.maximise = true;
myForm.Show();
}
}
}
else
{
this._outlookAuths.Show(this);
}
Но при работе в классе Ribbon указатель «this» отсутствует. Я попытался получить монитор, на котором отображается кнопка ленты, но он не является частью обычного класса кнопок winforms. Попытался получить родительский элемент моей формы, который должен быть MS Outlook, но возвращает null. Как и в качестве примечания, свойство CentreParent в моей форме также не работает, но CentreParent — это своего рода противоположность тому, что я хочу. Заранее спасибо.
Комментарии:
1. Вы можете проверить и изменить экран в своей форме, прежде чем он будет показан.
Ответ №1:
Используйте Screen.FromHandle
вместо этого. Вы можете получить HWND
доступ к окнам Outlook, приведя Explorer
объекты или Inspector
объекты ООМ к IOleWindow
интерфейсу и вызвав IOleWindow.GetWindow
.
Используйте Application.ActiveWindow
/ ActiveExplorer
/ ActiveInspector
в зависимости от вашего определения «где отображается Outlook».
Комментарии:
1. Если ответ отвечает на ваш вопрос, пожалуйста, отметьте его как таковой. Спасибо!
2. Спасибо. Только сейчас увидел ваш ответ. Я помню, что спецификация изменилась вскоре после того, как я опубликовал вопрос, и они хотели, чтобы моя форма отображалась на том же мониторе, что и Outlook