简体   繁体   中英

Strange drawing behavior with labels

on startup I'm generating a lot of controls 90 to be exact and everything is working ok EXCEPT for the labels they are not being drawn or something? they are there because I can click them and they show proper ID (click event) here's the genereation code

    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]);
        }
    }

I've tried adding a button with for(45) clientlabel[i].Refresh() and it did nothing I tried changing the visibilty of them all to false and then back to true and nothing however I did find 1 thing interesting if I hide lbl_1 label 2 text will appear if I had label 2 label 3 text will appear but if I change the previous label back to visible they stay invisible textwise

I can click in a line on the form and

    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);
    }

will pop up the proper ids etc does anyone know what's causing this maybe? or how to fix it

Well, I don't know what is the problem. This code works well enough and it has only marginal differences with the original(AutoSize property, explicit statement of Height and Width, and minor Location adjustment):

 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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM