C#创建带标签的3x3 2d地图

C#创建带标签的3x3 2d地图,c#,multidimensional-array,C#,Multidimensional Array,有没有一种方法可以创建3行3柱带标签(或类似)的二维“地图”来轻松地处理数据 仅放置9个标签很容易,但我希望每个标签都可以使用相同的数组访问 它在表单中的外观: label1 label2 label3 label4 label5 label6 label7 label8 label9 如果我需要更改label5的属性,我希望像这样访问它: labelarray[1][1].Text=“测试”; (labelarray[行][列].属性) 我该怎么做 或者这可以通过另一种方式实现 class D

有没有一种方法可以创建3行3柱带标签(或类似)的二维“地图”来轻松地处理数据

仅放置9个标签很容易,但我希望每个标签都可以使用相同的数组访问

它在表单中的外观:

label1 label2 label3
label4 label5 label6
label7 label8 label9

如果我需要更改label5的属性,我希望像这样访问它:
labelarray[1][1].Text=“测试”; (labelarray[行][列].属性)

我该怎么做

或者这可以通过另一种方式实现

class Data
{
    private string text;
    public string Text
    {
        get { return text; }
        set { text = value; }
    }
}
class Program
{
    static void Main(string[] args)
    {
        Data[,] map = new Data[3, 3];
        map[1, 1] = new Data();
        map[1, 1].Text = "Test";
    }
}

编辑:修复错误。

来自tehMick的答案实际上会导致.NET 2.0中的运行时异常,但除此之外,该示例直截了当

二维数组的类型必须具有公共可访问属性,因此您可以直接访问它,如您所说:

public class DTO
{
    private String myStrProperty;
    public String MyStrProperty
    {
        get {return myStrProperty; }
        set { myStrProperty = value; }
    }

    public DTO(string myStrProperty)
    {
        this.myStrProperty = myStrProperty;
    }
}

class Program
{
    private static Logger logger;
    static void Main(string[] args)
    {
        DTO[,] matrix = 
        {
            {new DTO("label1"), new DTO("label2")},
            {new DTO("label3"), new DTO("label4")}
        };

        matrix[0, 1].MyStrProperty = "otherValue";
    }
}

下面是一个特定于winforms的示例。希望它能更好地回答这个问题:

    const int spacing = 50;
    Label[][] map = new Label[3][];
    for (int x = 0; x < 3; x++)
    {
        map[x] = new Label[3];
        for (int y = 0; y < 3; y++)
        {
            map[x][y] = new Label();
            map[x][y].AutoSize = true;
            map[x][y].Location = new System.Drawing.Point(x * spacing, y * spacing);
            map[x][y].Name = "map" + x.ToString() + "," + y.ToString();
            map[x][y].Size = new System.Drawing.Size(spacing, spacing);
            map[x][y].TabIndex = 0;
            map[x][y].Text = x.ToString() + y.ToString();
        }
        this.Controls.AddRange(map[x]);
    }
    map[1][1].Text = "Test";
const int间距=50;
标签[][]映射=新标签[3][];
对于(int x=0;x<3;x++)
{
map[x]=新标签[3];
对于(int y=0;y<3;y++)
{
map[x][y]=新标签();
映射[x][y]。自动调整大小=真;
地图[x][y]。位置=新系统。绘图。点(x*间距,y*间距);
map[x][y].Name=“map”+x.ToString()+,“+y.ToString();
映射[x][y]。大小=新系统。绘图。大小(间距,间距);
图[x][y].TabIndex=0;
映射[x][y].Text=x.ToString()+y.ToString();
}
this.Controls.AddRange(map[x]);
}
映射[1][1]。Text=“测试”;
私有无效按钮1\u单击(对象发送者,事件参数e)
{
字符串[]九个标签={“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”};
var labelarray=新标签[3,3];
//将标签放入矩阵形式
int c=0;
对于(int i=0;i<3;i++)
{
对于(int j=0;j<3;j++)
{
var lbl=新标签();
lbl.Text=九个标签[c];
lbl.Top=i*100;
左lbl=j*100;
labelarray[i,j]=lbl;
C++;
}
}
//向窗体添加标签
foreach(标签阵列中的var项目)
{
本.控件.添加(项);
}
//试验
labelarray[1,1].Text=“测试”;
}

注意:您需要添加一个按钮,然后在该按钮的
上单击
,调用此函数。

在Visual Studio 2010中与.NET 4.0完美结合。我如何使其公开,以便使用map[XPOS][YPOS].Text=“Test”;在我的代码中的任何地方?只需在适当的范围内定义映射。最好使其成为包含标签的表单的成员。你也可以把它公开,这样就可以从外部访问它。这段代码很棒,+1,如果我要用它在地图上导航的话,可以使用左、右等按钮。。Ik我会用一些东西来编码,比如如果按下左键,X的当前位置变成-1,但我的问题是我找不到一种方法来声明我当前在地图上的位置,你知道我怎么做吗?感谢您的帮助,谢谢!更新:没关系,我现在已经弄明白了,谢谢你提供的代码,这对我的工作有很大帮助!
 private void button1_Click(object sender, EventArgs e)
    {
        string[] nine_labels = { "a", "b", "c", "d", "e", "f", "g", "h", "i" };

        var labelarray= new Label[3,3];

        // putting labels into matrix form

        int c = 0;

        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                var lbl = new Label();

                lbl.Text = nine_labels[c];

                lbl.Top = i * 100;
                lbl.Left = j * 100;

                labelarray[i, j] = lbl; 

                c++;
            }
        }

        // adding labels to form
        foreach (var item in labelarray)
        {
            this.Controls.Add(item);
        }

        // test

        labelarray[1, 1].Text = "test";
    }