65.9K
CodeProject 正在变化。 阅读更多。
Home

C# 关闭按钮禁用示例

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.38/5 (14投票s)

2011年10月15日

CPOL

2分钟阅读

viewsIcon

85151

downloadIcon

4661

一个简单的应用程序,展示了如何在 Windows Forms 中更改关闭 (X) 按钮的状态。

Close button example

引言

此应用程序的主要目的是使用 Windows API 启用和禁用应用程序中任何 Windows Form 的“关闭”按钮。

在我的某些应用程序中,我需要防止用户点击关闭按钮退出应用程序。当然,退出应用程序有很多种方法。但在某些情况下,点击关闭按钮可能不是最好的选择。

该应用程序使用 user32.dll Windows API 来调用一些方法。当然,在同一个库中还有其他可以调用的方法来执行不同的操作。

Using the Code

在 Windows Forms 中启用和禁用关闭按钮有很多种方法。这种方法简单,可能也是最有效的方法之一。

如前所述,要操作窗体中关闭按钮的状态,需要一个名为 user32.dll 的 Windows API。通过在项目中包含 user32.dll,您将能够调用“user32.dll”库中的方法。我们需要使用两种主要方法来更改关闭按钮的状态,它们是:EnableMenuItem()GetSystemMenu()

如您所见,这些方法位于 user32.dll 文件中。

using 部分添加 using System.Runtime.InteropServices; 后,您可以开始将函数导入到您的项目中。

在此步骤之后,是时候创建方法并在您的项目中调用它们了。现在,您可以以任何您想要的方式调用这些方法,例如在计时器中使用,或使用任何其他类型的事件。在演示应用程序中,您会注意到按钮事件调用自定义创建的 void 函数,其中包含用于启用和禁用关闭按钮的其他方法。下面的代码片段显示了调用 DLL 方法。

为了更改关闭按钮的状态,我们需要告诉 API 按钮状态的当前和目标地址。这三个值代表按钮的状态。如果您有兴趣操作其他控件,可以在互联网上找到所有这些值。

internal const int SC_CLOSE = 0xF060;           //close button's code in Windows API
internal const int MF_ENABLED = 0x00000000;     //enabled button status
internal const int MF_GRAYED = 0x1;             //disabled button status (enabled = false)
internal const int MF_DISABLED = 0x00000002;    //disabled button status

现在是时候调用我们的 DLL 方法了

[DllImport("user32.dll")]
private static extern IntPtr GetSystemMenu(IntPtr HWNDValue, bool isRevert);

[DllImport("user32.dll")]
private static extern int EnableMenuItem(IntPtr tMenu, int targetItem, int targetStatus);

这里还有另外两个我没有机会尝试的,但我认为它们应该可以正常工作……

internal const int SC_MINIMIZE = 0xF020; //for minimize button on forms
internal const int SC_MAXIMIZE = 0xF030; //for maximize button on forms
© . All rights reserved.