2012-07-03 2 views
1

У меня есть save file dialog, настроенный для отображения, но когда я нажимаю на него, диалог исчезает в фоновом режиме без вкладки или чего-то еще. Мой вопрос в том, как сделать диалог модальным? Если вы не знаете, что я имею в виду, зайдите в блокнот, нажмите «Сохранить как» и попробуйте нажать диалог. Вы увидите, что окно вспыхивает, и вы получаете приятный звук, информирующий вас о том, что вы должны что-то сделать в диалоговом окне, прежде чем делать что-либо еще. Я хотел бы добиться этого эффекта с помощью своего диалога, но я не знаю, как это сделать. Я не могу просто использовать свойство Form.Modal, потому что это касается форм, и это не форма. Может ли кто-нибудь помочь мне здесь?Как сделать диалог Modal

Спасибо.

EDIT:

Это, как я показываю диалог, он работает в XNA, и когда я нажимаю кнопку Сохранить как метод EntrySelected() называется:

private void EntrySelected(object sender, EventArgs e) { 
     if(sender == saveAsEntry) { 
      sfd = new SaveFileDialog(); 
      thread = new Thread(ShowSaveDialog); 
      thread.SetApartmentState(ApartmentState.STA); 
      thread.Start(); 
     } 
     ... 
    } 
    private void ShowSaveDialog() { 
     if(sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { 
      World.Save(sfd.FileName); 
      thread.Abort(); 
     } 
     else { 
      thread.Abort(); 
     } 
    } 
+2

Я думаю, вам нужно показать немного кода. Диалоговое окно сохранения уже является модальным, что можно увидеть, запустив образец в имеющейся у вас ссылке. Поэтому мне немного любопытно, как вы об этом узнали. – NotMe

+0

вопрос, если вы хотите его Модальный, почему вы используете его в отдельной теме? –

+0

Если я не получаю ThreadStateExeption. Я предполагаю, что это связано с XNA. – MrPlosion1243

ответ

2

Actualy ваш диалог является формой. Поскольку приведенный выше комментарий предполагает, что метод Show не существует, вы должны использовать команду ShowDialog(), которая открывает его как модальный диалог.

т.е.

SaveFileDialog1.ShowDialog(); 

Base на вашем редактирования, есть версия ShowDialog где вы задаете владельца Диалога, возможно, будет работать для вас.

SaveFileDialog1.ShowDialog(dialogOwner); 

Из выше ссылке:

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

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