閉じる(x)ボタンのみを非表示にする方法は?


151

モーダルダイアログがあり、閉じる(X)ボタンを非表示にする必要がありますがControlBox = false、最小化ボタンと最大化ボタンを保持する必要があるため、を使用できません 。

[閉じる]ボタンだけを非表示にする必要がありますが、それを行う方法はありますか?

どうもありがとう!

更新:私はそれを無効にする許可を持っていました、それはより簡単です:)ありがとうございます!


これはyuoが望むものでしょうか?[C#.NETのWinフォームの閉じるボタン[X]を非表示](sameeramrutia.wordpress.com/2008/09/16/…googledhide close button c#、2番目の結果がここにあります!=)
ミゲルアンジェロ

あなたは間違っています、無効化ボタンを使いたくありませんが、それを非表示にしてください。解決策を見つけることができますか?
stefano m

8
ニーズは強い言葉です。この要件はどこから来ていますか?実際の要件は何ですか-ユーザーがプログラムを終了できないこと、またはUIに「閉じるボタンがないように見える」こと。これには他の方法があり、それらすべてを完全に閉じるのに苦労することになるためです(たとえば、タスクマネージャー、taskkill、場合によってはalt + f4など)。私は個人的にはこれで一生懸命働きません。とにかくアプリ全体のスキンを変更しない限り、それは無駄な努力であり、ユーザーの期待と他のWindowsプログラムとの継続性を損なうからです。
Merlyn Morgan-Graham

4
@Sayemそれはこのページを明らかにするので、そんな批評家にならないでください。
ブライアングラハム

1
リストの最小化ボタンもスクラッチします。モーダルダイアログを最小化すると、自動的に閉じます。必要に応じて、それはまだ有効になっている唯一のウィンドウです。最小化すると、フォーカスを取得できるウィンドウがなくなるため、ユーザーはプログラムに戻ることができなくなります。あなたは今「これはまだ意味がありますか?」地域。そうではありません。
ハンス

回答:


148

非表示にすることはできませんが、フォームのCreateParamsプロパティをオーバーライドして無効にすることができます。

private const int CP_NOCLOSE_BUTTON = 0x200;
protected override CreateParams CreateParams
{
    get
    {
       CreateParams myCp = base.CreateParams;
       myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON ;
       return myCp;
    }
}

ソース:http : //www.codeproject.com/KB/cs/DisableClose.aspx


おかげで、私はこの解決策を見つけましたが、無効にするだけではなく、それを非表示にしたいのです:( anywatありがとう!
stefano m

4
フォームを最初からデザインする以外に方法はありません。
ダニエルA.ホワイト

ええ。閉じるボタンのない独自のコントロールボックスを使用して独自のフォームを作成し、親フォームのコントロールボックスを非表示にすることをお勧めします。
バハムート

「Abhishek.Chopra」からの回答はシンプルで効果的です。
Altaf Patel 2015年

実行時に再度有効にする方法は?
Mike de Klerk

158

設定によりフォーム上の閉じるボタンを非表示にすることができます this.ControlBox=false;


29
それが選択肢ではないと彼が指定した質問を読みましたか?
2012年

28
グーグル検索をしました、そしてこのSO QAはトップヒットでした。そして、この答えは私が探していたものでした。
アビシェク

15
これにより、これらのサイズ変更ボタンがすべて非表示になります。Xだけではない
リッチシーラー2014年

1
どうもありがとうございます!最も簡単な方法。

26

システムメニュー全体を削除することで非表示にできます。

private const int WS_SYSMENU = 0x80000;
protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.Style &= ~WS_SYSMENU;
        return cp;
    }
}

もちろん、そうすると最小化ボタンと最大化ボタンが削除されます。

システムメニューはそのままにして閉じる項目を削除すると、閉じるボタンは残りますが無効になります。

最後の方法は、非クライアント領域を自分でペイントすることです。それを正しく行うのはかなり難しいです。


4
これもうまくいきます!だが ControlBox = falseは簡単に使用できます。
simmeone

1
これは、ControlBoxfalseに設定するのと同じです。また、それは要件に失敗します:最小化ボタンと最大化ボタンを保持する必要がある
whiteshooz

23

を使用してクローズボックスを非表示にすることができます

this.ControlBox = false;

this.Text = " "このようにするために空白を追加することを忘れないでください

ここに画像の説明を入力してください


2
これが私に必要なものです。ありがとう。
コスマス

2
これは正しくありません。OPの質問から直接:使用できませんControlBox = false
Martin

8

「非表示」のように本当に非表示にしたい場合は、おそらくボーダレスフォームを作成し、キャプションコンポーネントを自分で描画する必要があります。VisualStylesライブラリには、利用可能なWindows要素があります。また、キャプションバーをつかんでフォームのサイズを変更したり、フォームを移動したりする機能も追加する必要があります。コーナーのシステムメニューは言うまでもありません。

ほとんどの場合、特に最小化機能を備えたモーダルフォームが必要な場合は、「閉じる」ボタンを使用できないようにすることは正当化できません。モーダルフォームを最小化しても、意味がありません。


2

フォームのプロパティで「コントロールボックス」= Falseに設定しますが、最小化および最大化も非表示になります。


1

プロパティセクションからFormBorderStyleを変更するか、コンストラクターでプログラムを使用して閉じるボタンを非表示にできます。

public Form1()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
}

次に、メニューストリップ項目を作成して、アプリケーションを終了します。

乾杯

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.