- 2016-10-9
- Visual C#
業務システム作ってると、ちょくちょくFromの[×]ボタンを、
無効化する事が多い。
備忘。
無効化
[×]ボタンの無効化(見えるけど押せない)は、
API呼び出しでできる。
【無効化前】
上記の画面から、下記の流れで処理すると無効化できる。
1.システムメニュー(フォームの)ハンドル取得する。
2.[×]ボタンを無効化する。
ソース
// ----------------------------------------------------- using System.Runtime.InteropServices; // 今回の処理に必要 // -----------------------------------------------------
上記、using して、
// -----------------------------------------------------
// APIを呼び出すため、対象のDLLをインポート
[DllImport("USER32.DLL")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, UInt32 bRevert);
[DllImport("USER32.DLL")]
private static extern UInt32 RemoveMenu(IntPtr hMenu, UInt32 nPosition, UInt32 wFlags);
// 定数定義
private const UInt32 SC_CLOSE = 0x0000F060;
private const UInt32 MF_BYCOMMAND = 0x00000000;
// -----------------------------------------------------
API使えるようにして、定数宣言。
// ----------------------------------------------------- // コントロールボックスの[閉じる]ボタンの無効化 IntPtr hMenu = GetSystemMenu( this.Handle, 0 ); // システムメニュー(フォームの)ハンドル取得する RemoveMenu( hMenu, SC_CLOSE, MF_BYCOMMAND ); // [×]ボタンを無効化する。 // -----------------------------------------------------
コンストラクタで実行する。
下記、ソース全部
using System;
using System.Windows.Forms;
// DLLインポートするのに必要
using System.Runtime.InteropServices; // 今回の処理に必要
namespace FormExitSample
{
public partial class Form1 : Form
{
// APIを呼び出すため、対象のDLLをインポート
[DllImport("USER32.DLL")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, UInt32 bRevert);
[DllImport("USER32.DLL")]
private static extern UInt32 RemoveMenu(IntPtr hMenu, UInt32 nPosition, UInt32 wFlags);
// 定数定義
private const UInt32 SC_CLOSE = 0x0000F060;
private const UInt32 MF_BYCOMMAND = 0x00000000;
public Form1()
{
InitializeComponent();
// コントロールボックスの[閉じる]ボタンの無効化
IntPtr hMenu = GetSystemMenu( this.Handle, 0 ); // システムメニュー(フォームの)ハンドル取得する
RemoveMenu( hMenu, SC_CLOSE, MF_BYCOMMAND ); // [×]ボタンを無効化する。
}
private void Form1_Load(object sender, EventArgs e)
{
this.Text = "[×]ボタンの無効化";
}
}
}
上記を実行すると、こんな感じになる。
(若干、見辛いか?)
以前にVCの記事で書いたC#版なんだけども、
他にやり方ありそうだけどね。
VC++ ダイアログの[×]ボタンを無効化(グレーアウト)する













