문제

선택한 indexchanged 이벤트의 ListView를 어떻게 프로그래밍 방식으로 발사 할 수 있습니까?

사용자가 특정 작업을 완료 한 후 내 목록 뷰의 첫 번째 항목이 자동으로 선택되도록 의도했습니다. 선택한 항목을 강조 표시하기 위해 선택한 indexchanged 이벤트 내에 코드가 이미 존재합니다. 항목이 강조 표시되지 않을뿐만 아니라 SelectedIndexChanged 내에 설정된 중단 점은 결코 치지 않습니다. 또한 Debug.WriteLine은 출력을 생성하지 못하므로 이벤트가 해고되지 않았다고 확신합니다.

다음 코드는 이벤트를 해고하지 않습니다.

listView.Items[0].Selected = false;
listView.Items[0].Selected = true;
listView.Select();
Application.DoEvents();

extra .select () 메소드 호출이 좋은 측정을 위해 포함되었습니다. ;) 기본적으로 선택된 경우 .items 컬렉션에서 ListViewItem을 선택 해제하기 위해 선택 탈수 (.Selected = false)가 포함되어 'true'로 설정하는 것이 효과가 없을 것입니다. 'application.doevents ()'호출은 또 다른 마지막 도랑 방법입니다.

위의 코드가 선택된 indexchanged 이벤트가 해고를 일으키지 않아야합니까?

키보드 또는 마우스 입력을 통해 항목이 셀렉트되어있을 때 선택된 indexchanged 이벤트가 제대로 발생한다고 언급해야합니다.

도움이 되었습니까?

해결책

False로 설정하여 선택 해제하면 이벤트가 시작되지 않지만 True Will으로 설정합니다.

    public Form1 ()
    {
        InitializeComponent();
        listView1.Items[0].Selected = false; // Doesn't fire
        listView1.Items[0].Selected = true; // Does fire.
    }

    private void listView1_SelectedIndexChanged (object sender, EventArgs e)
    {
        // code to run
    }

당신은 다른 일이 일어나고있을 것입니다. 선택 코드를 실행하는 이벤트는 무엇입니까?

다른 팁

현재 이벤트 핸들러의 메소드 내부에있는 코드를 원래 지점과 코드에서 호출 할 수있는 메소드로 이동할 수없는 이유는 무엇입니까?

이 같은:

class Foo
{
    void bar(Object o, EventArgs e)
    {
        // imagine this is something important
        int x = 2;
    }

    void baz()
    {
        // you want to call bar() here ideally
    }
}

이것에 대한 리팩토링됩니다.

class Foo
{
    void bar(Object o, EventArgs e)
    {
        bop();
    }

    void baz()
    {
        bop();
    }

    void bop()
    {
        // imagine this is something important
        int x = 2;
    }
}

파생 된 클래스를 만드는 경우 ListView, 보호 된 방법을 호출 할 수 있습니다 OnSelectedIndexChanged. 이것은 발사 될 것입니다 SelectedIndexChanged 이벤트.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top