如何动态命名Linklabels?

时间:2019-04-16 17:52:08

标签: c# winforms

我试图动态更改linklabel的名称,以便能够在for语句中循环使用它们,但是由于我缺乏编程知识,因此无法完成它。

如果您能解释我的每一步,我将非常感激。

for (int i = 0; i < 205; i++)
{
    if (LinkLabel# + i.Text == "name")
    {
        // do stuff

    }
}

2 个答案:

答案 0 :(得分:0)

您可以按名称搜索表单上的控件以获取对它们的引用。

memeads <- lmer(means ~ crosswalk + approach_width + lumix + pop_dens + empl_dens + (1 + lumix + pop_dens + empl_dens | Approach_ID) + (1 +crosswalk + approach_width | Int_ID), data = db)

尽管如果强制转换失败或找不到控件,这可能会引发异常。

一种更安全的方法是使用模式匹配:

LinkLabel ll = (LinkLabel)this.Controls["LinkLabel" + i];

答案 1 :(得分:0)

另一种方法(由@Broots Waymb建议)是动态创建链接标签控件并将其添加到表单中。这是一些示例代码,这些代码是我从已经使用的其他代码中改编而成的。 (未经测试,但看起来应该可以使用)

    /// <summary>
    /// List for storing references to the LinkLabels
    /// </summary>
    List<LinkLabel> m_LinkLabels = new List<LinkLabel>();

    /// <summary>
    /// Creates and places all the LinkLabels on the form
    /// </summary>
    private void CreateLinkLabels()
    {
        int startingX = 100;        // starting top left X coordinate for first link label
        int startingY = 100;        // starting top left Y coordinate for first link label
        int xOffset = 20;           // horizontal space between labels
        int yOffset = 20;           // vertical space between labels
        int labelsToCreate = 100;   // total number of labels to create
        int labelsPerRow = 10;      // number of labels in each row
        int labelWidth = 61;        // width of the labels
        int labelHeight = 13;       // height of the labels

        int labelsInCurrentRow = 0; // number of labels in the current row
        int x = startingY;          // current x coordinate
        int y = startingX;          // current y coordinate
        int tabIndexBase = 65;      // base number for tab indexing 

        for (int i = 0; i < labelsToCreate; i++)
        {
            // update coordinates for next row
            if (labelsInCurrentRow == labelsPerRow)
            {
                x = startingX;
                y += yOffset;
                labelsInCurrentRow = 0;
            }
            else
            {
                x += xOffset;
                labelsInCurrentRow++;
            }

            // create the label
            LinkLabel ll = new LinkLabel()
            {
                Name = "LinkLabel" + (i + 1), // +1 to correct zero based index
                AutoSize = true,
                Location = new System.Drawing.Point(x, y),
                Size = new System.Drawing.Size(labelWidth, labelHeight),
                TabIndex = tabIndexBase + i,
                TabStop = true,
                Text = "LinkLabel" + (i + 1) // +1 to correct zero based index
            };

            // add the label to the list
            m_LinkLabels.Add(ll);
        }

        // add all controls in the list to the form
        this.Controls.AddRange(m_LinkLabels.ToArray());
    }