【问题标题】:dinamcally adding controls C#动态添加控件 C#
【发布时间】:2015-04-27 07:38:36
【问题描述】:

我正在尝试在应用程序的初始化时创建一个新标签。我已经解决了其他问题和答案,并做了这样的事情:

    public Form1()
    {
        InitializeComponent();
        try
        {
            foreach (Button b in Controls)
            {
                FillBoard(b);
            }
            Label tScore = new Label();               
            tScore.Size = new Size(244, 22);
            tScore.Location = new Point(12, 46);
            tScore.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            tScore.Text = "Some text";               
            tScore.Visible = true;
            Controls.Add(tScore);
            Show();
            Refresh();

        }
        catch { }
    }

但是当我启动应用程序时标签仍然没有出现。我做错了什么?

【问题讨论】:

  • 您是否遇到任何错误? (如在catch 中)。从构造函数内部Show 似乎很奇怪
  • 空渔获物是邪恶的。这相当于将黑色胶带贴在发动机警告灯上。
  • 没有错误。该应用程序只是忽略了标签的存在。
  • 可能是因为您需要以某种方式将其添加到Form1 实例中。
  • 您的表单有多大?您正在明确设置位置。也许它超出了表单范围,这就是您看不到标签的原因。

标签: c# winforms controls


【解决方案1】:

您的应用程序在foreach (Button b in Controls) 上崩溃。 您正在尝试将所有控件强制转换为不起作用的按钮。

你应该像这样迭代它。

foreach (Control b in Controls)
            {
                if (b is Button)
                {
                   FillBoard(b); 
                }
            }

【讨论】:

  • 这确实有效,只是我必须在 'if' 条件内创建一个新的按钮 c 并将其设置为等于 (Button)b,因为 fillBoard 函数只接受按钮作为参数。但无论如何,谢谢你:)
  • @JimmyHabanero - 你总是可以使用foreach(var b in Controls.OfType<Button>())
【解决方案2】:

只有一个错误。 this.Controls.Add(label);

【讨论】:

    猜你喜欢
    • 2011-05-17
    • 2012-12-10
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多