2010-06-28 4 views
0

(C#/WindowsMobile 6)Как принести "все формы" на передний план (WindowsMobile/C#)

Давайте рассмотрим приложение 3 СТАТИЧЕСКИМИ формы: Form1, Form2, Form3, где Form1 открывает Form2 по телефону Form2. Show(), и Form2 делает то же самое с Form3. Form2 и Form3 имеют кнопку «Выход», которая просто скрывает форму (а не «закрывать», просто скрывать).

Таким образом, мы выполняем следующие шаги:

  • открыть приложение;
  • перейдите в форму 2, нажав кнопку «Form2» на Form1;
  • перейдите к Form3, нажав кнопку «Form3» на Form2;
  • откройте «Проводник» и «повторно открыть» приложение, нажав на его файл. Появится Form3;
  • скрыть форму 3, нажав кнопку «Выход» на Form3 (this.Hide()). В этом и заключается проблема: вместо файла Form2 появляется файл-проводник.

Я не хочу называть «callform» .Show() каждый раз, когда я скрываю форму. Это «работает», но экран проводника файлов появляется после «this.Hide()» и до «callinform.Show()», и мне нужно «контролировать», кто звонит кому.

Как это решить? Есть ли способ перенести форму приложения на передний план в том же порядке, в каком они появились?

Заранее спасибо.

ответ

0

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

"callingform".BringToFront(); 
"callingform".Show(); 

Это поставит все ваши формы перед Explorer.

0

Возможно, вам придется провести какое-то расследование, но, не задумываясь, вы можете попробовать посмотреть коллекцию Application.Forms [].

Возможно, кто-то может подтвердить или опровергнуть это, но я думаю, что обычно Application.OpenForms [0] будет основной/начальной формой с последующими появлением формы в Application.OpenForms [1], Application.OpenForms [2] и т. Д. ...

Итак, вы можете просто попробовать перейти назад через эти коллекции форм.

Нечто подобное (или изменение),

public void BringLastOpenedFormToFront() 
{ 
    if(Application.OpenForms.Count > 0) 
    { 
     Form form = Application.OpenForms[Application.OpenForms.Count - 1]; 
     BringToFront(form); // your bring to front method. 
    } 
} 

Это позволит вам обеспечить последнюю форму, которая появилась был доставлен на фронт и сразу же видны пользователю. Дайте мне знать, если вам нужно разъяснение.

Ссылка на MSDN: http://msdn.microsoft.com/en-us/library/system.windows.forms.application.openforms.aspx

+0

Application.OpenForms не поддерживается в CompactFramework (WindowsMobile). Спасибо, в любом случае. – Christian

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