Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Java. Zároveň využij akce až 80 % zdarma při nákupu e-learningu. Více informací:
Avatar
Matyáš Černohous:4.4.2013 16:19

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
Tvůrce
Avatar
Odpovídá na Matyáš Černohous
Petr Nymsa:4.4.2013 16:23

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:4.4.2013 16:35

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
Зайчик:4.4.2013 16:54

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
Зайчик:4.4.2013 16:58

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
Зайчик:4.4.2013 17:19
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
4.4.2013 17:19
Коммунизм для нашего будущего!
Avatar
Зайчик
Člen
Avatar
Odpovídá na Matyáš Černohous
Зайчик:4.4.2013 18:22

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:4.4.2013 18:34

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
Зайчик:4.4.2013 19:00

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:4.4.2013 19:40

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
Tvůrce
Avatar
Odpovídá na Matyáš Černohous
Petr Nymsa:4.4.2013 19:54

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
Odpovídá na Зайчик
Neaktivní uživatel:4.4.2013 20:27

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
Neaktivní uživatelský účet
Avatar
Odpovídá na Petr Nymsa
Matyáš Černohous:4.4.2013 20:30

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 Neaktivní uživatel
Зайчик:4.4.2013 20:30

Ří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
Зайчик:4.4.2013 20:34

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
Tvůrce
Avatar
Odpovídá na Matyáš Černohous
Petr Nymsa:4.4.2013 20:40

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:4.4.2013 21:48

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:7.4.2013 19:36

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
Odpovídá na Matyáš Černohous
Зайчик:7.4.2013 20:02

Tak aspoň že už to běží. :)

Nahoru Odpovědět
7.4.2013 20:02
Коммунизм для нашего будущего!
Avatar
Dalibor Zeman:16.9.2022 11:17

Ahoj, učím se programovat v C# dostal jsem úkol:Cílem zadání je vytvořit konzolový TODO list s možností přidávání nových událostí, zobrazením jejich seznamu a mazaním. Dále pak uložení seznamu událostí do souboru a jeho opětovné načtení. Úkol se snaž plnit po částech, jak je rozdělen níže.

## 1. část

Cílem 1. části je vytvořit TODO list se třemi základními příkazy, pro zadaní, zobrazení a smazání. Každý úkol bude mít tři atributy, int id, string ukol a DateTime deadline. Hodnoty, které bude zadávat uživatel jsou uvedeny v hrantých závorkách.

### Příkazy

* Přidání nového úkolu s deadlinem. Novému úkolu se přiřadí id, podle kterého pak půjde smazat.
>>> add [úkol] [deadline]
* Zobrazení seznamu všech dosud přidaných úkolů. Zobrazí zadané úkoly s jejich id a deadliny, každý na nový řádek.
>>> list
* Odebrání existujícího úkolu podle id.
>>> del [id]

### Příklad

>>> add "Vysát si doma" "1.9.2022"
>>> Úkol "Vysát si doma" do 01.09.2022 úspěšně uložen s id 1.
>>> add "Nakoupit" "2.9.2022"
>>> Úkol "Nakoupit" do 02.09.2022 úspěšně uložen s id 2.
>>> list
>>> 1 | "Vysát si doma" | 01.09.2022
>>> 2 | "Nakoupit" | 02.09.2022
>>> del 1
>>> Úkol "Vysát si doma" do 01.09.2022 odstraněn.
>>> list
>>> 2 | "Nakoupit" | 02.09.2022

## 2. část

Cílem 2. části je umožnit uložení zadaných úkolů do souboru (vymysli vhodný formát) a opětovné načtení souboru. Úkoly tak půjdou uložit, ikdyž program skončí.

### Příkazy

* Uložení dosud zadaných úkolů do souboru.
>>> save [název souboru]
* Načtení úkolů se souboru.
>>> load [název souboru]
Můj kód zatím vypadá takto:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OnlineApp
{
    class Ukol{
        public int id;
        public string ukol;
        public DateTime deadline;
    }

    class Program
    {
        static void Main(string[] args)
        {
           List<string> id = new List<string>();

            id.Add("Pavel Novak");
            id.Add("Jakub Novák");
            id.Add("Petr Novak");
            id.Add("Jiří Novak");
            id.Add("Adam Novak");

            List<Ukol> ukoly = new();
            Ukol ukol = new();
            ukol.id = 1;
            ukol.ukol = "Vysat";
            ukoly.Add(ukol);

            ukol = new();
            ukol.id = 2;
            ukol.ukol = "Vyprat";

            ukoly.Add(ukol);
            ukol = new();
            ukol.id = 3;
            ukol.ukol = "Pověsit prádlo";
            ukoly.Add(ukol);


            string r = Console.ReadLine();
            string[] pole = r.Split(" ");

            Console.WriteLine(pole[0]);

            Console.WriteLine


            //Console.WriteLine(id[0]);

            //List<string> task = new();
            //task.Add(id[1]);
            //Console.WriteLine(task[1]);




        }
    }
}

Chci se zeptat jakým příkazem docílím toho vymazat treba úkol co má ID 1 ?

Děkuji za odpověď

 
Nahoru Odpovědět
16.9.2022 11:17
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 22 zpráv z 22.