不能投射自定义控制

时间:2012-10-09 00:11:15

标签: c# custom-controls controls ribbon

我正在尝试使用自定义功能区面板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
App ::我应该说,这个错误发生在编译时,而不是在运行时。

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

这是因为RibbonTab不是控件

public class RibbonTab : Component, IRibbonElement, IContainsRibbonComponents