2013-09-14 1 views
3

У меня есть формы Windows, который показывает форму наложения:C# WinForms минимизировать frm.Show(), когда основная форма минимизируется

private void ShowWait() 
{    
    frmOverlay = new Base.frmOverlay("Please Wait..."); 
    frmOverlay.Show(this); 
} 

Эта frmOverlay форма одновременно является показать, что это показывает другую форму в средняя (форма сообщения):

private void frmOverlay_Load(object sender, EventArgs e) 
{ 
    frmPleaseWait = new frmPleaseWait(_text); 
    frmPleaseWait.Show(this); 
} 

когда я минимизирую основную форму, то я до сих пор можно увидеть frmPleaseWait форму, есть способ, я могу свести к минимуму все, когда основная форма минимизируется?

ответ

2

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

public void MinimizeAllChildForms(Form parent) 
{ 
    foreach(Form f in parent.OwnedForms) 
    { 
     f.WindowState = FormWindowState.Minimized; 
     MinimizeAllChildForms(f); 
    } 
} 

Затем в основной форме, вызовите его из Resize события.

void MainForm_Resize(object sender, EventArgs e) 
{ 
    if (WindowState == FormWindowState.Minimized) 
     MinimizeAllChildForms(this); 
} 

Я предполагаю, что вы хотите frmPleaseWait также свести к минимуму, когда frmOverlay сведена к минимуму. Если вы этого не сделаете, вы можете просто установить родительский элемент в основную форму, чтобы он автоматически минимизировал работу основной формы.

frmPleaseWait = new frmPleaseWait(_text); 
frmPleaseWait.Show(MainForm); 
+0

Хорошо, что лучше +1 –

0

Вы можете создать EventHandler для события изменения размера и минимизировать форму там:

Form2 f2 = null; 

private void button1_Click(object sender, EventArgs e) 
{ 
    f2 = new Form2(); 
    f2.Show(); 
} 

private void Form1_Resize(object sender, EventArgs e) 
{ 
    if (WindowState == FormWindowState.Minimized) 
    { 
     f2.WindowState = FormWindowState.Minimized; 
    } 
} 

Добавьте этот код на свой MainForm и frmOverlay

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