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

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

...全文
310 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