2008-09-18 4 views
2

여러 개의 탭이있는 GTK 노트북이 있습니다. 각 탭 레이블은 무엇보다도 탭을 닫는 데 사용하려는 버튼이 포함 된 복합 컨테이너입니다. 버튼에는 "클릭 한"신호에 대한 핸들러가 있습니다.gtk #에서 방금 클릭 한 탭의 페이지 번호는 어떻게 결정합니까?

신호가 호출되면 버튼 위젯과 "EventArgs"가 매개 변수로 사용됩니다.

버튼 위젯을 기반으로 페이지 번호를 결정해야하지만 myNotebook.PageNum (buttonWidget)은 항상 -1을 반환합니다. 심지어 위젯을 포함 HBox입니다 buttonWidget.Parent 시도했습니다.

내가 할 수있는 일이나 내가 잘못하고있는 것에 대한 아이디어가 있습니까?

답변

4

버튼을 구성 할 때 버튼의 Clicked 이벤트에 페이지 번호를 전달하면 쉽게 해결할 수 있습니다.

for (int page = 0; page < n; page++){ 
    int the_page = page; 
    NotebookPage p = new NotebookPage(); 
    ... 
    Button b = new Button ("Close page {0}", the_page); 
    b.Clicked += delegate { 
     Console.WriteLine ("Page={0}", the_page); 
    }; 
} 

"the_page"는 대리인이 캡처 할 새 변수이므로 중요합니다.

+0

굉장 -이 방법이 효과적입니다! 감사! BTW - 나는 꽤 오랫동안 당신의 블로그를 따라 왔습니다! 감사! – DustinB