2012-09-20 3 views
2

텍스트 상자와 "찾아보기"단추로 구성된 사용자 정의 컨트롤을 만들려고합니다.이 단추는 파일 대화 상자를 열고 텍스트 상자를 선택 항목으로 업데이트합니다 (예 : HTML 파일 업로드 상자).C# 사용자 정의 컨트롤의 속성 통과

    : 내가 선택한 파일 속성이 텍스트 상자에 매핑 할 할 동안, 나는 (등 필터) 내 컨트롤

    내 2 개 질문에서 공개적으로 사용할 수 있도록 파일 대화 상자의 거의 모든 다른 속성을 원하는

  1. 내 컨트롤 중 하나의 속성에 직접 매핑되는 내 컨트롤의 속성에 대해 수동으로 get/set 쌍을 작성하고 추가하지 않고도이 작업을 쉽게 수행 할 수있는 몇 가지 바로 가기 (언어 또는 VS IDE)가 있습니까? 반환하는 각각의 단일 줄/해당 속성을 설정?
  2. 여러 가지 속성에 대해 위의 작업을 수행 할 수있는 방법 (언어 또는 IDE 바로 가기)이 있습니까? 기본적으로 내 컨트롤이 파일 대화 상자의 모든 속성을 갖기를 원합니다.
+0

나는 OpenFileDialog를 상속하는 생각했지만, OpenFileDialog를 밀봉한다, 그래서 당신은 수동으로 할 또는 공공 재산으로 OpenFileDialog를 인스턴스를 정의 할 것 같아요. –

답변

3

이 T4를위한 작업 같은 소리!

T4와 리플렉션을 사용하여 이러한 모든 속성을 가진 부분 클래스를 만들 수 있습니다.이 클래스가 하나 뿐인 경우 수동으로 수행하는 것보다 더 많은 작업이 필요할 수 있습니다. 나는 당신이 얼마나 자주 그것을 사용하기를 원할 것인지를 결정할 필요가 있다고 생각합니다.

편집 : 텍스트 템플릿 변환 키트

그것은 비주얼 스튜디오에 내장되어 당신을 위해 코드를 생성 템플릿을 작성하는 방법을 alows :

T4는 것을 의미한다.
반복적 인 코드 또는 상용구 코드를 작성할 필요가있을 때 언제든지 유용 할 수 있습니다.

나는 당신을 위해 시작했습니다. MyUserControl.tt라는 솔루션에 새 파일을 만들고 아래 코드를 복사하십시오.
저장하자 마자 MyUserControl.cs라는 새 파일이 나타나고 모든 속성을 나열합니다.

부분 클래스를 만들기 때문에 클래스 이름과 네임 스페이스를 기존 사용자 정의 컨트롤과 트위 킹해야합니다. 나는 당신의 텍스트 박스의 이름이 타겟이라고 생각했지만, 분명히 그것도 트위크시킬 수있다.

<#@ template debug="false" hostspecific="false" language="C#" #> 
<#@ output extension=".cs" #> 
<#@ assembly name="System.Web" #> 
<#@ import namespace="System.Reflection" #> 

public partial class MyUserControl 
{ 
<# 
PropertyInfo[] properties = typeof(System.Web.UI.WebControls.TextBox).GetProperties(
    BindingFlags.Public | BindingFlags.Instance); 

foreach (PropertyInfo property in properties) 
{ 
    WriteLine(string.Format(" public {0} {1}", property.PropertyType.FullName, property.Name)); 
    WriteLine(" {"); 

    if(property.GetGetMethod() != null) 
    { 
     WriteLine("  get { return Target." + property.Name + "; } "); 
    } 

    if(property.GetSetMethod() != null) 
    { 
     WriteLine("  set { Target." + property.Name + " = value; } "); 
    } 

    WriteLine(" }"); 
    WriteLine(""); 
} 

#> 
} 
+0

실례지만 T4는 무엇인가? – baruch

1

ReSharper를 사용하여이를 수행 할 수 있습니다.

public class YourUserControl 
{ 
    private OpenFileDialog _openFileDialog; 
    private TextBox _textBox; 
} 

당신은 클래스 내부에 커서를 넣을 수 있습니다 및 히트 Alt + 인을하고 "위임 멤버"를 선택 :
다음 클래스 가정. 이렇게하면 두 필드의 모든 공용 멤버 목록이 제공됩니다. 당신은 당신이 필요로하는 사람을 선택하고 떨어져 당신은 다음과 같습니다

enter image description here

+0

ReSharper가 없습니다. – baruch

+0

그러면 속성을 직접 작성해야합니다. 그렇게 많은 코드가 아닙니다. (그렇지 않으면 상사에게 ReSharper를 사도록 설득하는 것도 좋은 옵션입니다.) –

+0

@JoeWhite 아니요, 각 속성 (2 줄, get 및 set 래핑 메서드 및 래핑 속성 포함)에 대한 코드가 많지는 않지만 30 개 또는 40 개의 해당 속성에 대해이 작업은 신속하게 지루한 작업이됩니다. 오, 그럼. :-( – baruch

관련 문제