質問

I have Internet Explorerのブラウザのヘルパーオブジェクト(ポ)で記述されたスレッドセーフで、c#、および様々な場所を開けているモーダルダイアログ.この作品がある場合もあださい。の場合にできたらいいのに再現在はIEではwebブラウザでjavascriptの実行を開その他の子ウィンドウは...うことなんでしょうけれどひそかに注目を集めてい混乱してどこかに....

問題は呼び出:

(new MyForm(someParam)).ShowDialog();

形のないモーダルだったので、をクリックしIE画面で取得します。以来、家の中の私のコードなリフレッシュおよびそのため、ユーザーで表示されることIEが掛け流しです。

があることを確実にする形で開きとしてモーダル、すなわれることはできませんの形の隠れ家です。

(私はIE7.)

※これは同様の問題 このポスト が、それをjava.しないといけないのではないか解決は正しく過は、IWin32Windowの家の窓だけます。

役に立ちましたか?

解決 2

んになっているので、そこを意識への答えを自分の質問ですが---

この場合には、正しいIWin32WindowのShowDialog()メソッドです。フレキシビリティはどのように取得します。また、'siteObjectのオブジェクトに渡されたSetSite()メソッドのポ:

IWebBrowser2 browser = siteObject as IWebBrowser2;
if (browser != null) hwnd = new IntPtr(browser.HWND);
(new MyForm(someParam)).ShowDialog(new WindowWrapper(hwnd));

...

// Wrapper class so that we can return an IWin32Window given a hwnd
public class WindowWrapper : System.Windows.Forms.IWin32Window
{
    public WindowWrapper(IntPtr handle)
    {
        _hwnd = handle;
    }

    public IntPtr Handle
    {
        get { return _hwnd; }
    }

    private IntPtr _hwnd;
}

感謝 ライアン のWindowWrapperクラスは、い期待が内蔵されてないという。

更新:こんにIE8と保護モードでのアクセスすHWND外の何日目かを表しています。代わりにご利用HWNDの現在のタブ(又はその他のソリューション?), 例えばます。純例 このポスト のための多種多様なレストランがたくさん。

他のヒント

こちらはより簡潔なバライアン/ロリーのWindowWrapperコード:

internal class WindowWrapper : IWin32Window
{
    public IntPtr Handle { get; private set; }
    public WindowWrapper(IntPtr hwnd) { Handle = hwnd; }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top