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