让小组在C#的特定位置

时间:2012-09-13 07:36:58

标签: c# winforms

例如,我得到了25个面板,形成一个网格(5行,5列), 如果我点击其中一个我想得到的上面的小组也是。 起初我将面板命名为他们的位置,例如PanelX1Y1,PanelX1Y2 ...... 然后我从名称中取出了coords并创建了新的coords ... 在我得到新名字之后,我使用了一个foreach循环来浏览所有项目并获得一个正确名称。

我已经尝试过winforms的位置,所以我采取了点击的一个addet的位置,例如25像素,并填写表格中的所有项目,并通过他们的位置检查。

但我不想在所有项目中循环...... 如果我知道它的名称whitout来遍历所有项目并检查他们的名字,我怎么才能得到这个项目..

我可以用这个: this.Controls [ “名称”];

好吧我的网格: p11 p12 p13 p21 p22 p23 p31 p32 p33

如果我点击p31我想在p31和p21改变一些东西,所以我需要对象p21

3 个答案:

答案 0 :(得分:1)

要直接回答您的问题,您可以使用Find()类的ControlCollection方法。 e.g:

myForm.Controls.Find("panelX1Y2")

为了建议一个更好的方法,不要使用字符串来做这样的事情。这是hackish和马虎。

相反,在2D数组中初始化面板并使用数组索引查找正确的面板。

答案 1 :(得分:0)

首先,您可以通过继承Panel创建自己的类,并在位置的属性内部(而不是在面板名称中存储位置)。

然后,您可以创建对您的面板的引用集合。通过使用哈希表(或类似的东西),您可以通过某些ID访问面板,可以从x和y创建。

答案 2 :(得分:-1)

你可以不用字典吗?请记住,如果这对您很重要,则不会订购字典。

 Dictionary<string, Panel> dcPanels = new Dictionary<string, Panel>();
 dcPanels.Add("GridA", new Panel());
 Panel p = dcPanels["GridA"];