Как сделать так, чтобы одновременно отображалось только одно окно? - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть выпадающий список, который имеет 3 случая.регистр "0" открывает диалоговое окно с сообщением "Неправильный выбор", но регистр "1" и регистр "2" открывают свои собственные формы.(FormMain и Form3)

Как мне сделать так, чтобы Form3 была открыта? FormMain не может быть открыт, и появляется сообщение, сообщающее об этом.Я не просто хочу функцию ".hide".У меня уже есть этот набор.

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

Есть предложения?

Ответы [ 3 ]

2 голосов
/ 16 февраля 2012

Если я правильно понимаю ваш вопрос, похоже, что модальное решение является правильным решением этой проблемы.

В настоящее время вы используете Form.Show метод для отображения выбранной дочерней формы.Замените его на Form.ShowDialog метод .Код выглядит так же, но метод ShowDialog показывает форму в виде модального диалогового окна, что означает, что форма должна быть закрыта, прежде чем пользователь сможет взаимодействовать с любыми другими формами в вашем приложении.

Кроме того,если регистр «0» действительно «не является допустимым выбором», вам настоятельно рекомендуется полностью удалить эту опцию из выпадающего списка.

1 голос
/ 16 февраля 2012

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

Нечто подобное может быть.

    public static classs FormManager
{

    private static Form currentForm=null;
    public static Form CurrentForm
    {
        get
        {
            return currentForm;
        }
        set
        {
            this.currentForm=value;
            if (this.currentForm!=null)
                currentForm.Disposed+=(s,e)=>{FormManager.currentForm=null;};
        }
    }
}

//at each form

.
.
.
public void TryShowForm()
{
    if (FormManager.CurrentForm==null)
        FormManager.CurrentForm=this;
    this.Show();
}
1 голос
/ 16 февраля 2012

Вы можете сделать публичные выражения Form3 и FormMain открытыми в модуле.Выполняя тест, чтобы увидеть, что в данный момент выполняется, вы можете проверить, используется ли форма в данный момент

Public newFrm3 as Form3
Public newFrmMain as FormMain

'blah blah blah
If IsNothing(Form3) then
    'form is closed, create new
    newFrm3 = new Form3
    newFrm3.Show
Else
    'form is currently running, display message etc to alert user.
End If

Это предполагает, что, когда пользователь закрыл форму, вы устанавливаете для его соответствующей переменной значениеНичего.

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