带有标签的奇怪绘图行为

本文关键字:绘图 标签 | 更新日期: 2023-09-27 18:10:58

在启动时,我生成了很多控件90是准确的,一切都是正常的,除了标签,他们没有被绘制或什么?它们在那里是因为我可以点击它们它们显示了正确的ID(点击事件)这是生成代码

    private static bool ClientsLoaded = false;
    private static WebBrowser[] Clients = new WebBrowser[45];
    private static Label[] ClientLabel = new Label[45];
    private static int MaximizedClient = -1;
    public Form1()
    {
        InitializeComponent();
        int WBoffsetX = 0;
        int WBoffsetY = 0;
        int lbloffsetX = 0;
        int lbloffsetY = 0;

        for (int i = 0; i < 45; i++)
        {
            var wb = new WebBrowser();
            Clients[i] = wb;
            wb.ScrollBarsEnabled = false;
            wb.Height = 12;
            wb.Width = 12;
            wb.Location = new Point(2 + WBoffsetX, 2 + WBoffsetY);
            WBoffsetX += 13;
            wb.ScriptErrorsSuppressed = true;
            this.Controls.Add(wb);
            ClientLabel[i] = new Label();
            ClientLabel[i].Name = "lbl_" + i;
            ClientLabel[i].Font = new Font("Arial", 12);
            ClientLabel[i].ForeColor = System.Drawing.Color.White;
            ClientLabel[i].Location = new Point(12 + lbloffsetX, 450 + lbloffsetY);
            lbloffsetX += 22;
            ClientLabel[i].Click += new EventHandler(lbl_click);
            ClientLabel[i].Text = "C" + i + ": o";
            this.Controls.Add(ClientLabel[i]);
        }
    }

我尝试添加一个按钮与(45)clientlabel[I].Refresh(),它没有做任何事情,我试图改变他们的可见性都为假,然后回到真,但我确实发现了一件有趣的事情,如果我隐藏lbl_1标签2文本将出现,如果我有标签2标签3文本将出现,但如果我改变之前的标签回可见,他们保持不可见的文本

我可以在表单上点击一行,然后

    private void lbl_click(object sender, EventArgs e)
    {
        int id = -1;
        var s = sender.ToString();
        for(int i = 0; i<=45; i++)
        {
            if (s.Contains("C" + i + ":"))
            {
                id = i;
            }
        }
        MessageBox.Show("Hello label, " + id);
    }

将弹出相应的id等有人知道是什么原因造成的吗?或者如何修复

带有标签的奇怪绘图行为

嗯,我不知道是什么问题。这段代码工作得很好,它与原始代码只有微小的差异(AutoSize属性,显式的Height和Width语句,以及较小的Location调整):

 for (int i = 0; i < ClientLabel.Length; i++)
   {    
        // Web browsers
        WebBrowser wb = new WebBrowser()
        {
            ScrollBarsEnabled = false,
            Height = 12,
            Width = 12,
            Location = new Point(2 + WBoffsetX, 2 + WBoffsetY),
            ScriptErrorsSuppressed = true
        };
        WBoffsetX += 13;
        Clients[i] = wb;
        // Labels
        Label label = new Label()
        {
            Name = "label_" + i,
            Text = "Data",
            AutoSize = true,
            Location = new Point(50 + lbloffsetX, 50 + lbloffsetY),
            Width = 100,
            Height = 20,
            Font = new Font("Arial", 12),
            ForeColor = System.Drawing.Color.White,
        };
        label.Click += new EventHandler(lbl_click);
        ClientLabel[i] = label;
        lbloffsetX += 30;
    }
    this.Controls.AddRange(Clients);
    this.Controls.AddRange(ClientLabel);