2012-02-16 4 views
0

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

Как это сделать, если Form3 открыт FormMain Не открывается, И появляется сообщение с сообщением об этом. Мне не нужна функция «.hide». У меня уже есть этот набор.

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

Любые предложения?

ответ

1

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

Что-то вроде этого, может быть.

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(); 
} 
2

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

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

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

+0

У меня было это уже и это будет мое следующее лучшее решение. но мои формы имеют функцию паузы, поэтому пользователь может перемещаться и использовать другие части программы. Существует только одна форма, я не хочу, чтобы они могли получить доступ, если другая форма открыта и наоборот. С сообщением об этом. Я знаю часть окна сообщения, но это другая часть. – james

+0

случай «0» так, когда пользователь нажимает на раскрывающийся список, что они видят выбрать один option1 параметр2 Так что, если они нажимают на «Select One» я хотел сообщение с указанием их не действительным и выбрать из других. Могу я спросить, это вредно или что-то еще? Он отлично работает и по мере необходимости. Тогда снова им новый для программирования, поэтому я не понимаю вреда в этом. Я ценю ваши ответы. – james

+0

@james: Хм, странно иметь формы, которые могут быть «приостановлены». Я либо не могу представить ваш дизайн, либо он сломан, и будет сложно для ваших пользователей. Вы должны понимать, что типичные пользователи не имеют такой же ментальной модели для приложения, которое имеет разработчик. И поскольку вы изо всех сил пытаетесь понять, как его реализовать, это должно дать нам понять, что * другие * приложения Windows не работают таким образом, поэтому ваше приложение будет работать против ожиданий пользователей, и это никогда не будет хорошо. –

1

Вы можете сделать официальные выражения 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 

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

+0

это заставляет меня заменить публика тусклым и doesent принять formmain по какой-то причине, но позволяет мне отлаживать с предупреждением, а не с ошибкой. Но не делает того, что предназначено. Я поместил кодировку в свою основную форму. (не формировать, а формировать один). Это верно? – james

+0

ComboBox2.SelectedIndexChanged Select Case ComboBox2.SelectedIndex Case 0 Flashwindow (Me.Handle, 1) Dialog1.Show() Случай 1 Flashwindow (Me.Handle, 1) FormMain.Show() Dialog1 .hide() My.Computer.Audio.Stop() Form3.CanSelect = False Case Else Если Form3.CanSelect = False Тогда MessageBox.Show ("NO") End If End Select – james

+0

Я пробовал это, и это не работало, но кажется, что должно быть – james

Смежные вопросы