【问题标题】:Visual Studio 2010 TableLayoutPanel with Buttons events带有按钮事件的 Visual Studio 2010 TableLayoutPanel
【发布时间】:2012-04-21 22:02:53
【问题描述】:


我在 Visual Studio 2010 中以设计器模式制作了一个 TableLayoutPanel(例如 8x8 rowsxcolumns),然后我在这个“矩阵”的每个字段中都放置了一个按钮。有什么办法可以集中处理事件?我发现 TableLayoutPanel 有 TabIndexChanged,但我不知道这是否对我有用。
我只是想知道这是否可能:
我单击第二个按钮并获取有关我单击的按钮的信息,并且将能够更改他的某些属性-例如图标或文本。
让我们想象一个想法,我将 tablelayoutpanel 理解为“矩阵”或“数组”,我想用它来做这样的事情:

1)I'll click on button on possition i (or i,j)
2)I'll change the Icon of button on possition i (or i,j)

这可能吗?如果是,如何?
谢谢

【问题讨论】:

    标签: c# visual-studio-2010 events button tablelayoutpanel


    【解决方案1】:

    您可以让一个方法处理所有按钮单击事件,然后使用 sender 参数修改按钮上的图像。

    例如

    private void CreateButtons(object sender, EventArgs e)
        {
            for (int i = 0; 8 < length; i++)
            {
    
                for (int j = 0; 8 < length; i++)
                {
                    var btn = new Button() { Text = "Something" };
                    btn.Click += new EventHandler(btn_Click);
                    this.tableLayoutPanel1.Controls.Add(btn, i, j);
                }
            }
    
        }
    
        void btn_Click(object sender, EventArgs e)
        {
             ((Button)sender).Image= SomeMethodThatReturnsAnImage();
        }
    

    顺便说一句,TabIndexChanged 对您来说完全没用,因为它仅在控件的 TabIndex 属性发生更改时才会引发,这通常非常罕见。您会记得 TabIndex 属性用于控制用户按下 Tab 键时的控件顺序。

    【讨论】:

      【解决方案2】:

      听起来你只需要将所有按钮的单击事件与单个事件处理程序相关联,然后在事件处理程序内操作单击的按钮等

      【讨论】:

      • 如果我们的意思是“关联”同样的事情,那么你实际上只是重写了我的问题:D 我可以有 8x8 按钮,但我也可以有 100x100 按钮...
      • 我没有读到你的问题意味着你已经将所有按钮的点击事件连接到一个处理程序;我提出了与 Conrad Frix 相同的解决方案。你想让我说得更详细吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 2023-03-11
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多