2012-10-09 37 views
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 ------
應該說,我應該說,這個錯誤發生在編譯時,而不是在運行時。

+2

我會調試,看看是什麼樣的控制,發現越來越確保它是RibbonTab控制 –

+0

請參閱評論「裏德科普塞」回答 – Seige

+0

我意識到這是發生在運行時,裏德科普塞和我已經到了s ame的結論是,你正在試圖控制的控件可能不是一個ribbontab –

回答

1

這是因爲RibbonTab不是控制

public class RibbonTab : Component, IRibbonElement, IContainsRibbonComponents 
+0

技術上正確,所以我將檢查這個答案。感謝Reed Copsey – Seige

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

查看更新。 只需放入代碼即可。uc.Controls.Find(「ribbonTab1」)不會返回任何內容。出於某種原因,應用程序看到沒有將RibbonTab視爲控件。現在還有一個與我在問題中使用的控件的鏈接。 – Seige

+1

@Seige你是否在找面板?等等?爲什麼不直接創建一個新的控件? –

+0

是的,我只是想知道它是否得到了控件(不投射),並且面板仍然在窗體上顯示。控制列表只是空的。我試圖實現的是一個應用程序,當一個「插件」dll被放置在它旁邊時,它將被合併到應用程序中。包括設計和代碼。抱歉有互聯網問題。 – Seige

相關問題