繁体   English   中英

在C#中修改变量名

[英]Modifying Variable Names in C#

我不确定标题是否正确,因为我不确定如何解释。 我遇到过许多情况,能够动态修改变量名的一部分(例如带后缀的整数)可以为我节省大量时间,并使我的代码更整洁,但我不确定该怎么做。 这是我最近遇到的一个例子。

我在3 x 3的网格中有9个PictureBox。 每个PictureBox都有一个单元格名称,其后是数字,因此为cell1,cell2,cell3等。我想获取每个单元格的背景色,并将它们分配给变量,同时将它们转换为字符串,如下所示:

        for (int i = 1; i < 10; i++)
        {
            string ci = celli.BackColor.ToString();
        }

有什么方法可以让i变量仅将其数字值插入占位符,而不是在变量名后附加i? 我可以用某种支架包装吗? 我已经尝试过使用Google进行搜索,但发现仅使用关键字很难搜索。

提前致谢。

您可能正在使用可视化表单编辑器,执行此操作的最佳方法可能是通过代码(而不是可视化)生成网格。

另一个解决方案是使其成为矩阵:

PictureBox[,] cell = new PictureBox[,] {
    { cell1, cell2, cell3 },
    { cell4, cell5, cell6 },
    { cell7, cell8, cell9 }
};

string[,] c = new string[3, 3];

for(int y=0; y<3; y++)
    for(int x=0; x<3; x++)
        c[x, y] = cell[x, y].BackColor.ToString();

祝您的代码好运。

您想生成所有图片框的列表或集合,以便可以通过指定它们的索引来访问它们。 一种方法是在运行时生成PictureBoxes:

像这样:

List<PictureBox> myPics = new List<PictureBox>();
int picWidth = 100;
int picHeight = 100;
for (x = 0; x <= this.Width; x += picWidth) {
    for (y = 0; y <= this.Height; y += picHeight) {
        PictureBox pic = new PictureBox();
        pic.Image = pic.Image;
        // Your image
        pic.Location = new Point(x, y);
        this.Controls.Add(pic);
        myPics.Add(pic);
    }
}

// Do something with myPics...

另一种方法是,当窗体上确实具有所有图片框时,可以遍历所有控件,检查哪些是图片框,然后检查其Name属性以标识其索引。 然后相应地对他们进行处理。

foreach (void ctrl_loopVariable in this.Controls) {
    ctrl = ctrl_loopVariable;
    if (ctrl.GetType() == typeof(PictureBox)) {
        if (ctrl.Name == "your picture box name to test") {
            // Do something here with ctrl
        }
    }
}

(以上代码已从VB转换为C#,请谅解转换问题)

您的意图是动态引用这些控件。

为了实现这一点,有两种选择:

  • 您动态创建这些控件
  • 您为表单设计者创建的控件创建动态引用。

第一点解释了什雷亚斯·卡普尔的回答。 第二个可能是像这样的圆锥体

readonly Dictionary<Point,PictureBox> _dynamicMappedBoxes = 
         new Dictionary<Point,PictureBox>();

// Call this once in the beginning ofr your program
void createDynamicMapping()
{
    foreach(PictureBox box in Controls.OfType<PictureBox>())
    {
        Point coords = getCoordinatesFromName(box);
        _dynamicMappedBoxes.Add(coords, box);
    }
}

Point getCoordinatesFromName(PictrueBox box)
{
    int x = int.Parse(box.Name.SubString(IdontKnow);
    int y = int.Parse(box.Name.SubString(IdontKnow);
    retrun new Point(x,y);
}

//usage
string colorName = dynamicMappedBoxes[new Point(x,y)].BackColor.ToString();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM