2012-10-09 4 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.RibbonTab'에서 'System.Windows.Forms.Control'"

그것의 명백한 어떤이 메시지의 오류를주고있다 의미하지만, 나는 그것이 왜 일어나고 있는지 이해하지 못한다. 이 방법으로 사용자 지정 컨트롤을 찾을 수없는 이유가 있습니까?

이 코드는/응용 프로그램은 개념 증명/이것을 수행하는 방법을 찾으려고 시도합니다 (첫 번째 시도). 이 작업을 수행 할 수있는 알려진 방법이 있으면 알려 주시면 감사하겠습니다.

------ 업데이트 ------
이러한 오류는 런타임시가 아니라 컴파일시에 발생합니다.

+2

내가 디버그 좀 무엇을 볼 것이다 컨트롤이 리본 상자 컨트롤인지 확인합니다. –

+0

"Reed Copsey"답변 – Seige

+0

에 대한 의견보기 런타임에 Reed Copsey가 발생하고 있습니다. ame 결론, 캐스팅하려는 컨트롤이 리본 탭이 아닐 수도 있습니다. –

답변

1

public class RibbonTab : Component, IRibbonElement, IContainsRibbonComponents 
+0

기술적으로 정확하므로 답을 확인해 보겠습니다. Reed Copsey 감사합니다. – Seige

2

코드 이어야합니다. 단, 반환 된 컨트롤이 실제로 System.Windows.Forms.RibbonTab 인 경우에 한합니다.

그러나 런타임에는 그렇지 않습니다. 코드를 재 작업하여 쉽게 진단 할 수 있습니다. 대신 쓰기의 :

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

나는 그것을 중단하고 일부 오류 검사 할 것 :이 RibbonTab가 제어되지 않기 때문에

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이 옆에 놓여질 때, 그것은 응용 프로그램에 incorperated되는 응용 프로그램입니다. 디자인 및 코드 포함. 죄송 인터넷 문제가 있습니다. – Seige