-1

修复使用 user32.dll 的第三方控件

public partial class Form1 : Form
{
    TheForm theForm;//empty form
    public Form1()
    {
        InitializeComponent();
        theForm = new TheForm();
    }

    internal const int SWP_SHOWWINDOW = 0x0040;

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    internal static extern int ShowWindow(IntPtr hWnd, short cmdShow);        

    private void button1_Click(object sender, EventArgs e)//shows theForm when it wants to
    {
        ShowWindow(theForm.Handle, SWP_SHOWWINDOW);
    }

    private void button2_Click(object sender, EventArgs e)//shows theForm always
    {
        theForm.Show();
    }
}

为什么在调用 user32 ShowWindow 之后,大多数时候窗口“陷入困境”?它捕获失去焦点和处置,但不捕获鼠标事件并且不绘制自身。

4

1 回答 1

1

我不是专家,但我认为您需要通过在按钮单击事件处理程序方法之外调用 Show() 方法来显示您的表单。如果没有可查看的表单,则无法单击按钮来显示表单。

我不确定是否有理由在 C# 中使用 user32.dll 来制作 winforms 应用程序。因为这是由 C# 为您完成的,从某种意义上说。

您需要做的就是让 Visual Studio 在拖放表单设计器中为您创建表单代码。然后要显示和使用您的表单,而无需仅为您的 Main() 方法创建新的源文件,只需在生成的代码中编写 Main() 方法即可。

这是一篇关于使用 Windows 窗体设计器的好文章。

http://msdn.microsoft.com/en-us/library/360kwx3z(v=vs.90).aspx

于 2012-11-16T05:05:11.090 回答