C#获取动态创建的控件的值

本文关键字:控件 创建 获取 动态 | 更新日期: 2023-09-27 18:22:05

Panel控件中有Label控件需要更新。CCD_ 3和CCD_ 4控件是动态创建的。现在我需要找到一种方法来获得Panel中1个Label的值。

C#代码

            // Create Panel
            Panel newpanel = new Panel();
            newpanel.Name = "panel_" + reader.GetValue(0);
            newpanel.Size = new Size(200, 200);
            newpanel.BorderStyle = BorderStyle.FixedSingle;
            newpanel.Parent = FlowPanel;
            // Create Label
            Label newipaddress = new Label();
            newipaddress.Name = "lbl_ip_add";
            newipaddress.Text = reader.GetValue(3).ToString();
            newipaddress.Location = new Point(55, 175);
            newipaddress.Parent = newpanel;
-------------
foreach (Panel p in FlowPanel.Controls)
{
    string ip = !!! GET IP FROM LABEL !!!
    Ping pingSender = new Ping();
    IPAddress pingIP = IPAddress.Parse(ip);
    PingReply pingReply = pingSender.Send(pingIP);
    lbl_ping_1.Text = string.Format("Ping: {0}", pingReply.RoundtripTime.ToString());
    if ((int)pingReply.RoundtripTime < 150)
    {
        lbl_ping_1.BackColor = Color.Green;
    }
    else if ((int)pingReply.RoundtripTime < 200)
    {
        lbl_ping_1.BackColor = Color.Orange;
    }
    else
    {
        lbl_ping_1.BackColor = Color.Red;
    }
}

字符串ip需要从Label获取ip。IP为字符串格式,将转换为您可以看到的IP地址。

如何获取动态创建的Label的值?

C#获取动态创建的控件的值

像标签这样的GUI工具真的不应该保存数据,它应该只是显示。因此,在您的情况下,最好将标签信息保存在局部变量或字典中。

在任何一种情况下,您都可以在面板的控制集合中搜索标签的名称(控制键):

string ip;
if (p.Controls.ContainsKey("ipLabel")) {
  ip = p.Controls["ipLabel"].Text;
}

这假设当你创建标签时,你将其命名为"ipLabel":

Label ipLabel = new Label();
ipLabel.Name = "ipLabel";

更新:

您还需要使用Controls集合将控件添加到容器中,而不是设置控件的Parent

示例:

newpanel.Controls.Add(newipaddress);

我也会用面板到流程面板控制来做这件事:

FlowPanel.Controls.Add(newpanel);

如果动态创建控件,则应该在每次生成页面时都这样做。最好在PreInit活动中进行。然后,您可以像OnLoad事件中的普通控件一样拥有事件和状态。