Problem z ustawieniem DialogResult przycisku na None przy ponownym uruchomieniu DialogBox'a

0

Witam wszystkich :)

Od dłuższej chwili męczę się z custom'owym MessageBox'em. Kod prezentuje się mniej więcej tak:

Form1.cs


        MyNewMessageBox myNewMessageBoxInstance { get; set; }
        DialogResult result { get; set; }
        private void button1_Click(object sender, EventArgs e)
        {
            myNewMessageBoxInstance = new MyNewMessageBox();
            Thread thread = new Thread(new ThreadStart(th));
            thread.Start();
            result = myNewMessageBoxInstance.ShowDialog();
            if (result == DialogResult.OK)
            {
                Console.WriteLine(myNewMessageBoxInstance.code);
            }
        }

        public void th()
        {
                while (result != DialogResult.OK)
                {
                    try
                    {
                        if (myNewMessageBoxInstance.code.Contains("69"))
                        {
                            myNewMessageBoxInstance.btn_OK.DialogResult = DialogResult.OK;
                        }
                    }
                    catch { }
                }
            }
        }

myNewMessageBox.cs

public string code { get { return textBox1.Text; } }

W myNewMessageBox.Designer.cs DialogResult przycisku oczywiście ustawiony na None. Problem jest taki, że przy pierwszym uruchomieniu po zatwierdzeniu wpisanego kodu wszystko działa. Natomiast przy drugim uruchomieniu już po zatwierdzeniu kodu się nic nie dzieje, trzeba zamknąć myNewMessageBox i uruchomić od nowa, aby zadziałało. Doszedłem do tego, że po prostu przy drugim uruchomieniu, myNewMessageBox nie jest na nowo tworzony i dlatego nie ładuje się wartość None DialogResult. Z tego powodu próbowałem zmieniać wartość na None z poziomu formy przy uruchomianiu button'a, ale nadal nie chciało działać. Próbowałem już tyle różnych wariacji, że na prawdę nie wiem gdzie leży problem. Z góry dziękuję za pomoc :)

1

Nie znam się na tym ale tak na chłopski rozum sobie myśle że jak już raz np zrobiłeś instancję klasy myNewMessageBoxInstance = new MyNewMessageBox(); to za drugim razem powinieneś sprawdzić czy już instancja jest i pobrać jej handler chyba i do niego sie odwoływać bo tak to on nie wie o co chodzi. ALbo napisywać te powolane instancje w globalnej tablicy ? dobrze myśle ?

1

masterO,

myNewMessageBoxInstance = new MyNewMessageBox()

Z początku sądziłem, że powyższym kodem stworzę instancję, a przy ponownym wywołaniu tego kodu nadpiszę instancję, ale wygląda na to, że jeżeli nie zamknie się tej instancji to po prostu przy następnym razie automatycznie odwołuje się do handler'a. Z resztą jak inaczej wytłumaczyć to, że nie uruchamia się obiekt MyNewMessageBox_Load przy ponownym uruchomieniu instancji.

Próbowałem zrobić jeszcze tak, ale nic to nie pomogło:

                if (myNewMessageBoxInstance != null)
                {
                    myNewMessageBoxInstance.Dispose();
                }
                myNewMessageBoxInstance = new MyNewMessageBox();

@Edit
Pozbyłem się zmiennej result i to rozwiązało problem :) Najwidoczniej po prostu jakimś cudem ta zmienna się nie nadpisywała.

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