【问题标题】:I can't reach the Label on the Panel我无法到达面板上的标签
【发布时间】:2021-04-08 20:10:14
【问题描述】:
public void blockControl()
{
    for (int i = 0; i < 10; i++)
    {
        if (game.wordCount < i + 1)
        {
            Label lbl = (Label)game.Controls["wordLabel" + (i + 1).ToString()];
            lbl.Visible = false;
            Panel a1 =  (Panel)game.Controls["wordLabel" + (i + 1).ToString()];
            a1.Visible = false;
        }
    }
}

这就是我在用户控件中访问标签的方式。

但是如果我在面板上贴上标签 lbl=0 正在发生

我应该怎么做才能到达?

我是这样解决的

public void blockControl()
{
    for (int i = 0; i < 10; i++)
    {
        if (form1.harfSayisi < i + 1)
        {
            Panel abc = (Panel)form1.Controls["panel" + (i + 1).ToString()];
            Label lbl = (Label)abc.Controls["lblHarf" + (i + 1).ToString()];
            lbl.Visible = false;
            abc.Visible = false;
        }
    }
}

【问题讨论】:

  • 您是否尝试循环面板Controls集合?
  • myPanel.Controls["wordLabel" + (i + 1).ToString()]; (用正确的面板名称代替我的myPanel)?由于标签在面板上,而不是在form1
  • 不要在问题中发布谢谢和解决方案。如果您已经解决了问题,请发布一个答案,其中显示您提出的代码并解释该代码解决问题的原因。

标签: c# winforms label panel


【解决方案1】:

您可以使用Controls.Find() 递归搜索。这样您就不需要先获得对 Panel 的引用。无论控件在其他容器中嵌套多深,搜索都会找到该控件。

缩短的代码可以是:

Label lbl = form1.Controls.Find("lblHarf" + (i + 1).ToString(), true).FirstOrDefault() as Label;
if (lbl != null)
{
    // ... do something with "lbl" ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多