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

Posted

技术标签:

【中文标题】Winform 使用通用方法将按钮文本复制到文本框【英文标题】:Winform copy button text to textbox using universal method 【发布时间】:2021-11-29 08:48:04 【问题描述】:

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

这是我当前的代码。

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

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

类似的东西,除了使用通用方法之外,它不必指定 btn_A 它只是根据单击的按钮继承要复制的按钮。这样我就可以在每个按钮上使用同一行代码。

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

【问题讨论】:

这能回答你的问题吗? Get access to the Sender control - C# 尽量坚持使用 $"box_UserInput.Textbtn_A.Text" 因为在 C# 中使用 '+' 是不好的做法。 (来自 C# 版本升级后的 Microsoft 培训材料。) 使用发件人演员表。 ((Button)sender).Text - 类似的东西... @Martheen 这是一种有趣的方式。对于一个极端的想法,如何在 Blender 中渲染图像并在 JSON 文件中创建定义的区域,导入两者并使用当前鼠标位置,检查 JSON 导入区域的边界,然后将其添加到输出控件。我几乎只是为了好玩! @James 喜欢 ***.com/questions/21286617/… 我想 【参考方案1】:

您可以使用这种更通用的方法,因为 Control 类包含 Text 属性。此外,使用最佳实践 $""。

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";

【讨论】:

这是最好的答案。这正是我一直在寻找的,并且解释帮助我了解了有关事件处理程序如何为未来分配工作的新知识。你这个摇滚人!

以上是关于Winform 使用通用方法将按钮文本复制到文本框的主要内容,如果未能解决你的问题,请参考以下文章

复制MFC文本框内容到剪切板方法?

wxpython,有两个文本框,三个按钮控件,按下按钮便可以将文本框一中的内容复制到文本二中

从 vb.net 中的表单外部获取突出显示的文本

以另一种形式将文本发送到文本框而不创建新窗口

C# WinForm 文本框离开焦点事件 问题???

C#Winform中怎么设置文本框的文本不能被选中,就像QQ登录框那样 不给复制的