C# MessageBox czyści zmienną


(LonngerM) #1

Witam

Posiadam ListView w której są zapisywane pewne dane (które następnie zapisywane są do bazy danych) chcę usunąć jeden wpis - dzięki czemu utworzyłem odpowiednią funkcję i umieściłem poniższy kod:

if (listView1.SelectedItems.Count == 1)

            {

                ListView.SelectedListViewItemCollection items = listView1.SelectedItems;


                if (items != null && items[0].SubItems[0].Text != "")

                {

                    dane = items[0].SubItems[0].Text;

                    if (MessageBox.Show("Czy na pewno chcesz usunąć wpis '" + dane + "'", "Uwaga!", MessageBoxButtons.YesNo) == DialogResult.Yes)

                    {                

                        cmd.CommandText = "DELETE FROM Elementy WHERE Dane ='"+dane+"'";

                        cmd.ExecuteNonQuery();

                        listView1.Items.Clear();

                        OdswierzenieWpisow();

                    }

                }

            }

MessageBox wyświetla wszystko poprawnie, ale "dane" już przy cmd.CommandText ma wartość "null". Wszystko jest ok jeśli tego messageboxa nie wsadzę, ale z nim nie działa.

Stworzyłem zmienną "dane2" która przyjmuje w tym samym momencie to samo co "dane" - gdy "cmd" jest uzależnione od "dane2" - wszystko działa... Czemu "dane" jest czyszczone?


([alex]) #2

Czy masz może jakiś dodatkowy wątek, który używa tą zmienną.

Nie wskazałeś gdzie ta zmienna została zadeklarowana.


(LonngerM) #3

Tak jest używana.

Jest to jedna zmienna globalna deklarowana na samym początku programu dla wszystkich funkcji. Jednak zostało zadbane tak by, żadna funkcja nie nakładała się na siebie i działało wszystko ok, do momentu włączenia MessageBox - a


([alex]) #4

Dodaj do formatki TextEdit i dodawaj do niego wiersz z nazwą funkcji w każdym miejscu gdzie zmienna dane się zmienia.

Natychmiast zobaczysz gdzie to się zmienia.

Nadużycie zmiennych globalnych często jest karane takimi problemami.

W tym miejscu nie ma żadnego powodu aby użyć zmiennej globalnej zamiast lokalnej.


(LonngerM) #5

Masz rację... będę musiał przeglądnąć program w poszukaniu takich kwiatków i ograniczenia czegoś takiego. Cóż... problem jest rozwiązany.