[英]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.