UserControl이 ListControl 역할을하기 때문에 두 이벤트와 두 가지 속성을 구현해야합니다.
public event System.EventHandler SelectedIndexChanged;
public event System.EventHandler SelectionChangeCommitted;
public int SelectedIndex {
get;
set;
}
public T SelectedItem { // Where T is whatever your type is
get;
set;
}
SelectedIndexChanged
는 항상 항상 선택된 인덱스가 변경 될 때 트리거해야 할 활동을 위해 사용되어야한다 . SelectionChangeCommitted
사용자가 물리적으로 선택을 변경하면 트리거됩니다. 이 둘 사이의 구분은 중요한 차이점이며 .NET의 대부분의 컨트롤은이 패턴 (예 : ComboBox)을 따르지만 이벤트에 대해 동일한 이름을 사용할 수는 없습니다.
이제는 속성을 변경해야하는 컨트롤이 동일한 사용자 정의 컨트롤 내에있는 경우 물론 해당 컨트롤의 사용자 컨트롤 코드 내에서 해당 컨트롤을 처리해야합니다. 그렇지 않으면 코드는 사용자 컨트롤을 구현 한 사람에게 고아가되어야합니다 (예 :폼 또는 다른 사용자 컨트롤)에 이벤트를 가입시키고 작업을 수행하십시오.
순서는 정말 귀하의 요구 사항에 따라 다르지만
SelectedIndexChanged
는
항상 제기해야
(그러나 여러 번 그 이상한 행동을 소개하는 것처럼 변화 당에 비해), 다시 SelectionChangeCommitted
은 사용자에 의해 제기해야한다 (예. 설정 SelectedIndex 또는 SelectedItem).
좋은 경험 법칙은 사용자가 알고 있기 전에 내부 항목이 발생해야하며, 먼저 SelectedIndexChanged를 호출 한 다음 SelectionChangeCommitted를 호출해야합니다. 상관 없으면, 또는. 나중에 순서를 변경하면 컨트롤을 구현 한 사람이 변경 될 수 있으므로 결정이 확실한 지 확인하십시오.
두 가지의 차이점은 SelectedIndex이며 SelectedItem은 목록을 내부적으로 지우고 새 항목을 추가하는 등의 작업을 통해 업데이트되지만 실제 사용자 작업으로 인해 두 이벤트가 동시에 발생해야한다는 의미는 아닙니다. .
희망이 도움이됩니다.
상속받은 클래스가 실제로 내 기본 클래스를 오버라이드 할 수 있다는 사실을 고려해 볼 때, 접근법에 대한 약간의 관점을 제시한다. 고맙습니다. – PedroC88