Avatar
Matyáš Černohous (Matesak):

Zdravím,
mám app a přidávám věci do listu a ty se potom zobrazují v listboxu. Udělal jsem editaci - po kliknutí na item v listboxu může uživ. měnit vlastnosti a pak uložit. Udělal jsem to tak že po kliknutí na Uložit změny se vybraný item se z listboxu odstraní a přidá se nový, ale pokud to chci uložit, tak se mi do souboru uloží změněný item, ale i ten původní. Tak bych se chtěl zeptat jak můžu odstranit vybraný item v listboxu z listu.
Díky

 
Odpovědět 4.4.2013 16:19
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Petr Nymsa:

Zjistíš jaký item se vybral přes event SelectionChanged.

NejakaTrida obj=(NejakaTrida)listbox.SelectedItem

Potom ho vymažeš

listbox.Items.Remove(obj);
Nahoru Odpovědět 4.4.2013 16:23
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Matyáš Černohous (Matesak):

Já to mám takhle

for (int i = 0; i < list.SelectedItems.Count; i++)
               list.Items.Remove(list.SelectedItems[i]);

ale řeším problém, že já když ukládám, tak beru data z Listu. Takže když smažu ten vybraný item v listboxu tak to potřebuju taky odebrat z Listu.

 
Nahoru Odpovědět 4.4.2013 16:35
Avatar
Зайчик
Člen
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Зайчик:

Je to easy... v listboxu si vytvoř event ItemSelection­Changed a ukládej si poslední selected index. Něco takového

private void mujlistBox_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
    posledniIndex = e.ItemIndex;
}

tak, teď máš poslední selected index po každém změnění

// smažu item z listboxu nebo jak to máš řešené
for (int i = 0; i < list.SelectedItems.Count; i++)
                list.Items.Remove(list.SelectedItems[i]);
// smažu item z listu
MujList.Remove(posledniIndex);
Editováno 4.4.2013 16:56
Nahoru Odpovědět 4.4.2013 16:54
Коммунизм для нашего будущего!
Avatar
Зайчик
Člen
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Зайчик:

ta metoda je pro listview ... akorát vytvoř metodu SelectIndexChanged v listboxu místo listvieweu.. prve jsem to psal pro listview :)

Nahoru Odpovědět 4.4.2013 16:58
Коммунизм для нашего будущего!
Avatar
Зайчик
Člen
Avatar
Зайчик:
int posledniIndex = 0;
// tlacitko na mazani
private void button1_Click(object sender, EventArgs e)
        {
            mujlist.Remove(mujlist[posledniIndex]);
            for (int i = 0; i < listBox1.SelectedItems.Count; i++)
                listBox1.Items.Remove(listBox1.SelectedItems[i]);
            listBox1.Items.Clear();
            vyplnBox(); // precte data z listu a naplni tak listbox
        }
// ulozim posledni index
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            posledniIndex = listBox1.SelectedIndex;
        }

To vyplnění tam být nemusí, ani clear. Jen jsem zkoušel jestli se to opravdu vymazalo. o_O

Editováno 4.4.2013 17:20
Nahoru Odpovědět  +1 4.4.2013 17:19
Коммунизм для нашего будущего!
Avatar
Зайчик
Člen
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Зайчик:

njn index je mimo hranici pole, tenhle kousek kódu mi fakt nic moc neřekne ;)

Nahoru Odpovědět 4.4.2013 18:22
Коммунизм для нашего будущего!
Avatar
Odpovídá na Зайчик
Matyáš Černohous (Matesak):

tady je celá editace

private void button5_Click(object sender, EventArgs e)
        {
            // nacteni hodnot
            string jmeno = textBox1.Text;
            int utok = Convert.ToInt32(edutok.Value);
            int cena = Convert.ToInt32(edcena.Value);
            int level = Convert.ToInt32(edlvl.Value);
            string Cesta = label5.Text;



            // nove hodnoty predetu

            textBox1.Text = jmeno;
            edutok.Text = utok.ToString();
            edcena.Text = cena.ToString();
            edlvl.Text = level.ToString();
            Cesta = label13.Text;


            // pridadani veci do Listu a do listboxu
            databaze.PridejUzivatele(jmeno, utok, cena, level, Cesta);
            list.Items.Add(new Vec(jmeno, utok, cena, level, Cesta));


             // Odebrani veci z listu
            databaze.veci.Remove(databaze.veci[posledniIndex]);

            //odbrani z listboxu
            for (int i = 0; i < list.SelectedItems.Count; i++)
                list.Items.Remove(list.SelectedItems[i]);




        }

