リボンバーのボタンからツール ウィンドウを 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 を使用すると、フォームがすぐに消えてしまう問題。おそらく私はこれを過度に複雑にしました。私がここで行ったことよりも良い方法はありますか?