禁用 Windows 窗体中的关闭按钮

2024-05-23

我在互联网上找到了这段代码,但不确定如何使用它。我还需要在工作完成后重新启用它。请帮助。

Private Const CP_NOCLOSE_BUTTON As Integer = &H200

Protected Overloads Overrides ReadOnly Property CreateParams() As CreateParams
    Get
        Dim myCp As CreateParams = MyBase.CreateParams
        myCp.ClassStyle = myCp.ClassStyle Or CP_NOCLOSE_BUTTON
        Return myCp
    End Get
End Property

您可以将其粘贴到表单的代码中以使用它。然而,这会永久禁用关闭按钮。动态地执行它需要非常不同的代码,您必须修改系统菜单。将此代码粘贴到您的表单中,并在您的逻辑中使用 CloseEnabled 属性:

Public Property CloseEnabled() As Boolean
    Get
        Return mCloseEnabled
    End Get
    Set(ByVal value As Boolean)
        If value <> mCloseEnabled Then
            mCloseEnabled = value
            setSystemMenu()
        End If
    End Set
End Property
Private mCloseEnabled As Boolean = True

Protected Overrides Sub OnHandleCreated(ByVal e As System.EventArgs)
    MyBase.OnHandleCreated(e)
    setSystemMenu()
End Sub

Private Sub setSystemMenu()
    Dim menu As IntPtr = GetSystemMenu(Me.Handle, False)
    Dim enable As Integer
    If Not mCloseEnabled Then enable = 1
    EnableMenuItem(menu, SC_CLOSE, enable)
End Sub

'' P/Invoke declarations
Private const SC_CLOSE As Integer = &hf060
Private Declare Function GetSystemMenu Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal revert As Boolean) As IntPtr
Private Declare Function EnableMenuItem Lib "user32.dll" (ByVal hMenu As IntPtr, ByVal IDEnableItem As Integer, ByVal wEnable As Integer) As Integer
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

禁用 Windows 窗体中的关闭按钮 的相关文章

  • 为什么选项卡页正文不使用 .NET 选项卡控件进行更新?

    我在使用 C Visual Studio 2010 中的 NET TabControl 时遇到一个奇怪的问题 启动 Windows 窗体应用程序 添加一个选项卡控件和一个按钮 向两个选项卡页添加两个不同的标签 以便您可以区分它们 该按钮的作
  • 关闭表单后进程未关闭

    我有第一种形式 它调用另一种形式 然后消失 frm visible false 该表单在被调用一次后不应返回 但它是主表单 启动程序时出现的第一个表单 我试图做到这一点 以便当您关闭第二个表单时 两个表单都会关闭 我已经尝试了多种方法 但所
  • 我可以为我在面板上绘制的节点显示工具提示吗?

    我有一个 MMO 网格系统及其用途A 寻找路径 有时它会失败 因为我的节点放置不当 为了解决这个问题 我制作了一个网格可视化器 它工作正常 我可以看到一些节点放置得不好 但我看不到哪些节点 这是我显示节点的代码 foreach var no
  • ScrollableControl 在整个控件周围绘制边框

    我正在构建基于的自定义用户控件ScrollableControl 现在我正在尝试在控件周围添加边框 类似于 DataGridView 的边框 我可以使用以下方法绘制边框 e Graphics TranslateTransform AutoS
  • 从用户控件访问父控件 - C#

    如何访问C winform 中用户控件的父控件 我使用以下代码 但它并不适用于所有类型的控件 例如 ListBox Control Co this TopLevelControl Controls Find label7 true Co 0
  • 让设计者为 UserControl 的简单 List 属性生成 AddRange

    我创建了一个新的用户控件 如下所示 public partial class MyControl UserControl List
  • 具有不透明度的 WinForm 控件

    我有一个本身有一些控件的表单 btnCreateReport pnlDarkLayer 我有一个适合表单的面板 Dock Fill 它位于所有控件的背面 当用户单击 btnCreateReport 按钮时 我调用 pnlDarkLayer
  • 在 Windows 窗体应用程序 (.net) 中单击图像的 X/Y 坐标

    有没有办法知道在 FORMS 应用程序中单击了哪些 x y 坐标 看看鼠标事件参数 http msdn microsoft com en us library system windows input mouseeventargs memb
  • 当 AxWindowsMediaPlayer 关闭时,出现 AccessViolation 异常

    我有一个AxWMPLib AxWindowsMediaPlayer在表格上 当我关闭表单时 我收到 尝试读取或写入受保护的内存 这通常表明其他内存已损坏 例外 隐藏表单可以 但关闭则不行 当组件从表单中删除时 一切都很好 这是Winform
  • 调整窗口大小 C#

    是否可以从另一个应用程序中调整正在运行的应用程序的窗口大小 我希望当我正在构建的应用程序启动时 另一个应用程序 比如说 itunes 的宽度减少到其 2 3 以便剩余的 1 3 由我的应用程序占用 这两个应用程序应该一起运行并且可供用户访问
  • 如何在非托管 ATL GUI 中嵌入 Windows 窗体?

    我有一个使 COM 可见的 Windows 窗体用户控件 现在我想将该控件嵌入到 ATL 对话框 GUI 中 ATL项目 非托管C 只应获取winform的progID并在运行时动态创建和嵌入它 这可能吗 如果可以 我该怎么做 我不确定 A
  • 如何获取 TextRenderer 使用的确切文本边距

    System Windows Forms TextRenderer DrawText方法根据 的值呈现带或不带左右填充的格式化文本flags范围 TextFormatFlags NoPadding 将文本紧密地装入边界框 TextForma
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • 在运行时从 DataGridView 动态创建 RDLC 报告

    我有一个表格AdvancedSearchForm with a 数据网格视图控制dgrData和一个按钮Report在 C Winform 中 单击按钮时Report 我希望有一个表格报表视图控件显示与 DataGridView 中相同的列
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • 如何在 Windows 窗体中运行屏幕保护程序作为其背景?

    如何在 Windows 窗体中运行屏幕保护程序作为其背景 用户还可以在屏幕保护程序运行时与表单控件进行交互 为什么这个 我们有一个案例 需要在用户时运行 Windows Bubbles 屏幕保护程序 可以继续与表单控件交互吗 您可以使用以下
  • F10键没被抓住

    I have a Windows Form and there overriden ProcessCmdKey However this works with all of the F Keys except for F10 I am tr
  • 重写某些 .Net Framework 控件的绘制以更改其边框颜色?

    SCENARIO 我正在使用第三方 Windows 视觉主题 当我看到我的应用程序时 它看起来像这样 但是当我使用正常的Aero主题 它看起来到处都有可怕的白色边框 QUESTION 我知道应用程序中使用的配色方案取决于视觉风格 但是 我可
  • 围绕所选 ListView 项目的矩形

    我想在 ListView 中的所选项目周围绘制一个矩形 因为阅读了 Microsoft 建议不要更改所述项目的 突出显示颜色 的地方 但是 我正在使用 selectedIndexChanged 事件 当绘制实际的 listviewitem
  • Scrollable Control中的Scroll/Scroll有什么用?

    ScrollableControl 类有 2 个受保护的布尔属性 HScroll 和 VScroll As the document https msdn microsoft com en us library system windows

随机推荐