描述:我有两个Form: Form1, Form2, 在Form1中有个Button, 当我点击Button,用ShowDialog() 显示出Form2来.
现在在VC中, 用FindWindow找到Form2的句柄hwnd, 然后ShowWindow(hwnd, SW_HIDE), Form2就自动销毁了,但对Form1执行相同的操作(隐藏Form1)时,Form1并不会销毁。请问这是为什么?以及怎样避免销毁?在VC中并不会这样。谢谢。代码如下:
namespace DPDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }        private void OnClick(object sender, EventArgs e)
        {
            Form form = new Form2();            
            form.ShowDialog();
            int t = 0; //当我在VC中隐藏Form2时,会代码会执行到这儿。为什么Form2会退出ShowDialog?            
        }
    }
}

解决方案 »

  1.   

    因为form2是ShowDialog显示出来的。从下面的话推断hide dialog将导致ShowDialog返回。当窗体显示为模式对话框时,单击“关闭”按钮(窗体右上角带 X 的按钮)会隐藏窗体并将 DialogResult 属性设置为 DialogResult.Cancel。与无模式窗体不同,当用户单击对话框的关闭窗体按钮或设置 DialogResult 属性的值时,.NET Framework 不调用 Close 方法。窗体转而可以隐藏并可重新显示,而不用创建该对话框的新实例。因为未关闭显示为对话框的窗体,所以在您的应用程序不再需要该窗体时,必须调用该窗体的 Dispose 方法。上面的话来自msdn:
    http://msdn.microsoft.com/zh-cn/library/c7ykbedk.aspx
      

  2.   

    是的,
    用ShowDialog程序会停到这里,当你关闭ShowDialog出来的窗体的时候 ShowDialog下面的代码才会执行,
    写个东西试下就能发现
      

  3.   

    showdialog()出来的窗体隐藏了,那你UI不就不能动了吗?主界面都没办法响应了。
    你的代码就停在showdialog()那里等待用户响应,不往下走了。只有等到dialogresult返回,才继续执行。
      

  4.   

    如果C#中hide dialog将导致ShowDialog返回,而VC, Win32中又不会,那C#不与其他的兼容,这样做的意义在哪里?本质上都是窗口,却有不同的行为?(另,在VC, Win32中,如果隐藏某个窗口,其所有的子窗口都会隐藏,而在这里,当我隐藏Form1中,Form2并不会隐藏), 希望各位不吝赐教。