我在主窗口Form1上放了一个button,点击这个按钮会创建子窗体Form2,但是如果在点击button时,已经有Form2(根据不同的标题寻找)存在,就显示对应的Form2[使用showwindow(hw,sw_show)方法],可是在创建Form2后关闭这个窗体,发现这个Form2的句柄仍然存在,再点击button时,将会使用showwindow方法打开这个Form2,可是再关闭这个Form2就关不了了,窗体没有任何反应。怎么回事呢?

解决方案 »

  1.   

    if not form2.showing then
    form2.show;
      

  2.   

    Close默认动作是caHide,即调用Hide方法,Hide方法调用了TCustomForm.SetVisible,它会判断Visible属性,如果值不同才会有操作
    ShowWindow是直接用API操作窗体,而VCL不会收到消息,会认为窗口.Visible还是false,Hide方法就不会有动作了
      

  3.   

    Close默认动作是caHide,即调用Hide方法,Hide方法调用了TCustomForm.SetVisible,它会判断Visible属性,如果值不同才会有操作 
    ShowWindow是直接用API操作窗体,而VCL不会收到消息,会认为窗口.Visible还是false,Hide方法就不会有动作了按照上面的说法,我们可以这样处理。
    在Close的事件中用 Action := caFree;这样下次打开窗口就可以关闭了。
    但是这时候发现最小化用不了,怎么办呢?可以在窗体Activate事件中加入:
      if not self.Visible then
        self.Visible := not self.Visible;好了,关闭和最小化都可以用了这个问题也困惑了我很久,刚好找到这个页面上来。感谢ysai!