【问题标题】:How to access number of controls as a name in c#?如何在 c# 中访问控件的数量作为名称?
【发布时间】:2014-05-16 16:29:13
【问题描述】:

在 c# 中的 winform 上似乎有 10 个按钮。按钮 1、按钮 2、按钮 3 和按钮 10。当我单击 button3 时,我需要将 3 作为其编号。可以这样做吗?

private void button1_Click_1(object sender, EventArgs e)
{
    MessageBox.Show(button1.number); //Show 1
}

【问题讨论】:

    标签: c# button controls


    【解决方案1】:

    你可以使用 LINQ。

    Button btn = (Button) sender;
    int number = int.Parse(new string(btn.Name
        .Reverse()
        .TakeWhile(Char.IsDigit)
        .Reverse().ToArray()));
    

    【讨论】:

      【解决方案2】:

      您应该将按钮命名为 1、2..etc

      private void button1_Click_1(object sender, EventArgs e)
      {
      var button = (Button)sender;
       MessageBox.Show(button.name);
      }
      

      【讨论】:

      • 这些按钮的名字太糟糕了!话虽如此,它会起作用。我只是不推荐它。
      【解决方案3】:

      我只需将该数字添加到每个按钮的 AccessibleName 中,然后当代码捕获点击事件(所有按钮都应该相同)时,只需询问名称是什么:

       Button btn = (Button) sender;
       switch (btn.AccessibleName) {
          case "1":
             //blah
        }
      

      【讨论】:

      • 如果它已经是字符串“1”,为什么不直接使用它呢?切换的目的是什么?
      • 是的,您可以轻松地解析按钮名称并去掉“按钮”部分并留下数字。给猫剥皮的方法不止一种。开关显然是允许按按钮进行各种处理。
      【解决方案4】:

      有几种方法可以做到这一点:

      1. 将字符串“1”分配给按钮的Tag 属性,然后编写:

        MessageBox.Show((sender as Button).Tag.ToString()); //Show 1
        
      2. 假设命名约定保持不变,使用子字符串去除名称的“按钮”部分:

        string name = (sender as Button).Name;
        MessageBox.Show(name.Substring(7)); //Show 1
        

      Tag 的 MSDN:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag(v=vs.110).aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-09
        • 1970-01-01
        • 2021-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-22
        相关资源
        最近更新 更多