EventHandler,用于更改另一个窗口小部件/控件的属性

时间:2014-06-10 20:49:08

标签: c# event-handling overloading gtk#

我遇到事件处理问题。我正在使用gtk#创建一个表单应用程序,它们之间有两个标签和一组按钮。

    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属性,因为它未传递给事件处理程序。我是否正确地说我必须重载按钮类的默认“按钮事件处理程序”以将另一个控件作为参数?如果是这样,我该怎么做? 如果不是这样,我怎么能去做,以便激活一个控件的事件将改变另一个控件的属性。

干杯

1 个答案:

答案 0 :(得分:0)

您可以在班级声明Label。这样,当您进入Button Click方法时,就可以访问它。

例如,我假设所有代码都在Form类中:

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!";
}
相关问题