#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
}
}