1

カスタム リボン パネルhttp://www.codeproject.com/Articles/25907/A-Professional-Ribbon-You-Will-Use-Now-with-orbを使用しようとしています。 「プラグイン」.dll を使用するアプリケーションを作成します。これは私が現在試しているコードです。

        Assembly assembly = Assembly.LoadFrom(@"dir");
        Type type = assembly.GetType("WindowsFormsControlLibrary2.UserControl1");
        object o = Activator.CreateInstance(type);
        string s = "GiveControl";
        UserControl uc = (UserControl)type.GetMethod(s).Invoke(o, null);
        ((Panel)uc.Controls.Find("panel1", true)[0]).Parent = panel2;

        RibbonTab rt = (RibbonTab)uc.Controls.Find("ribbonTab1", true)[0];

最後の行で、「タイプ 'System.Windows.Forms.Control' を 'System.Windows.Forms.RibbonTab' に変換できません」というエラーが表示されます。

このメッセージが何を意味するかは明らかですが、なぜそれが起こっているのかわかりません。カスタム コントロールがこのように見つからない理由はありますか?

このコード/アプリケーションは、概念実証/これを行う方法を見つけようとしているだけです (私の最初の試み)。これを行うための既知の方法をいただければ幸いです。

------UPDATE------
お詫び申し上げます。このエラーは実行時ではなく、コンパイル時に発生しています。

4

2 に答える 2

2

返されたコントロール実際にSystem.Windows.Forms.RibbonTab.

ただし、実行時にはそうではありません。コードを修正して、診断を容易にすることができます。書く代わりに:

RibbonTab rt = (RibbonTab)uc.Controls.Find("ribbonTab1", true)[0];

私はそれを分割して、いくつかのエラーチェックを行います:

Control controls[] = uc.Controls.Find("ribbonTab1", true);
if (controls.Length == 0)
{
   // No "ribbonTab1" control was found - 
}   

Control rtControl = controls[0];
RibbonTab rt = rtControl as RibbonTab;
if (rt == null)
{
    // The first control named "ribbonTab1" wasn't actually a ribbon tab...
    // Check rtControl.GetType() to see what type it is actually defined to be
}
于 2012-10-09T00:23:09.327 に答える
1

これは、RibbonTabがコントロールではないためです

public class RibbonTab : Component, IRibbonElement, IContainsRibbonComponents
于 2012-10-09T02:01:49.770 に答える