2012-05-25 5 views
2

Gtk.RadioButton 위젯의 Clicked 이벤트에 문제가 있습니다.모노 gtk.RadioButton 클릭 이벤트 두 번

using System; 
using Gtk; 

public partial class MainWindow: Gtk.Window 
{ 
    public MainWindow(): base (Gtk.WindowType.Toplevel) 
    { 
     Build(); 
     RadioButton rbt1 = new RadioButton (null, "rbt1"); 
     RadioButton rbt2 = new RadioButton (rbt1, "rbt2"); 
     RadioButton rbt3 = new RadioButton (rbt1, "rbt3"); 
     VBox vbx1 = new VBox(); 
     vbx1.PackStart (rbt1, false, false, 0); 
     vbx1.PackStart (rbt2, false, false, 0); 
     vbx1.PackStart (rbt3, false, false, 0); 
     this.Add (vbx1); 
     this.ShowAll(); 
     rbt1.Clicked+= HandleClicked; 
    rbt2.Clicked+= HandleClicked1; 
    rbt3.Clicked+= HandleClicked2; 
    } 

    void HandleClicked2 (object sender, EventArgs e) 
    { 
     Console.WriteLine ("rbt3.Clicked"); 
    } 

    void HandleClicked1 (object sender, EventArgs e) 
    { 
     Console.WriteLine ("rbt2.Clicked"); 
    } 

    void HandleClicked (object sender, EventArgs e) 
    { 
     Console.WriteLine ("rbt1.Clicked"); 
    } 
} 

문제이다 : 나는 rbt2를 누르면

출력은 :


을 rbt2.Clicked rbt1.Clicked 여기 는 예 코드

rbt3을 클릭하면 출력은 다음과 같습니다.

,451,515,

내가 rbt1을 클릭하면

을 rbt3.Clicked rbt2.Clicked, 출력은 다음과 같습니다


그러나 무엇을 rbt1.Clicked rbt3.Clicked I rbt *를 클릭하면 "rbt * .Clicked"만 출력됩니다.

답변

3

귀하의 기대가 잘못되었습니다. 당신은 Toggled 신호 대신에 연결하고 버튼을 활성화 또는 비활성화되는지 여부를 확인해야합니다 : 버튼이 활성화되거나 비활성화 될 때 귀하의 경우에는

void HandleToggled(object sender, EventArgs e) 
{ 
    if(sender.Active) 
    { 
     Console.WriteLine("rbt1.Toggled"); 
    } 
} 

가의 Clicked 신호라고합니다. 비활성화 된 버튼을 클릭하면 활성화 된 버튼이 비활성화되고 다른 버튼은 비활성화되므로 두 개의 신호가 호출됩니다. Toggled 신호는 두 경우 모두 호출됩니다. 차이점이 무엇인지 잘 모르겠습니다. 버튼의 상태가 프로그래밍 방식으로 변경되면 Clicked이 호출되지 않을 수도 있습니다.

+0

안녕하세요, 귀하의 도움에 감사드립니다. 그리고 당신의 코드로 Toggled 신호를 시험해 봅니다. 또한 내가 클릭 신호를 테스트하지만 "if ((RadionButton) .Active와 같은 발신자") 조건을 추가했습니다. 이전 코드에서도 작동합니다. –

관련 문제