Кнопки управления пользователем, чтобы закрыть диалоговое окно

StackOverflow https://stackoverflow.com/questions/5326453

Вопрос

Я создал пользовательский элемент управления в своем приложении, в котором есть текстовое поле, а затем 2 кнопки. Одна кнопка состоит в том, чтобы добавить данные в БД из текстового поля, а вторая отменяет действие. Этот пользовательский элемент управления затем добавляется в несколько диалогов (формы), но я хочу, чтобы кнопки запускали те же события, что причина, по которой я разместил кнопки на пользовательском управлении, а не в диалоговом окне.

То, что я пытаюсь сделать, это после того, как они нажимают на кнопку «Добавить данные», и она успешна, я хочу, чтобы он закрыл диалог, на котором находится элемент управления.

РЕДАКТИРОВАТЬ:

Я не знаю, как сделать кодирование этого, чтобы закрыть диалог, когда он запускается из пользовательского управления. Я не знаю, с чего начать, потому что раньше я не использовал пользовательские элементы управления. Обычно у меня просто есть элементы управления на диалоговом окне, который позволяет DialogResult = DialogResult.OK;

Спасибо

Это было полезно?

Решение

Модально открытые формы будут автоматически закроются, когда будет установлен их диагногрологии. Из звуков вы устанавливаете диаграмму управления, а не форму. Чтобы сделать то, что вы пытаетесь сделать, вам нужен элемент управления, чтобы установить или запустить настройку диалогового окна родительских форм. Вы можете сделать это по любому:

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

2. Создайте событие для управления, которое слушают формы, что говорит о нем закрыть. (рекомендуется)

3. (Хакерский путь) Установите результат диалога Forms, используя этот код:

this.ParentForm.DialogResult = DialogResult.OK;

Форма также должна быть показана модально, иначе вам нужно будет вызвать метод Close () вручную.

Другие советы

Вы захотите использовать делегатов для решения этой проблемы.

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

public delegate void CloseHostFormEventHandler(Object sender, EventArgs e);

public partial class MyControl : Control {

    public event CloseHostFormEventHandler CloseFormEvent;


    public closeButton_Clicked(object sender, EventArgs) {
        // do your db stuff

        // you could create your own class here and pass the object to your main form if you wanted
        EventArgs myargs = new EventArgs(); 

        // tell host form to close itself
        CloseFormEvent(this, myargs);

    }
}

Теперь в вашей родительской форме вы захотите справиться с событием, поднятым контролем.

public partial class MyForm : Form {

    public MyForm() {

        InitializeComponent();

        // ill assume your control was added via the designer and thus done in InitializeComponent()

        // hook up event handler
        mycontrol.CloseFormEvent += CloseFormEventHandler(closeformCallback);
    }

    protected void closeformCallback(object sender, EventArgs e) {
        DialogResult = DialogResult.OK;
        this.Close();
    }


}

Я собираюсь принять дикое предположение, так как вы не дали много информации.

Диалог не закрывается, потому что это не модальный диалог. Попробуйте показать это с ShowDialog() скорее, чем Show().

Как говорит Тони. Вам нужно было бы вызвать метод закрытия.

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

Вы можете поместить обработчик событий Click на вашем пользовательском управлении чем -то вроде этого:

        Form f = this.ParentForm;
        if (f != null)
        {
            f.DialogResult = DialogResult.OK;
        }

Диагрогроультат не закрывает немодальный форма.

Вам нужно вызвать метод закрытия формы или в этом случае диалоговое окно.

РЕДАКТИРОВАТЬ

Или используйте showdialog () вместо show ().

Редактировать снова

Согласно с Dialogresult документация:

Когда форма отображается в виде модального диалогового окна, нажатие кнопки «Закрыть» (кнопка с x в правом верхнем углу формы) приводит к скрытой форме, а свойство Dialogresult будет установлено в диаграмму. Cancel. Метод закрытия не называется автоматически, когда пользователь нажимает кнопку «Закрыть диалоговое окно», или устанавливает значение свойства Диагрогрологии. Вместо этого форма скрыта и может быть отображена снова без создания нового экземпляра диалогового окна. Из -за этого поведения вы должны вызвать метод распоряжения формой, когда форма больше не нужна для вашего приложения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top