我正在使用VSTS 2008 + C#+ .Net 2.0来开发Windows窗体应用程序。在默认的Form1中,我有一个按钮,然后单击该按钮将调用另一个Form - Form2。
我的问题是,我想让Form2始终位于顶部,即用户必须响应Form2(在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;
}
}
答案 0 :(得分:16)
完全按照自己的意愿做的最佳选择是使form2成为一个对话框。您可以通过调用
来完成此操作form2.ShowDialog()
方法
答案 1 :(得分:8)
试试这个
this.TopMost = true;
答案 2 :(得分:2)
您可以使用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
答案 3 :(得分:1)
假设您希望阻止用户在完成Form2之前与Form1进行交互,那么您需要ShowDialog()
方法。
答案 4 :(得分:0)
使用原生.NET时,无法将表单置于顶部并将其保留在那里。
Form.TopMost仅在创建时将表单设置在顶部。 Form.ShowDialog()将表单设置在该应用程序的所有形式之上,但也可以在其他应用程序后面向后抛出。
我记得我们使用一些P / Invoke-Calls来处理这种情况,但不记得究竟是什么调用。无论如何,100%从未到达,在Win2000上传播到WinXP无处不在。