Вывести основную форму заявки на передний план

#c# #visual-studio-2010

#c# #visual-studio-2010

Вопрос:

я работаю над compact Framework 3.5, с этой проблемой. ScanOutMenu это форма с двумя кнопками и только на этом экране BringToFront() не работает.На всех остальных экранах у меня есть поле ввода, где оно сфокусировано и BringToFront() принимает форму впереди.

 private void menuItem1_Click(object sender, EventArgs e)
{
    this.Close();
    ScanOutMenu scanOutMenu = new ScanOutMenu();
    scanOutMenu.BringToFront();
}
  

Также я пробовал scanOutMenu.TopMost = true; , который также не работает.Я думаю, поскольку в ScanOutMenu форме нет поля ввода и нет фокуса, BringToFront() это не работает.

ScanOutMenu форма — это основная форма заявки, и мне нужно вывести экран на передний план без использования scanOutMenu.Show() или scanOutMenu.ShowDialog()

Комментарии:

1. Форма уже открыта и находится за FileExplore. Мне нужно перенести это на передний план. Но если я использую BringToFront(), я вижу, что меню моей формы и тело формы объединены с папками FileExplorer.

2. В опубликованном вами коде вы создаете новый экземпляр ScanOutMenu формы и выводите этот экземпляр на передний план, что кажется нежелательным поведением. Если форма уже открыта, у вас должна быть ссылка на открытый экземпляр формы, доступный из menuItem1_Click и вызываемый BringToFront() для этого экземпляра. Опубликованный вами код является частью другой формы, это правильно? Если это так, возможно, вы можете назначить Owner свойство при создании другой формы, а затем прочитать экземпляр формы из нее: msdn.microsoft.com/en-us/library /…

Ответ №1:

Вы пробовали включить самое верхнее свойство?

 this.TopMost = true;

//then if you want to remove it just put to false
  

Комментарии:

1. Я попробовал scanOutMenu. Самый верхний = true; также не работает

2. если вы хотите открыть ее, вы ДОЛЖНЫ использовать show () или ShowDialog () (если только она уже не открыта и вам не нужно вывести ее на передний план)

3. Форма уже открыта и находится за FileExplore. Мне нужно перенести это на передний план. Но если я использую BringToFront(), я вижу, что меню моей формы и тело формы объединены с папками FileExplorer.

Ответ №2:

Рано или поздно, работая над приложением CE, вам придется запачкать руки вызовами Windows API. SetForegroundWindow может делать то, что вам нужно

 // Import the API call
[DllImport("coredll.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);

// Then, in your code somewhere
SetForegroundWindow(scanOutMenu.Handle);
  

Смотрите документы API здесь:http://msdn.microsoft.com/en-us/library/ms940024.aspx

Комментарии:

1. Форма уже открыта и находится за FileExplore. Мне нужно перенести это на передний план. Но если я использую BringToFront(), я вижу, что меню моей формы и тело формы объединены с папками FileExplorer.

Ответ №3:

Если она у вас уже открыта, то вам нужно вывести на передний план открытый объект. В показанном вами примере вы выводите на передний план объект, который еще не был показан.

 ScanOutMenu scanOutMenu = new ScanOutMenu(); // Creates a new object
scanOutMenu.BringToFront(); //Brings to front the Object that is not shown.
  

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

Пример:

 class test{

AnotherForm op;

public test(){
  AnotherForm nForm = new AnotherForm(); //Starts a form object
  op = nForm; // Assigns the form to be shown to the non-local variable
  nForm.Show(); // shows the form object to user

}

private void menuItem1_Click(object sender, EventArgs e)
{
  op.BringToFront(); //This will work
}

}