2009-11-30 8 views
1

특정 필드 (텍스트 필드)가 포함 된 사용자 지정 컨트롤이 있고이 컨트롤이 다양한 다른 형식으로 액세스되는 단추가 있습니다.사용자 지정 컨트롤 generic

이 사용자 정의 컨트롤에는 일부 작업을 수행하는 데 필요한 입력란을 기반으로 버튼을 클릭하는 버튼이 있습니다. 이제는이 사용자 정의 컨트롤이 여러 곳에서 사용되고 있기 때문에 다른 사람들이 실제로 컨트롤을 찾지 않고 좀 더 일반화 된 방식으로 뭔가를 수행하는 것을 원하지 않습니다. 예를 들어

처럼 :

MyCustom 컨트롤은 두 개의 필드 이름, 성 및 버튼 검색하지만가 결합 그리드를 포함 내가 myCustomecontrol이 뭔가를 사용하는 또 다른 형태의 또 다른 Personform

에 . 누구든지이 문제를 해결할 방법을 제안 할 수 있습니까?

답변

1

이벤트를 컨트롤에 표시하고 이벤트에 컨트롤의 관련 정보를 포함시킬 수 있습니다. 검색 버튼의 클릭 이벤트 핸들러에서,

public event EventHandler<MyControlSearchEventArgs> SearchClick; 

    protected override void OnSearchClick(MyControlSearchEventArgs eventArgs) 
    { 
     EventHandler<MyControlSearchEventArgs> searchClick = SearchClick; 

     if(searchClick != null) 
      searchClick(this, eventArgs); 
    } 

지금 :

public class MyControlSearchEventArgs : EventArgs 
{ 
    public MyControlSearchEventArgs(string firstName, string lastName) 
    { 
     FirstName = firstName; 
     LastName = lastName; 
    } 

    public string FirstName { get; private set; } 
    public string LastName { get; private set; } 
} 

그런 다음 기존의 사용자 지정 컨트롤 클래스에이 코드를 추가

이 클래스는 이벤트 정보를 포함 적합 다음과 같이 이벤트를 올릴 수 있습니다.

protected void searchButton_Click(object sender, EventArgs e) 
{ 
    OnSearchClick(new MyControlSearchEventArgs(
     firstNameTextBox.Text, 
     lastNameTextBox.Text 
     ); 
} 

콘로의 소비자 이제 컨트롤이 노출하는 SearchClick 이벤트를 수신 할 수 있으므로 컨트롤과 독립적으로 원하는 모든 작업을 수행 할 수 있습니다.

편집 :

public string FirstName 
{ 
    get { return firstNameTextBox.Text; } 
    set { firstNameTextBox.Text = value; } 
} 

public string LastName 
{ 
    get { return lastNameTextBox.Text; } 
    set { lastNameTextBox.Text = value; } 
} 

: 당신이 이벤트 핸들러의 외부에서 두 개의 텍스트 상자의 값을 얻으려면

또한, 당신은 당신의 컨트롤의 공용 속성로 노출 될 수 있습니다 그런 다음 일반 컨트롤처럼 이러한 값을 가져 오거나 설정할 수 있습니다.

SearchControl control = (SearchControl)Page.FindControl("searchControl"); 
control.FirstName = "Programming"; 
control.LastName = "Hero"; 
+0

안녕하세요, 답장과 아름다운 코드를 보내 주셔서 감사합니다. 양식에 검색 버튼이없고 다른 양식의 모든 값에 액세스하려는 경우 어떻게해야합니까? 감사합니다, Francis – francis

+0

이벤트를 사용하지 않고 나머지 페이지에 값을 표시하는 방법을 포함하도록 내 대답이 업데이트되었습니다. –