按钮点击事件集成

时间:2020-01-29 14:40:50

标签: c# .net winforms

我目前正在寻找材料的搜索平台,并且想制作一个带有元素周期表的按钮。我现在要做的是为元素周期表创建每个按钮,并为每个按钮创建每个click事件。

public void bc(string a)
{
    if (MainEntry.Text == "")
    {
        MainEntry.Text = a;
    }
    else
    {
        MainEntry.Text = MainEntry.Text + "," + a;
    }
}
private void buttonLi_Click(object sender, EventArgs e)
{
    bc("Li");
}
private void buttonBe_Click(object sender, EventArgs e)
{
    bc("Be");
}

我想知道是否还有其他选择。例如,如果我按下按钮,系统将读取按钮上写的内容,并使用方法上的文字。这样我可以减少代码行。

3 个答案:

答案 0 :(得分:2)

您可以使用Sender对象,但首先需要将所有按钮的单击都订阅到一个事件中,如下所示:

public Form1()
{
    InitializeComponent();
    buttonLi.Click += button_Click;
    buttonBe.Click += button_Click;
}

private void button_Click(object sender, EventArgs e)
{
    Button btn = sender as Button;
    bc(btn.Text);
}

发件人包含对引发事件的控件/对象的引用。

答案 1 :(得分:2)

是的,您可以为每个按钮简单地调用相同的onclick方法,并在Onclick事件中获取文本。像这样:

private void button_Click(object sender, EventArgs e)
{
    Button button = sender as Button;

    bc(button.Text);
}

答案 2 :(得分:1)

我将使用控件的Tag属性。

类似的东西:

private void control_Click(object sender, EventArgs e)
{
    var control = (Control)sender;

    bc(control.Tag.ToString());
}

这样,您不必为每个按钮创建事件处理程序。并且使用标签将提供按钮上显示的Text不必相等。


(Control)sender上使用sender as Control,因为如果出现问题,您不希望出现异常“ NullReferenceException”,而是真正的异常会导致问题。 (就像无效的强制转换例外一样)


选择表单上的按钮

Form1 with button

使用正确的值填充标签

Tag property