2012-01-18 2 views
1

Есть ли способ довести форму, которая уже минимизирована до taksbar спереди? Я попытался следующие коды, но никакого успеха:Приведение формы к фронту, когда она сведена к минимуму на панели задач

 filterForm.Show(); 
     filterForm.Activate(); 
     filterForm.BringToFront(); 

P.S: Эта форма не вызывается из другой формы, и пользователь может делать некоторые вещи в нем, а затем, возможно, свести его к минимуму. Я хочу, чтобы только один экземпляр этой формы был открыт одновременно, поэтому второй раз пользователь нажимает кнопку для отображения формы, которую я проверяю, если форма уже показана или нет, если она показана, я хочу, чтобы она была впереди:

public FilterForm filterForm; 
public bool IsFilterFormActive; 

private void tsOpenFilerForm_Click(object sender, EventArgs e) 
{ 
    if (!IsFilterFormActive) 
    { 
     filterForm = new FilterForm(); 
     filterForm.FormClosing += delegate { 
               IsFilterFormActive = false; 
              }; 
     IsFilterFormActive = true; 
     filterForm.Show(); 
    } 
    else 
    { 
     filterForm.Show(); 
     filterForm.Activate(); 
     filterForm.BringToFront(); 
    } 
} 

ответ

7

Вы просачиваете экземпляр формы, лучше всего установить его обратно до нуля, когда он закрывается. Тогда вам тоже не нужен bool. Например:

FilterForm filterForm; 

    private void tsFilterForm_Click(object sender, EventArgs e) { 
     if (filterForm == null) { 
      filterForm = new FilterForm(); 
      filterForm.FormClosed += delegate { filterForm = null; }; 
      filterForm.Show(); 
     } 
     else { 
      filterForm.WindowState = FormWindowState.Normal; 
      filterForm.Focus(); 
     } 
    } 
+0

Спасибо. Есть ли огромная разница между событиями FormClosing и FormClosed? оба, похоже, работают! –

+1

Да, FormClosing можно отменить. –

+0

++ для WindowState. – Serg

6

Добавить filterForm.WindowState = FormWindowState.Normal; для того, чтобы восстановить окно. Если его свести к минимуму, вам сначала нужно снова поднять его. Тогда должно быть достаточно filterForm.Activate().

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