Winform使用通用方法将按钮文本复制到文本框

Winform copy button text to textbox using universal method

所以这是一件相当简单的事情,我很好奇是否有更好的方法来节省代码行数。对于 class,我们正在制作一台电传打字机。基本上有一个文本框和一系列按钮 A-Z 和 0-9。当您单击按钮时,它会将相应的 letter/number 添加到文本框。单击发送时,它会将文本框的内容添加到标签并重置文本框。一切正常,构建只需要几分钟。但是有一堆多余的行,我很好奇是否有一种方法可以用一种方法清理代码。

这是我当前的代码。

private void btn_A_Click(object sender, EventArgs e)
    {
        box_UserInput.Text = box_UserInput.Text + "A";
    }

如您所见,它非常简单明了。单击 A,“A”将添加到文本框。但是,按钮的文本 属性 也只是“A”,我想知道是否有办法只复制该按钮的文本 属性 并将其添加到文本框字符串中。

类似这样,除了使用通用方法外,无需指定 btn_A 它只是继承根据单击的按钮复制哪个按钮。这样我就可以在每个按钮上使用相同的代码行。

    private void btn_A_Click(object sender, EventArgs e)
    {
        box_UserInput.Text = box_UserInput.Text + btn_A.Text;
    }

您可以使用这个更通用的控件 class 包含文本 属性。此外,使用最佳实践 $"".

private void btn_A_Click(object sender, EventArgs e)
{
    box_UserInput.Text = $"{box_UserInput.Text}{((Control)sender).Text}";
}

您还可以为每个按钮分配相同的事件。创建一个事件,比如 addControlTextOnClick 并将相同的事件分配给每个按钮。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void addControlTextOnClick(object sender, EventArgs e)
    {
        box_UserInput.Text = $"{box_UserInput.Text}{((Control)sender).Text}";
    }
}

您甚至可以使用此 C# 构造进一步缩短此时间:

private void addControlTextOnClick(object sender, EventArgs e) =>
    box_UserInput.Text = $"{box_UserInput.Text}{((Control)sender).Text}";