Dodawanie elementów do listboxa w innym formie

0

Cześć,

Napotkałem problem, chce dodawać dane do listboxa znajdującego się w innym Formie:

Form5.listBox1.Items.Add(string.Format("{0:mm\\:ss}", sw.Elapsed));

jednak występuje błąd:

System.NullReferenceException: „Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.”

0

oznacza, ze albo Form5 jest nullem albo listBox1 jest nullem.

Czy ten form jest widoczny czy chcesz go dodac "na pozniej"?

0

Form5 jest "na później" ma służyć jako podgląd danych uzyskanych w Formie1

Zrobiłem teraz na szybko:

 if (Form5 != null)
                {
                    Form5.listBox1.Items.Add(string.Format("{0:mm\\:ss}", sw.Elapsed));
                }
                

Jednak po chwili przemyślenia nie ma to większego sensu, w praktyce też nie działa, tzn nie wyrzuca błędu, ale nie dodaje wartości do listboxa w Formie5

2

Jednak po chwili przemyślenia nie ma to większego sensu

jest to calkiem prawdopodobne.

ale nie dodaje wartości do listboxa w Formie5

zapewne kod nie wykonuje sie, dlatego nie masz wartosci w listboxie

Sprobuj takie podejscie

  • stworz tymczasowa liste (moze byc prywatna zmienna w klasie) ktora bedzie lista w ktorej bedziesz przechowywac wartosci
  • Podczas tworzenia Form5 (zapewne gdzies jest przy pokazywaniu formy) wtedy przekopiuj wartosci z listy foreach (var JAKASNAZWA in TUTAJTWOJAZMIENNA) { Form5.listBox1.Items.Add(JAKASNAZWA);}
2

Taka rada na przyszłość (im szybciej weźmiesz sobie ją do serca i będziesz się jej trzymał tym łatwiej Ci będzie w przyszłości) - forma (nie ważne jaka czy to win forms, wpf, asp, czy cokolwiek co wyświetla dane userowi) służy TYLKO do pokazywania danych i interakcji z userem. NIGDY nie jest pojemnikiem na dane.

Jak to zastosować u Ciebie? - stwórz sobie w klasie z której próbujesz wołać Form5.listBox1.Items.Add jakiś pojemnik na te dane, np. List<string> jako private readonly pole klasy, dodawaj do niego te wpisy a jak będziesz je chciał pokazać to stworzysz sobie formę do pokazania (tu Form5), dodasz do niej metodę typu public void Wypelnij(List<string>) a w niej przepiszesz wszystko z listy do listboxa.

0

Ja to jak ten Jaś z kawału o nauce pływania.
Macie racje nie znałem zasady działania (brak mi wiedzy, jestem bez jakiejkolwiek przeszłości związanej z programowanie, no może oprócz VBA w Excelu)

Idąc Waszą radą zrobiłem tak:

W Formie 1:

public readonly List<string> actualList = new List<string>();

public void button6_Click(object sender, EventArgs e)
        {
            
            ilosc_klikniecc++;
            klik2++;
            label5.Text = "" + ilosc_klikniecc/2 ;

            timer2.Enabled = true; 

            if (klik2 == 2) 
            {
                

                var sw = queue.Dequeue();
                czas = queue1.Dequeue();
            

                circularProgressBar1.Value = czas.Minutes * 60 + czas.Seconds;

                circularProgressBar1.Update();

                sw.Stop();
                        this.label3.Text = string.Format("{0:mm\\:ss}", sw.Elapsed);

                actualList.Add(string.Format("{0:mm\\:ss}", sw.Elapsed));

                   
                 

                        if (circularProgressBar1.Maximum > sw.Elapsed.TotalSeconds)
                        {
                            label3.ForeColor = System.Drawing.Color.Green;
                        }
                        else
                        {
                            label3.ForeColor = System.Drawing.Color.Red;
                        }

                      
                {
                    Thread.Sleep(300); //reset wartości inta dla klik2
                    klik2 = 0;
                }

            }


        }

No i w Formie 5

private void Form5_Load(object sender, EventArgs e)
        {
            listBox1.DataSource = Form1.actualList;
        }

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