我目前正在寻找材料的搜索平台,并且想制作一个带有元素周期表的按钮。我现在要做的是为元素周期表创建每个按钮,并为每个按钮创建每个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");
}
我想知道是否还有其他选择。例如,如果我按下按钮,系统将读取按钮上写的内容,并使用方法上的文字。这样我可以减少代码行。
答案 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”,而是真正的异常会导致问题。 (就像无效的强制转换例外一样)
选择表单上的按钮
使用正确的值填充标签