我目前正在研究一個小小的outlook-addin。我的插件打開一個對話框(System.Windows.Forms.Form)。如何在應用程序頂部保留一個對話框
我想保留對話框的頂部的前景,所以我嘗試了TopMost,但保持對話的頂部的所有應用程序。
當outlook是活動應用程序時,我希望對話框位於頂部,我該如何實現這一目標?
UPDATE
由於梅德和kallocain我可以解決這個問題。我想簡要介紹一下我的所得溶液:
在TabCalendarRibbon類我的Outlook插件我有激活我的對話框事件方法,我用從kallocain的代碼來獲取窗口句柄:
Explorer explorer = Context as Explorer;
IntPtr explorerHandle = (IntPtr)0;
if (explorer != null)
{
IOleWindow window = explorer as IOleWindow;
if (window != null)
{
window.GetWindow(out explorerHandle);
}
}
正如在kollacains答案中所述,我不得不添加OLE互操作程序集。我用資源管理器手柄顯示我的對話框:
var dlg = new NewEntryDialog();
dlg.Show(new WindowWrapper(explorerHandle));
正如你可能會注意到,我不能使用窗口直接辦理,但必須實現實現IWin32Window一個小包裝。爲此,我跟着我通過Dmitry鏈接到的上一個答案找到的描述。我簡單地複製了以下代碼:
public class WindowWrapper : System.Windows.Forms.IWin32Window
{
public WindowWrapper(IntPtr handle)
{
_hwnd = handle;
}
public IntPtr Handle
{
get { return _hwnd; }
}
private IntPtr _hwnd;
}
瞧,它的工作原理與我預期的非常相似。如果只要我在日曆功能區中,對話框只會處於活動狀態,那就更好了,但那是另一天的事情。順便說一句,結果,我想...
可能重複http://stackoverflow.com/questions/2613494/how-to-make-form-topmost-to-the-application-only – Akrem