C# フォーム(From) の [×]ボタンを無効化(グレーアウト)する

  • デル株式会社
  • 業務システム作ってると、ちょくちょく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++ ダイアログの[×]ボタンを無効化(グレーアウト)する

    関連記事

    ページ上部へ戻る