Kontrolka listbox() 0 usuwanie rekordów po czasie

0

Witam,

Mając trzy radiobutton'y() oraz kontrolkę typu listbox() - tak jest zbudowana forma, dodatkowo timer'y z ustawiony interwałem.
Trzymanie liczb w listboxie()
richtextbox1 - 10 sekund;
richtextbox2 - 20 sekund;
richtextbox3 - 30 sekund;

I teraz tak, definiuję w polu textbox1() dowolną liczbę, wybieram richtextbox2 - 20 sekund - czyli wrzucenie liczby do listbox'a na 20 sekund po czym następuje usunięcie - i to mam i to działa.
Ale teraz gdy wprowadam drugi rekord tym razem na 10 sekund - wpisuje liczbę, wybieram richtextbox1 - 10 sekund i wrzucam do listbox'a - i tam mam dwie wartości, dwa item'y - ten pierwszy wyżej wymieniony na okres 20 sekund i ten drugi 10 sekundowy - i mam funkcję, że po tym czasie 'x' te liczby są usuwane z listbox'a - jednak mając parę rekordów, funkcja bierze ten ostatni wyszczególniony i bierze ten czas usunięcia tego ostatniego item'a i usuwa wszystko, a chcę zrobić podział, że item1 usunie po 20 sekundach, item2 po 10 sekundach. (najlepiej z odliczaniem czasu w lejbelce)

pomozecie? część juz mam, tylko kwestia tych itemów

0
 private void button2_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Add(textBox1.Text);

            if (radioButton1.Checked == true)
            {
                timer1.Enabled = true;
                timer1.Start();
            }
            if (radioButton2.Checked == true)
            {
                timer2.Enabled = true;
                timer2.Start();
            }
        }
 private void timer1_Tick(object sender, EventArgs e)
        {
            if (radioButton1.Checked == true)
            {
                listBox1.Items.Clear();
            }
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton2.Checked == true)
            {
                listBox1.Items.Clear(); 
            }
        }

Tak to wygląda - dla zobrazowania przykładu. Wybieram richtTextbox1 - usunięcie wyrazu po 5 sekundach i go usuwa jak minie pięć sekund.

Jednakże w przypadku dwóch item'ów usuwa wszystko - i bierze pod uwagę czas ostatniego item'a. Wiem - dałem tam listBox1.Items.Clear(); ale właśnie nie wiem jak się odwołać do tego konkretnego wyrazu/obiektu

0

Dodanie itema:

listBox1.Items.Add("test");

Usuniecie:

listBox1.Items.Remove("test");

Podajesz jakikolwiek obiekt, nie musi to być string.

0

Ale za każdym razem będzie inny wyraz, liczb - więc odwołanie typu poniżej - nie działa - z pola, z którego pobierany jest wyraz do listbox'a.
Dodanie item'a:

listBox1.Items.Add(textBox1.Text);

Usunięcie item'a:

listBox1.Items.Add(textBox1.Text);

Bo on bierze ostatni rekord tylko.

0

Nie do pojęcia to jest.
Chcesz wrzucać coś do listboxa z określeniem po jakim czasie ma się usunąć?
No to albo jakiś globalny zegar odliczajacy albo obiekt w listboxie musi mieć swój timer (w tym obiekcie), ktory uruchomi usunięcie z listy. Dodatkowo zwykle to nie jest dobry pomysł przechowywać czyste stringi w listboxie. Opakuj to w jakiś obiekt z nadpisaną ToString().

0

Dokładnie o to mi Jacku chodziło.

Temat pozornie wydaje się prosty, ale taki nie jest, każda wartość definiuje się jako obiekt i musi przy przerzucaniu "budować" swój osobisty timer - i pobierać z radiobutona informacje o czasie usunięcia.

Ideę miałem już - tylko kwestia składni - dobra, dam radę.

0

Albo i nie. Możesz przy dodawaniu itemów do listboxa wpisywać im też datę i godzinę usunięcia
np taka klasa

public class ContentItem
{
    public string Data{ get;set;}
    public DateTime DelTime {get; set;}
}

Przy dodawaniu do listbox-a wpisujesz obiektom odpowiednią datę i godzinę usunięcia w zależności od czegośtam. Potem jakiś zwykły timer odliczający co 1s i jeśli DelTime jakiegoś obiektu jest mniejsze od ieżącej godziny to usunięcie z listy.

Temat wydaje się prosty i taki właśnie jest :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1