Avatar
hradil11
Člen
Avatar
hradil11:

Ahoj, mám problém s flowlayoutpanelem. Přidávání prvků mi funguje. Problém nastane když chci panel projít a nějaký nebo i všechny prvky odstranit, tak mi vždy jeden prvek na panelu zůstane. Zkoušel sem hledat na googlu a nic sem nenašel. Prosím o pomoc, díky

private void button1_Click(object sender, EventArgs e)
        {
            if (comboBox2.SelectedIndex == -1)
            {
                MessageBox.Show("Chyba, vyber položku ze seznamu");
            }
            else
            {
                pocitadlo_comp++;
                TextBox lbl = new TextBox();
                lbl.Name = pocitadlo_comp.ToString();
                lbl.Text = comboBox2.Items[comboBox2.SelectedIndex].ToString();
                lbl.AutoSize = true;
                lbl.Size = comboBox1.Size;
                lbl.ReadOnly = true;

                NumericUpDown nud = new NumericUpDown();
                nud.Name = pocitadlo_comp.ToString();
                nud.Value = 1;
                nud.Minimum = 1;
                nud.AutoSize = true;

                Button btn = new Button();
                btn.Name = pocitadlo_comp.ToString();
                btn.Text = "Odstraň";
                btn.AutoSize = true;
                Size sss = new Size();
                sss.Height = 23;
                sss.Width = 75;
                btn.Size = sss;
                btn.Click += new EventHandler(btn_click);




                flowLayoutPanel1.Controls.Add(lbl);
                flowLayoutPanel1.Controls.Add(nud);
                flowLayoutPanel1.Controls.Add(btn);
                comboBox2.Items.Remove(comboBox2.Items[comboBox2.SelectedIndex]);
            }
        }

        public void btn_click(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            foreach (Control c in flowLayoutPanel1.Controls)
            {
                if (c.Name == btn.Name)
                {
                    flowLayoutPanel1.Controls.Remove(c);
                }
            }
        }
 
Odpovědět 12.8.2013 23:18
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na hradil11
Jan Vargovský:

A debugoval jsi to ? Popř můžeš zkusit zavolat Dispose místo removování controlů z flw. Hlavně si to debugni a koukni co za kontrol zůstane. Napadá mě taky to, že jak odstraníš ten objekt, tak je hned null, to znamená, že btn == null a ta podmínka je hned false. Uložil bych si pouze to jméno toho tlačítka.

 
Nahoru Odpovědět 13.8.2013 2:40
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na hradil11
Jan Vargovský:

Edit jsem už nestihl, ale ten kód bys mohl optimalizovat, že by sis udělal vlastní UserControl, tam nacpal ty 3 komponenty, které tam jsou vždycky a to Removování bys buď udělal event nebo přímo implementoval do té komponenty pomocí toho Dispose. Nemusel bys řešit nic jako iteraci všech kontrolů v tom flw.

 
Nahoru Odpovědět 13.8.2013 2:47
Avatar
hradil11
Člen
Avatar
hradil11:

To už jsem zkoušel všechno. Problém je, že kód nefunguje i když odstraním podmínku a nechám odstranit všechny prvky na flw. Zkoušel sem už snad vše. Jediný dobrý výsledek mi vyšel když sem nechal vypsat messagem Name všech komponent. To mi vždy vypsalo všechny. Když sem přidal odstranění těch prvků, vždy mi jeden zůstane a vždy je to NumericUpDown.

 
Nahoru Odpovědět 13.8.2013 7:47
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.