设置从名称控制运行时的位置

时间:2015-07-30 16:16:36

标签: c# .net winforms

我有一个控件列表及其在数据表中的位置,我想通过整个数据表并设置每个控件的位置。我遇到的困难是定义我想要设置位置的控件。 例如,可以按如下方式设置控件的位置:

button1.Location = new Point(xpos, Ypos);
button2.Location = new Point(xpos, Ypos);

事情是,我不能事先对所有控件的名称进行硬编码。这是我当前使用的代码:数据表包含表单中每个控件的一行,并且有三列:控件名称,x位置和y位置。

int rowPosition = 0;
Control x;
string controlName;
int xCoord;
int yCoord;

foreach (DataRow row in dtControlPosition.Rows)
{                
    controlName = dtControlPosition.Rows[rowPosition]["Control"].ToString();

    xCoord = Convert.ToInt32(dtControlPosition.Rows[rowPosition]["XCoord"].ToString());

    yCoord = Convert.ToInt32(dtControlPosition.Rows[rowPosition]["YCoord"].ToString());

    // don't have any idea what to do here:
    // I tried x.Name = controlName
    // x.Location = new Point(Convert.ToInt32(xCoord),Convert.toInt32(yCoord));

    rowPosition = rowPosition +1;
} 

当我尝试上述操作时,我收到错误“使用未分配的局部变量”x“。”

1 个答案:

答案 0 :(得分:1)

假设表单上已经存在控件而你只想设置位置,请调用Form.ControlCollection.Find从名称中获取对控件的引用:

  

通过Name属性搜索控件并构建一个数组   所有匹配的控件

所以,像这样:

Control x = this.Controls.Find(controlName, true).FirstOrDefault();

if (x != null)  
    x.Location = new Point(xCoord, yCoord);