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

时间:2010-01-23 17:59:15

标签: c# multidimensional-array

有没有办法用3个字符串创建带有标签(或类似字体)的3行来创建一个2d“地图”,其数据可以轻松操作?

只需放置9个标签很简单,但我希望使用相同的数组访问每个标签。

表格中的样子:

label1 label2 label3
label4 label5 label6
label7 label8 label9

如果我需要更改label5的属性,我想访问它,如下所示:
labelarray [1] [1] .Text =“测试”; (labelarray [row] [column] .Property)

我该怎么做?

或者这可以用另一种方式实现吗?

4 个答案:

答案 0 :(得分:2)

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";
    }
}

编辑:修正错误。

答案 1 :(得分: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";
    }

注意:您需要添加一个按钮并在该按钮的Click上调用此功能。

答案 2 :(得分:0)

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";
    }
}

答案 3 :(得分:0)

这是一个特定于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";