2010-04-28 6 views
2

Windows 응용 프로그램에 일부 타사 컨트롤을 사용했습니다.타사 컨트롤에 텍스트를 적용하는 동안 프로그래밍 문제

양식의 모든 컨트롤의 모든 .text 속성을 다시 초기화하는 코드에서 사용되는 스 니펫이 있습니다.

컨트롤을 제외한 모든 기능이 정상적으로 작동합니다. 이 컨트롤은 드롭 다운 모양을 가지고 있다는 점을 제외하고 Windows 패널과 비슷합니다. 이 컨트롤에는 연결된 .Text 속성 대신 .Caption 속성이 있습니다.

이 나는 ​​등

코드 텍스트는 상기 방법에 DropDownPanel 제어 여기 설정되지
foreach (Control oControl in this.Controls) 
{ 
    if (oControl is DropDownPanel) 
    { 
     { 
      oControl.Text = rm_ResourceManager.GetString(oControl.Name + ".Text"); 
     } 
    } 
} 

를 사용할 때마다 문제를 야기한다. DropDownPanel 컨트롤에는 .Text를 사용할 수 없기 때문에.

나는 할 수 없어 다음 중 하나 .. 나는 이러한 조건을 극복 할 수있는 방법 DropDownPanel

어떤 아이디어의 그것과 oControl 캐스팅해야 할 경우가 예외를 던질 것이다 왜냐하면

((DropDownPanel)oControl).Caption = rm_ResourceManager.GetString(oControl.Name + ".Text"); 

.

감사합니다.

답변

1

Telerik 컨트롤입니까? 해당 DropDownPanel 클래스는 Control에서 상속하지 않으므로 Controls 컬렉션에 추가 할 수 없습니다. 왜 캡션이 설정되지 않고 캐스팅 할 수 없는지에 대한 설명입니다.

API 문서를 검토하면 양식에있는 RadElements를 반복 할 수있는 다른 종류의 컬렉션 클래스가 있어야합니다. 이 제품을 사용한 다른 프로그래머를 찾을 수있는 가장 좋은 곳은 support forum입니다.

2

'as'키워드를 사용하면 다음과 같이 할 수 있습니다.

foreach (Control oControl in this.Controls) 
{ 
    DropDownPanel ddp = oControl as DropDownPanel; 

    if (ddp != null) 
    { 
     ddp.Caption = rm_ResourceManager.GetString(oControl.Name + ".Text"); 
    } 
    else 
    { 
     TextBox tb = oControl as TextBox; 

     if (tb != null) 
     { 
      tb.Text = rm_ResourceManager.GetString(oControl.Name + ".Text"); 
     } 
    } 
} 

이 경우에만 DropDownPanels의 Caption 속성과 TextBoxes의 Text 속성이 설정됩니다. 만약 당신이 thisor 나 다른 컨트롤을 할 필요가 있다면/if/else 블록을 더 추가 할 필요가 있습니다. 그러나 나는 그것을 추천하지 않을 것입니다.

나는이 접근법에 대해 재고 할 것을 제안합니다. 텍스트가 삭제되어야하는 통제 목록이 필요하거나 다른 패턴을 사용할 수 있지만 제한된 정보로는 알 수 없습니다.

+0

oControl.Caption 대신 ddp.Caption을 사용해야합니까? –

+0

예, 앞에서 설명한대로 oControl은 Windows.Forms.Control 유형이며 .Caption 속성이 없습니다. – srivatsa

+0

@Jens - 고마워, 내가 그 버그를 수정했습니다 –

0

더 많은 해결책은 DropDownPanel 주위에 adapter을 사용하는 것입니다. 이 어댑터는 Text 속성을 제외하고 전체 제어 인터페이스를 해당 어댑터의 DropDownPanel에 전달하여 구현합니다.이 속성은 적응 자의 Caption 속성으로 구현됩니다.

gui를 인스턴스화 할 때 어댑터에 DropDownPanel을 래핑해야합니다.

그런 식으로 컨트롤을 모두 동일하게 처리하고 코드 청소기를 유지하며 커플 링을 낮출 수 있습니다 : 각 구성 요소에 대해 동일한 인터페이스를 보장하는 것은 gui-buider의 책임이며 루프의 내용은 foreach입니다 모든 구성 요소에 대해 무언가를 할 수 있습니다.

관련 문제