Pracuję nad dodatkiem Excel, który otwiera winform po kliknięciu przycisku na pasku wstążki. Ten przycisk musi być niemodalny, aby użytkownik mógł nadal wchodzić w interakcję z oknem nadrzędnym, ale musi także pozostać na szczycie okna nadrzędnego przez cały czas. Aby to osiągnąć, próbuję przekazać okno nadrzędne jako parametr do metody Show(). Oto mój kod:Jak przekazać okno właściciela do przeciążenia metody Show()?
Ribbon1.cs
private void button2_Click(object sender, RibbonControlEventArgs e)
{
RangeSelectForm newForm = new RangeSelectForm();
newForm.Show(this);
}
problem z tym kodem jest, że słowo „to” referencje klasa wstążka, nie okno nadrzędne. Próbowałem również przekazać w Globals.ThisAddIn.Application.Windows.Parent. W wyniku tego powstaje błąd środowiska wykonawczego "Najlepsza metoda przeładowania dla" System.Windows.Forms.Form.Show (System.Windows.Forms.IWin32Window) "ma pewne nieprawidłowe argumenty". Jaki jest prawidłowy sposób przekazania okna nadrzędnego do programu Show()?
Jeśli jest to istotne, jest to aplikacja Office 2010 napisana w .NET 4.0 przy użyciu C#.
EDIT --- podstawie Slaks Odpowiedź
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));
}
Właściwie dokładniej, okno próbuję odpalić z poziomu wstążki to Telerik RADFORM. – hughesdan
To jest błąd _kompaktowego-czasu_. – SLaks
Powinieneś być w stanie uzyskać aplikację łatwiej niż z właściwości addin. – SLaks