0

リボンバーのボタンからツール ウィンドウを showdialog として表示するアドインがあります。このモデル バージョンは正常に動作します。ここで、フォームの下にあるスプレッドシートとの対話を許可する必要があります。私が試してみました:

spec.Show(((IWin32Window)Globals.myAddin.Application.ActiveWindow));

そして、「疑わしいキャスト」エラーが発生します。もちろん、ツールバーは「IWin32Window」にキャスト可能なフォームではないため、「これ」は惨めに失敗します

これを組み込みの検索ウィンドウのように機能させて、それを呼び出して、基になるスプレッドシートを操作できるようにしたいと考えています。フォームは非常に単純です。

public partial class Spec : Form

明らかに、私は何かが欠けています。ティア


Slaks のコメントに基づいてこれを追加します。

    public class DialogService
    {
        public void ShowDialog(Form dialog)
        {
            NativeWindow mainWindow = new NativeWindow();
            //mainWindow.AssignHandle(Process.GetCurrentProcess().MainWindowHandle);
            Application app = new Application();
            mainWindow.AssignHandle(new IntPtr(app.Hwnd));
            dialog.Show(mainWindow);
            mainWindow.ReleaseHandle();

        }
   }

app.Hwnd または Process.GetCurrentProcess().MainWindowHandle を使用すると、フォームがすぐに消えてしまう問題。おそらく私はこれを過度に複雑にしました。私がここで行ったことよりも良い方法はありますか?

4

1 に答える 1

0

プロパティからIWin32WindowExcelを実装して返す独自のクラスを作成する必要があります。HWNDHandle

于 2012-10-04T18:57:13.467 に答える