2013-04-17 3 views
3

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

Чтобы сделать это, я думал о том, чтобы положить невидимую форму ontop mainForm, чтобы взаимодействия не были возможны (но только с помощью щелчков мыши, штрихи клавиатуры все равно будут работать).

Как это можно сделать?

+0

Для этого служит ShowDialog, он откроет вашу вторую форму как модальный диалог. –

+0

Почему не 'this.Enabled = false', где вы открываете' optionsForm'? –

+0

@MarkHall Спасибо, я не знал о опции ShowDialog(). – Devator

ответ

5

Вы могли бы сделать один из 2-х вещей, либо:

1) Отображение формы в виде диалога. Это предотвратит возможность выбора первой формы, пока видна форма 2.

Form f2 = new Form2(); 
f2.ShowDialog(); 

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

Form f2 = new Form2(); 
f2.Shown += ToggleControls; 
f2.Closing += ToggleControls; 
f2.Show(); 

public void ToggleControls(object o, sender e) 
{ 
    foreach(Control c in this.Controls) 
    { 
     c.Enabled = !c.Enabled; 
    } 
} 
+0

Спасибо, опция 'ShowDialog' работает отлично. – Devator

+0

@ Devator: Рад, что это помогло. Не стесняйтесь принимать в качестве ответа, если вы решите свою проблему. – Ian

+0

должен был подождать пару минут, прежде чем смог. Сделано сейчас, хотя ;-) – Devator

0

Или вы могли бы скрыть MainForm, а другой открыт:

this.Visible = false; 
optionsForm.ShowDialog(); 
this.Visible = true; 
0

лучше всего работает с хорошей производительностью. Попробуйте это в вашей основной форме Button-Click событие.

try 
{ 
    form2 f = new form2(); 
    Enabled = false; 
    f.ShowDialog(this); 
    Enabled = true; 
    f.Dispose(); 
} 
catch (Exception exception) 
{ 
    MessageBox.Show(exception.Message); 
} 
Смежные вопросы