Niezrozumiałe zachowanie dialogów.

0

Cześć!
Mam taki oto kod:

 TopicsDialog dialog = new WorkflowGenerator.TopicsDialog();

            dialog.removeButton.Visible = false;

            if(dialog.ShowDialog(this) == DialogResult.OK) {

                if( dialog.name.Text.Length < 1 ) {

                    MessageBox.Show("Nazwa nie może być pusta");

                } else {

                    this.saveTopic(this.toFileName(dialog.name.Text), dialog.topic.Text, dialog.materials.Text, dialog.objective.Text);

                    topicsList.Items.Add(dialog.name.Text);

                    dialog.Close();

                }

            }

            else if(dialog.ShowDialog(this) == DialogResult.Cancel) {

                //dialog.Close();

            }
        }

Efekt który próbuję osiągnąć to zamykanie dialoga po kliknięciu na button z result = cancel oraz, po kliknięciu na button z result = ok, zamknięcie LUB wyświetlenie informacji o będzie (bez zamykania).
Niestety teraz aplikacja zachowuje się w następujący sposób:
po kliknięciu na result = ok jesli jest błąd zamyka dialog i pokazuje błąd.
po kliknięciu na result = cancel zamyka a następnie otwiera delikatnie przesunięte okno z wypełnionymi danymi.
Czy mógłby ktoś wytłumaczyć mi dlaczego się tak dzieje i jak osiągnąć efekt który oczekuję?
Pozdrawiam
NickOver

1

Zgodnie z Twoim kodem: jeśli wynik otwarcia okna jest różny od OK, pokaż okno drugi raz. Po prostu wewnątrz każdej instrukcji if otwierasz okno.
Przypisz sobie wynik otwarcia okna do jakiejś zmiennej, a potem używaj tej zmiennej wewnątrz instrukcji warunkowych.

0

Dzięki @somekind ! Jeszcze dużo nauki c# przede mną :D

Ok, zrobiłem tak jak mówiłeś:

 private void addButton_Click(object sender, EventArgs e) {

            TopicsDialog dialog = new WorkflowGenerator.TopicsDialog();

            dialog.removeButton.Visible = false;

            DialogResult dialogResult = dialog.ShowDialog(this);

            if(dialogResult == DialogResult.OK) {

                if( dialog.name.Text.Length < 1 ) {

                    MessageBox.Show("Nazwa nie może być pusta");

                } else {

                    this.saveTopic(this.toFileName(dialog.name.Text), dialog.topic.Text, dialog.materials.Text, dialog.objective.Text);

                    topicsList.Items.Add(dialog.name.Text);

                    dialog.Close();

                }

            }

            else if(dialogResult == DialogResult.Cancel) {

                dialog.Close();

            }

            else if(dialogResult == DialogResult.Abort) {

            }
        }

Jednakże przy kliknięciu na result = ok dialog zamyka się mimo pojawienia się MessageBox'a (czyli do ifa wchodzi). Mógłbyś mi jeszcze wyjaśnić jak to działa?

0

Oczywiście że zamyka. Cały kod po wywołaniu ShowDialog wykonuje się po zamknięciu dialogu.
ShowDialog otwiera okno i czeka na zamknięcie.
Twoje wywołania Close są zupełnie zbędne.

Jeśli chcesz żeby coś dodatkowego się działo w samym oknie przed jego zamknięciem, zrób to w kodzie klasy TopicsDialog.

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