【问题标题】:Get Index of Control in an Control-Array获取控件数组中的控件索引
【发布时间】:2011-02-24 17:27:19
【问题描述】:

我有一个文本框数组

private TextBox[,] Fields = new TextBox[9, 9];

所有的文本框都有相同的 TextChanged-Event

void Field_Changed( object sender, EventArgs e )

有没有办法在数组中获取发送者的索引(不给每个 TextBox 自己的 EventHandler)?

【问题讨论】:

    标签: c# arrays controls indexing


    【解决方案1】:
    1. 你真的需要索引吗,sender 是对发送请求的实例的引用。

    2. 如果1的答案是肯定的,您可以将索引放在文本框的'Tag'属性中,然后查询。

    3. 或者,您可以在数组中搜索与事件的 sender 参数匹配的实例。

    【讨论】:

      【解决方案2】:

      您几乎必须遍历数组并对每个文本框进行引用相等检查。

      当您将控件插入数组时,或者将索引分配给标记。但这是一个微优化,并不值得。

      【讨论】:

        【解决方案3】:

        尝试在初始化时为每个文本框指定 TagName,然后您可以将 sender 转换为 TextBox 并查看其中任何一个属性。

        【讨论】:

          【解决方案4】:

          您可以遍历对象并找到引用等于发送者的对象:

          for (int i = 0; i < 9; i++)
          {
              for (int j = 0; j < 9; j++)
              {
                  if (Object.ReferenceEquals(sender, Fields[i, j])) 
                      Console.WriteLine(i + " " + j);
              }
          }
          

          【讨论】:

            【解决方案5】:

            留意Array Members 可能会有所帮助。

            您特别需要的是IndexOf() 方法。有多个重载。选择最适合您的需求。

            【讨论】:

            • 据我所知仅适用于一维数组。
            猜你喜欢
            • 1970-01-01
            • 2012-07-22
            • 2015-03-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-30
            • 1970-01-01
            相关资源
            最近更新 更多