Запретить возврат ShowDialog () при нажатии кнопки ОК

У меня есть диалоговое окно, которое я хочу запретить закрывать при нажатии кнопки OK, но оно возвращается, и даже если для свойства AcceptButton установлено значение none вместо кнопки OK Каков наилучший способ остановить его закрытие?

16 голосов | спросил user1151923 26 PMpThu, 26 Apr 2012 13:41:36 +040041Thursday 2012, 13:41:36

5 ответов


0

На самом деле вы меняете неправильное свойство. Вы наверняка хотите AcceptButton , чтобы быть кнопкой ОК. Это свойство определяет, какая кнопка по умолчанию используется в терминах Windows. Это кнопка, которая нажимается, когда вы нажимаете ENTER на клавиатуре. Изменяя AcceptButton, вы просто нарушаете интерфейс клавиатуры в своем диалоге. Вы никак не влияете на то, что происходит при нажатии кнопки.

Вам необходимо установить DialogResult свойства вашей кнопки для DialogResult.None, поскольку именно это определяет, закрывает ли нажатие кнопки форму. Затем внутри обработчика нажатия кнопки вам нужно решить, как реагировать на нажатие кнопки. Я ожидаю, что, если проверка диалога прошла успешно, вы должны закрыть диалог, установив свойство DialogResult . Например,

private void OKbuttonClick(object sender, EventArgs e)
{
    if (this.CanClose())
        this.DialogResult = DialogResult.OK;
}
ответил David Heffernan 26 PMpThu, 26 Apr 2012 13:46:30 +040046Thursday 2012, 13:46:30
0

Лучший способ остановить это поведение - изменить свойство DialogResult вашей кнопки ОК на DialogResult.None в окне свойств во время разработки.

Кроме того, если у вас уже есть некоторый код в событии нажатия кнопки ОК, вы можете изменить форму DialogResult.

private void comOK_Click(object sender, EventArgs e)
{
    // your code .....

    // Usually this kind of processing is the consequence of some validation check that failed
    // so probably you want something like this
    if(MyValidationCheck() == false)
    {
        // show a message to the user and then stop the form closing with
        this.DialogResult = DialogResult.None;
    }
}
ответил Steve 26 PMpThu, 26 Apr 2012 13:44:30 +040044Thursday 2012, 13:44:30
0

Также необходимо удалить DialogResult самой кнопки, в окне свойств кнопки установите для нее значение None

http://msdn.microsoft. ком /EN-US /библиотека /system.windows.forms.button.dialogresult.aspx

  

Если для DialogResult для этого свойства установлено значение, отличное от   Нет, и если родительская форма была отображена через ShowDialog   метод, нажав кнопку закрывает родительскую форму без вашего   подключать любые события.

Очевидно, что теперь ваша кнопка ничего не будет делать, поэтому вам нужно зарегистрировать обработчик для события Click.

ответил Adam Houldsworth 26 PMpThu, 26 Apr 2012 13:44:28 +040044Thursday 2012, 13:44:28
0

Лучше всего на самом деле отключить кнопку Ok, а не отвечать на ввод пользователя.

Свойство DialogResult ДОЛЖНО быть установлено в Ok или Yes в зависимости от формы, а AcceptButton также должен быть связан с Ok.

Обычно я создаю функцию во всех диалоговых окнах и вызываю ее всякий раз, когда пользователь взаимодействует с данными.

void RefreshControls() { button.Enabled = this.ValidateInput(); }

ответил Raheel Khan 27 AMpFri, 27 Apr 2012 07:28:28 +040028Friday 2012, 07:28:28
0
 static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Form2 fLogin = new Form2();
            if (fLogin.ShowDialog() == DialogResult.OK)
            {
                Application.Run(new Form1());
            }
            else
            {
                Application.Exit();
            }
        }
    }

public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void btnKlik_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.OK;
        }
    }

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
ответил Wasyster 12 +04002013-10-12T22:10:16+04:00312013bEurope/MoscowSat, 12 Oct 2013 22:10:16 +0400 2013, 22:10:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132