2014-06-10 2 views
0

이벤트 처리에 문제가 있습니다. gtk #을 사용하여 두 개의 라벨과 버튼 세트가있는 양식 앱을 만듭니다.다른 위젯/컨트롤의 속성을 변경하는 EventHandler

Label Character1 = new Label ("Character1"); 
    Label Character2 = new Label ("Character2"); 
    HBox layoutTBS = new HBox(true,50); 
    layoutTBS.PackStart (Character1, false,true,3); 

    Button melee = new Button ("Melee"); 
    Button range = new Button ("Ranged"); 
    Button magic = new Button ("Magic"); 
    melee.ButtonPressEvent += ButtonPressEventHandler; 

이것은 가정 사용자 정의 '이벤트 처리기'

private static void ButtonPresseventHandler (object obj, ButtonPressEventArgs args) 
{ 
     if (args.Event.Type == Gdk.EventType.TwoButtonPress) { 

      Character1.Text = "Character1 does a melee attack"; 
     } 
} 

내가 레이블의 텍스트를 변경하려면 '버튼을 눌러'이벤트의 활성화를 만들려고 노력하고있다. 'Character1'레이블은 이벤트 처리기로 전달되지 않았기 때문에 Text 속성을 변경할 수 없습니다. 다른 컨트롤을 인수로 사용하기 위해 단추 클래스의 기본 '단추 누르기 이벤트 처리기'를 오버로드해야한다고 말하면 맞습니까? 그렇다면 어떻게해야합니까? 그렇지 않은 경우 어떻게하면 한 컨트롤의 이벤트가 활성화되어 다른 컨트롤의 속성이 변경되도록 만들 수 있습니까?

건배

+0

이'Character1' 텍스트 상자와 같은 클래스에서'ButtonPressed' 방법입니다 :

예를 들어, 나는 모든 코드가 Form 클래스 내에 가정한다? –

+0

아니요,'ButtonPressed' 메쏘드는'button' 클래스에 속합니다. 'Character1' 텍스트 박스의'Text' 속성을 바꾸길 원합니다. (질문을 오해 한 경우 용서해주세요. 아직 OOP 용어에 익숙하지 않습니다.) – ParityB1t

+0

그게 내가하는 것이 아닙니다. 어떤 클래스에서 'Button melee = new Button ("Melee");을 정의 했습니까? –

답변

0

당신은 클래스 수준에서 Label을 선언 할 수 있습니다. 이렇게하면 Button Click 메서드 안에있을 때 액세스 할 수 있습니다.

public class Form 
{ 
    public Button Mele { get; set; } 
    public Label Character1 { get; set; } 

    public Form() 
    { 
     Character1 = new TextBox(); 
     Mele = new Button(); 
     Mele.Click += OnButtonClicked; 
    } 

private void OnButtonClicked(object sender, System.EventArgs e) 
{ 
     // Since Character1 is declared at class level, you may 
     // access it now inside the method 
    Character1.Text = "Mele has been clicked!"; 
} 
+0

Thnx Yuval, 네가 옳았다. 나는 수업 수준으로 선언해야만했다. 그러나 나는 다른 문제를 만났습니다. 클래스 레벨에서'Button'과'Labels'을 선언하면 갑자기'Variable' 대신'Fields'가됩니다. 프로그램이 작동하지 않습니다, 이것이 문제가 될 수 있습니다 궁금하네요. – ParityB1t

+0

다른 문제에 대한 새로운 질문을 만들어야한다고 생각합니다. 이 답변으로 도움이 되었다면, 투표 수 아래의 빈 체크 표시를 클릭하여 답변으로 표시하십시오. –