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-----
Appologies,我应该说,这个错误发生在编译时,而不是运行时。

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 回答