• 主页
  • VBS
  • .NET技术
  • VBA
  • VB网络编程
  • VB多媒体
  • VB数据库
  • VB控件
  • VB COM/DCOM
  • VB基础类
  • VB API

如何设置使无法关闭子窗口?

在途中 阳溪中心 其他  2005-01-09 09:32:19
我创建了一个多文档界面 (MDI) 应用程序,当然子窗口是可以最大化的,
但我有一个特殊要求就是:子窗口最大后再也无法使它最小化或关闭它。

...全文
237 点赞 收藏 17
写回复
17 条回复
在途中 2005年01月13日
可能最后只能用继承的方法了,那相对来说稍微麻烦些!
回复 点赞
看看要就发发 2005年01月13日
form的maximisebox=False
minimizebox=False
formborderstyle=none
回复 点赞
mademelaugh 2005年01月12日
人家上面已经说了,ControlBox 属性对创建时最大化显示的多文档界面 (MDI) 子窗体没有影响
回复 点赞
GnuDoyng 2005年01月12日
呵呵楼上你不如直接这样:
Me.ControlBox = False
回复 点赞
tihua 2005年01月12日
笨方法,
将form的maximisebox=False
minimizebox=False
formborderstyle=none
回复 点赞
在途中 2005年01月11日
vs的帮助中有说明:

注意 设置成 false 时,ControlBox 属性对创建时最大化显示的多文档界面 (MDI) 子窗体没有影响

可我偏偏是多文档界面!

该如何设置,使子窗口的最大化(还原)失去作用?
回复 点赞
Intel8088 2005年01月11日
form1.controlbox=false
回复 点赞
xiayule 2005年01月11日
要在resize事件发生之前截获那条消息,需要通过继承form来实现, 在ProcessCmdKey里面实现/
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
Dim WM_KEYDOWN As Integer = 256 '消息响应的问题可以参考其他win32编程的文章

Dim WM_SYSKEYDOWN As Integer = 260
If ((msg.Msg = WM_KEYDOWN) Or (msg.Msg = WM_SYSKEYDOWN)) Then
。。。。
End If
End Function
把WM_KEYDOWN 换成你需要截获那条消息。然后返回TRue,表示这条消息已经处理过了。
回复 点赞
mademelaugh 2005年01月11日
那种办法是不可行的,因为它事实上已经resize了。应该在resize事件发生之前截获那条消息。
我不知道可不可以处理。但我想它既然处在最大化状态,还原按钮就应该是有效的。
你试试在最大化后把窗体变成无边框样式的,但这样子不好看。而且如果有其他子窗体被放到这个最大化窗体后面去就不好办了:(
怎么会有这么奇怪的要求。
回复 点赞
在途中 2005年01月11日
这么说还是可以还原的,如可能还原那就不好了。
我也曾试过当程序检测到窗体大小发生变化时让它最大化,可这样的话按还原窗口会闪一下再最大化,也不好看。

该怎么办呢?
回复 点赞
mademelaugh 2005年01月11日
想出了一个不完美的办法。
在子窗体的resize事件里写入
Private Sub frmStockBook_Resize(ByVal sender As Object, ByVal e As System.EventArgs)Handles MyBase.Resize
If Me.WindowState = FormWindowState.Maximized Then
Me.FormBorderStyle = FormBorderStyle.None
End If
End Sub
在closing事件里写入
Private Sub frmStockBook_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
If Me.WindowState = FormWindowState.Maximized Then
e.Cancel = True
End If
End Sub

则在最大化以后,按关闭和最小化都没用。当按还原时,窗体变成无边框形

但是还是不大好看。
回复 点赞
mademelaugh 2005年01月11日
若要制止最小化,可以用me.minimizeBox = False来设置。
但要在最大化以后禁止还原,可能需要截获这个使窗体还原的消息,不知道可不可以。
回复 点赞
xiayule 2005年01月11日
参考以下:通过继承来实现


Private blnCanClose As Boolean '是否可以关闭窗体 -true-- 可以
Private blnCanMinimum As Boolean '是否可以最小化 --true --可以
Private Sub frmBase_MaximumSizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.MaximumSizeChanged
blnCanClose = False
blnCanMinimum = False
End Sub


Protected Overrides Sub OnMinimumSizeChanged(ByVal e As System.EventArgs)
If blnCanMinimum = False Then Exit Sub
MyBase.OnMinimumSizeChanged(e)
End Sub

Private Sub frmBase_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
e.Cancel = blnCanClose
End Sub
回复 点赞
mademelaugh 2005年01月10日
在父窗体的closing事件里加end语句,可以关闭程序
回复 点赞
在途中 2005年01月10日
可最小化呢?
回复 点赞
在途中 2005年01月10日
最小化呢?

上面在closing事件里写e.cancel=true它的作用连父窗口也起作用,还要写什么才可以关闭总程序呢?
回复 点赞
3tzjq 2005年01月10日
Closing 事件中写:e.Cancel=True
回复 点赞
发动态
发帖子
VB
创建于2007-09-28

1.1w+

社区成员

11.0w+

社区内容

VB技术相关讨论,主要为经典vb,即VB6.0
社区公告
暂无公告