2011-08-10 2 views
1

사용자가 목록 상자를 마우스 오른쪽 버튼으로 클릭 할 때 목록 상자에서 선택한 항목을 모두 선택 취소하는 기능이 있습니다. 내 프로젝트의 모든 목록 상자에이 함수를 적용 할 수 있습니까?C# 전역 이벤트가 여러 형식으로 액세스 됨

selectedListBox h = new selectedListBox(); 
h.setSelected(listboxNameHere); 
+2

당신은 그것을 유용하게 찾을 수 있습니다 'ListBox'로부터 상속받은 새로운 컨트롤을 생성하고이 기능을 가지고 있습니다. – Amy

+0

form.controls 컬렉션을 사용할 수 있다고 생각하지만 전체 답변을 드릴만큼 충분한 경험이 없습니다. check msdn – NirMH

+0

@ Inuyasha 새 컨트롤을 만드는 데 대한 자세한 내용을 알려주시겠습니까? 감사합니다. –

답변

2

어쩌면 확장자 + λ?

public static class ListBoxSelectExtension 
{ 
    public static void SetSelected(this ListBox Me) 
    { 
     Me.MouseDown += 
      (sender, e) => 
      { 
       if (e.Button == MouseButtons.Right) 
        ((ListBox)sender).ClearSelected(); 
      }; 
    } 
} 

새 클래스를 인스턴스화 할 필요 또는 모든리스트 박스 파생 클래스가 될이 필요없이 다음을 수행 할 수 있습니다이 방법 :

MyListBox1.SetSelected(); 
MyListBox2.SetSelected(); 

+0

변수 이름으로'@ this'를 사용할 수도 있습니다. IMO는 자연스럽게 (정상적인 방법으로) – Sebastian

1

:이 작업을 수행하기 위해 각 목록 상자에 대해 다음

public class selectedListbox{ 
    private void setSelected(ListBox details){ 
    details.MouseDown += new System.Windows.Forms.MouseEventHandler(this.listBoxDeselectAll); 
    } 

    private void listBoxDeselectAll(object sender, MouseEventArgs e) 
     { 
      if (e.Button == MouseButtons.Right) 
      { 
       ((ListBox)sender).ClearSelected(); 
      } 
     } 

} 

과 :

나는 수업을하지, 다른 방법이 있는지 알고 클래스 등의 기능을 넣을 가장 간단한 방법은 ListBox로부터 상속받은 클래스를 만드는 것입니다 :

om 목록 상자를 표준 목록 상자를 사용할 때와 같은 방법으로 사용하십시오.

1
public class MyListBox : ListBox 
    { 
     public sListBox() : base() 
     { 
      MouseDown += new System.Windows.Forms.MouseEventHandler(this.MouseDownFired); 
     } 

     private void MouseDownFired(object sender, MouseEventArgs args) 
     { 
      if (args.Button == MouseButtons.Right) 
      { 
      SelectedItems.Clear(); 
      } 
     } 
관련 문제