有没有办法用3个字符串创建带有标签(或类似字体)的3行来创建一个2d“地图”,其数据可以轻松操作?
只需放置9个标签很简单,但我希望使用相同的数组访问每个标签。
表格中的样子:
label1 label2 label3
label4 label5 label6
label7 label8 label9
如果我需要更改label5的属性,我想访问它,如下所示:
labelarray [1] [1] .Text =“测试”;
(labelarray [row] [column] .Property)
我该怎么做?
或者这可以用另一种方式实现吗?
答案 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";