C# 有没有办法创建一个按钮数组,这样您就可以编写通用代码

C# 有没有办法创建一个按钮数组,这样您就可以编写通用代码,c#,arrays,button,C#,Arrays,Button,我对C#编程非常陌生,我在我的windows应用程序中制作了一个键盘,我使用一个文本框作为显示,因此每个按钮都有一个单独的字母,单击每个按钮将在文本框中键入。所以我的应用程序上会有50个按钮。有没有办法创建一个包含更多按钮的键盘,这样我就可以创建一个按钮数组,这样我就可以编写通用代码了? 这甚至可以为100个按钮编写通用代码吗? 或者我必须分别编辑每个按钮\u单击功能 谢谢 我有单独的按钮,我意识到这将需要很多时间。。。。我也愿意接受任何新的建议,甚至是解决这个问题的全新方法……这里是一个简单的

我对
C#
编程非常陌生,我在我的windows应用程序中制作了一个键盘,我使用一个文本框作为显示,因此每个按钮都有一个单独的字母,单击每个按钮将在文本框中键入。所以我的应用程序上会有50个按钮。有没有办法创建一个包含更多按钮的键盘,这样我就可以创建一个按钮数组,这样我就可以编写通用代码了? 这甚至可以为100个按钮编写通用代码吗? 或者我必须分别编辑每个
按钮\u单击
功能

谢谢


我有单独的按钮,我意识到这将需要很多时间。。。。我也愿意接受任何新的建议,甚至是解决这个问题的全新方法……

这里是一个简单的例子,屏幕上有两个按钮(a和b)。您可以将所有按钮注册到同一个单击事件,而不是单独执行每个按钮

namespace WindowsFormsApp1
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
//循环浏览所有按钮并指定给BTN单击
var c=GetAll(这个,typeof(按钮));
foreach(c中的var项)
{
项目。单击+=b单击;
}
}
私有void btnClick(对象发送方,事件参数e)
{
//发件人是一个按钮,因此您可以找到文本并将其附加到文本框/输出中
txtOutput.Text+=((发送者作为按钮).Text);
}
公共IEnumerable GetAll(控件,类型)
{
var controls=control.controls.Cast();
返回控件。SelectMany(ctrl=>GetAll(ctrl,键入))
.Concat(控制)
。其中(c=>c.GetType()==type);
}
}
}

希望这有助于引导您朝着正确的方向前进。

如果所有代码都应该这样做,请在按钮的显示屏上添加字母,所有按钮的字母都可以相同,即您可以将它们连接到相同的单击处理程序。它会将
发送者
转换为
按钮
,然后将其文本附加到文本框中。Text。。如果您知道按钮的布局方式,还可以动态创建所有按钮。如何将它们都挂在同一个单击处理程序上:/n每个按钮都有自己的单击处理程序。。我不完全理解如果按钮是手工创建的,您可以在事件窗格中执行。如果不是,则接受的答案说明了如何做。。
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //loop through all the buttons and assign to btnClick
            var c = GetAll(this, typeof(Button));

            foreach (var item in c)
            {
                item.Click += btnClick;
            }
        }

        private void btnClick(object sender, EventArgs e)
        {
            //The sender is a Button so you find the text and append it to your textbox/output
            txtOutput.Text += ((sender as Button).Text);
        }

        public IEnumerable<Control> GetAll(Control control, Type type)
        {
            var controls = control.Controls.Cast<Control>();

            return controls.SelectMany(ctrl => GetAll(ctrl, type))
                                      .Concat(controls)
                                      .Where(c => c.GetType() == type);
        }
    }
}