Я использую VSTS 2008 + С# +.NET 2.0 для разработки приложения Windows Forms. В стандартном Form1 у меня есть кнопка, и нажмите кнопку, чтобы вызвать другую форму Form2.
Мой вопрос: я хочу, чтобы Form2 всегда был наверху, то есть пользователь должен ответить Form2 (заполнить informateon в Form2 и закрыть его), пока пользователь не сможет продолжать обрабатывать Form1. Как реализовать эту функцию?
Вот мой текущий код.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Visible = true;
}
}
Самый лучший способ сделать то, что вы хотите, - сделать диалоговое окно формы2. Вы делаете это, вызывая его
form2.ShowDialog()
метод.
попробуйте это
this.TopMost = true;
Вы можете использовать метод Win32:: SetWindowPos() и установить HWND hWndInsertAfter в HWND_TOPMOST, чтобы он оставался сверху.
Посмотрите на документацию SetWindowPos: http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx
[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
Вот несколько примеров: http://www.pinvoke.net/default.aspx/user32/SetWindowPos.html
Предполагая, что вы хотите, чтобы пользователь не взаимодействовал с Form1, пока они не закончили с Form2, вы хотите ShowDialog()
метод,
С родным .NET theres нет способа разместить форму сверху и удерживать ее там.
Form.TopMost устанавливает форму сверху только при создании. Form.ShowDialog() устанавливает форму поверх всех форм этого приложения, но затем может быть отброшена назад и за другими приложениями.
Я помню, что мы использовали некоторые P/Invoke-Calls для родного Win32 для обработки этого случая, но не помним, что именно вызывает. В любом случае 100% никогда не были достигнуты, распространены на Win2000 до WinXP, ничего не работало везде.