Форма WinForms не закроется при нажатии X или Close () в C # - PullRequest
4 голосов
/ 13 ноября 2011

У меня странная проблема с WinForm, которая, похоже, отказывается закрываться по какой-то странной причине.У меня очень простой графический интерфейс, который иногда не реагирует на нажатия клавиш X или когда я использую события на кнопках, он даже достигает Close() и ничего не делает ..

    private void buttonZapisz_Click(object sender, EventArgs e) {
        string plik = textBoxDokumentDoZaladowania.Text;
        if (File.Exists(plik)) {
            string extension = Path.GetExtension(plik);
            string nazwaPliku = Path.GetFileName(plik);

            SqlMethods.databaseFilePut(plik, comboBoxTypDokumentu.Text, textBoxKomentarz.Text, sKlienciID, sPortfelID, extension, nazwaPliku);
            Close();
        }
    }

Нет событий, назначенных наFormClosed или FormClosing.Так как я могу узнать, что не так.Иногда X будет работать после загрузки графического интерфейса, но после того, как я нажму Button, чтобы сохранить некоторые данные в базу данных, он достигает Close () в этом событии кнопки, и он все еще виден и ничего не делает.Не могу использовать X, ни ALT + F4.Я могу обойти GUI и выбрать другие значения для ComboBox без проблем.

Я называю GUI так:

    private void contextMenuDokumentyDodaj_Click(object sender, EventArgs e) {
        var lv = (ListView) contextMenuDokumenty.SourceControl;
        string varPortfelID = Locale.ustalDaneListViewKolumny(listViewNumeryUmow, 0);
        string varKlienciID = Locale.ustalDaneListViewKolumny(listViewKlienci, 0);

        if (lv == listViewDokumentyPerKlient) {
            if (varKlienciID != "") {
                var dokumenty = new DocumentsGui(varKlienciID);
                dokumenty.Show();
                dokumenty.FormClosed += varDocumentsGuiKlienci_FormClosed;
            }
        } else if (lv == listViewDokumentyPerPortfel) {
            if (varPortfelID != "" && varKlienciID != "") {
                var dokumenty = new DocumentsGui(varKlienciID, varPortfelID);
                dokumenty.Show();
                dokumenty.FormClosed += varDocumentsGuiPortfele_FormClosed;
            }
        } 
    }

Хотя я не могу закрыть GUI, я могу без проблем работать с основным графическим интерфейсом.Я могу открыть тот же графический интерфейс и после открытия нового графического интерфейса я могу быстро закрыть его.Графический интерфейс очень прост с несколькими ComboBoxes, TextBoxes и одним EditButton от Devexpress.

Edit: varDocumentsGuiPortfele_FormClosed код позволяет мне обновлять GUI (перезагрузить ListView в зависимости от того, где пользовательсейчас).

    private void varDocumentsGuiPortfele_FormClosed(object sender, FormClosedEventArgs e) {
        TabControl varTabControl = tabControlKlientPortfele;

      if (varTabControl.TabPages.IndexOf(tabPageDokumentyPerKlient) == varTabControl.SelectedIndex) {
          loadTabControlKlientPortfeleBezZmianyUmowy();

      }
    }

Ответы [ 2 ]

15 голосов
/ 13 ноября 2011

Вставьте этот код в классы формы:

    protected override void OnFormClosing(FormClosingEventArgs e) {
        e.Cancel = false;
        base.OnFormClosing(e);
    }

Когда это сработает, вы захотите выяснить, почему у вас есть Проверяющие обработчики событий, которые не хотят закрывать форму.

Следующее, что вы хотите проверить, это Debug + Exceptions, поставьте галочку в поле Throw для исключений CLR. Это гарантирует, что вы не проглотите исключение, которое препятствует закрытию формы. Или, что еще хуже, операционная система , поглощающая исключение , неприятная проблема Windows 7.

1 голос
/ 17 августа 2013

Если вы получаете исключение в своем методе close, то метод закрытия Base никогда не вызывается.

Положите попытку {} catch {} вокруг всего

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...