Я работаю над надстройкой Excel, которая открывает winform после того, как пользователь нажимает кнопку на панели ленты.Эта кнопка должна быть немодальной, чтобы пользователь мог по-прежнему взаимодействовать с родительским окном, но она также должна всегда оставаться над родительским окном.Для этого я пытаюсь передать родительское окно в качестве параметра в метод Show ().Вот мой код:
Ribbon1.cs
private void button2_Click(object sender, RibbonControlEventArgs e)
{
RangeSelectForm newForm = new RangeSelectForm();
newForm.Show(this);
}
Проблема с этим кодом заключается в том, что слово «this» относится к классу ленты, а не к родительскому окну.Я также попытался передать в Globals.ThisAddIn.Application.Windows.Parent.Это приводит к ошибке во время выполнения «У наилучшего перегруженного метода совпадения для« System.Windows.Forms.Form.Show (System.Windows.Forms.IWin32Window) »есть недопустимые аргументы».Как правильно передать родительское окно в Show ()?
В случае необходимости это приложение Office 2010, написанное на .NET 4.0 с использованием C #.
EDIT ---на основании ответа Слакса
using Excel = Microsoft.Office.Interop.Excel;
...
class ArbitraryWindow : IWin32Window
{
public ArbitraryWindow(IntPtr handle) { Handle = handle; }
public IntPtr Handle { get; private set; }
}
private void button2_Click(object sender, RibbonControlEventArgs e)
{
RangeSelectForm newForm = new RangeSelectForm();
Excel.Application instance = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
newForm.Show(new ArbitraryWindow(instance.Hwnd));
}