jinak v ListBoxu to mám tak jak jsi to psal.

 
Nahoru Odpovědět 4.4.2013 18:34
Avatar
Зайчик
Člen
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Зайчик:

můůů přemejšlej trochu, když index je mimo hranici pole, tak se asi index v metode selected item changed nebo jak se jmenuje někde stala zrada a lastindex bude nejspíš -1 a to nesmí... Takže si mohl pomocí try catch zjistit kolik je index při tom když to vyhodí tu chybu.

if (lastindex >= 0)
{
    mujlist.Remove(mujlist[lastindex]);
    for (int i = 0; i < listBox1.SelectedItems.Count; i++)
        listBox1.Items.Remove(listBox1.SelectedItems[i]);
}
Nahoru Odpovědět 4.4.2013 19:00
Коммунизм для нашего будущего!
Avatar
Odpovídá na Зайчик
Matyáš Černohous (Matesak):

Index vždy po stisku tlačítka uložit změny klesne na -1.

 
Nahoru Odpovědět 4.4.2013 19:40
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Petr Nymsa:

Využij můj způsob. Je zbytečný projíždět celou kolekci. Vezmi si prostě Selecteditem a potom zavoláš metodu Remove a vložíš vybraný item :)

NejakaTrida obj=(NejakaTrida)listbox.SelectedItem;
listbox.Items.Remove(obj);
Nahoru Odpovědět 4.4.2013 19:54
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Зайчик
Jiří Gracík:

Try a Catch je na ošetření uživatelských vstupů, ne na odstraňování programátorových chyb a problémů :)

Nahoru Odpovědět 4.4.2013 20:27
Creating websites is awesome till you see the result in another browser ...
Avatar
Odpovídá na Petr Nymsa
Matyáš Černohous (Matesak):

Buď jsem nepochopil já tebe, nebo ty mě :D . Já potřebuju odstranit tu vybranou položku z listu i z listboxu. Jak jí odendat z listboxu to vím, ale potřebuju jí zároveň oddělat z listu.

 
Nahoru Odpovědět 4.4.2013 20:30
Avatar
Зайчик
Člen
Avatar
Odpovídá na Jiří Gracík
Зайчик:

Říkám, že lze zjistit jednoduše chybu při pádu aplikace, kdy normálně padne tak si tam dát try catch a nechat si vypsat index, který nám tam dělá bordel ať vím jestli je mínusový nebo nikoli. Tak mě nepoučuj. Rozhodně je to pohodlnější než přes breakpointy v debugování. Dokonce i rychlejší.

Nahoru Odpovědět 4.4.2013 20:30
Коммунизм для нашего будущего!
Avatar
Зайчик
Člen
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Зайчик:

To že jsem ti už asi 3x napsal řešení stále nestačí? :) Zirko píše ať to z listboxu nemažeš tak že kontroluješ všechny indexy... vem si že jich tam může být i o dost víc než tam máš teď. Tak ti tím chtěl říct ať tuhle část uděláš tak..že to bude asik rychlejší a ta druhá část už je tu 3x napsaná. Achjo ;)

Nahoru Odpovědět 4.4.2013 20:34
Коммунизм для нашего будущего!
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Petr Nymsa:

Stejným způsobem to vymažeš i z listu ne ? Pokud to máš stejné objekty, tj jak listbox.Items­.Remove(obj) tak i list.Remove(obj). Není co řešit.. :)

Nahoru Odpovědět 4.4.2013 20:40
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Matyáš Černohous (Matesak):

Díky všem za trpělivost, konečně to jede :D

 
Nahoru Odpovědět 4.4.2013 21:48
Avatar
Зайчик
Člen
Avatar
Nahoru Odpovědět 4.4.2013 21:54
Коммунизм для нашего будущего!
Avatar
Odpovídá na Зайчик
Matyáš Černohous (Matesak):

Právě jsem přišel na to proč to nechtělo fungovat. Upravoval jsem data z listu, ale neuvědomil jsem si, že když jsem načítal tak jsem data neukládal do listu, ale vkládal jsem je přímo do listboxu, takže ten tvůj první kód jak jsi mi poradil, je dobrej. Nefungovalo to jen kvůli mé blbosti.

 
Nahoru Odpovědět 7.4.2013 19:36
Avatar
Зайчик
Člen
Avatar
Nahoru Odpovědět 7.4.2013 20:02
Коммунизм для нашего будущего!
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 21 zpráv z 21.