web-dev-qa-db-ja.com

タイトルバー.NETから閉じるボタンを視覚的に削除/無効化

VB .NET 2005 MDIアプリケーションから閉じるボタンを削除または無効にするように求められました。フォームにはネイティブプロパティがありません。ユーザーが閉じることができないように閉じるボタンをグレー表示します。これを可能にするフォームクラスに何かが表示されたのを覚えていません。

これを行うために、.NET 2005以降で設定または呼び出すAPI呼び出しまたは魔法のプロパティはありますか?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

詳しくは:

最小化/最大化機能を維持する必要があります

フォームの描画方法はすでに非常に複雑なので、元のタイトルバーを維持する必要があります。

9
Jrud

質問に追加した最新の情報に基づいて、私の回答の最後までスキップしてください。


これは、falseに設定する必要があるものです: Form.ControlBox Property

ただし、最小化ボタンと最大化ボタン、およびアプリケーションメニュー(左上)は失われます。

別の方法として、OnCloseをオーバーライドし、Cancelをtrueに設定します(C#の例)。

protected override void OnFormClosing(FormClosingEventArgs e)
{
    if (e.CloseReason != CloseReason.WindowsShutDown && e.CloseReason != CloseReason.ApplicationExitCall)
    {
        e.Cancel = true;
    }

    base.OnFormClosing(e);
}

これらの解決策のどちらも受け入れられず、閉じるボタンだけを無効にする必要がある場合は、pinvoke/createparamsルートに進むことができます。

。NETアプリケーションを使用してウィンドウフォームから閉じるボタンを無効にする方法

これは、jdmのコードのVBバージョンです:

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 
28
Philip Wallace

ウィンドウの「クラススタイル」を変更することにより、システムメニューの閉じるボタンと閉じるメニュー項目を無効にすることができます。次のコードをフォームに追加します。

const int CS_NOCLOSE = 0x200;

protected override CreateParams CreateParams {
    get {
        CreateParams cp = base.CreateParams;
        cp.ClassStyle |= CS_NOCLOSE;
        return cp;
    }
}

これにより、ウィンドウが閉じられるのを防ぐだけでなく、実際にはボタンがグレー表示されます。 C#ですが、VBに変換するのは簡単だと思います。

10
jdm

閉じるボタンを削除する簡単な方法は次のとおりです。
1。フォームを選択します
2。次に、Propertiesに移動します。
3。 ControlBoxを見つけて、値をFalseに変更します。

これにより、すべてのコントロールボタンが削除されます(例:最小化、最大化、終了)また、タイトルの前の左隅にあるアイコンも削除されます。

7
user2849882

フォームのOnCloseイベントをオーバーライドできるはずです。これは、アプリケーションが「閉じられた」ときにシステムトレイに最小化される場合に一般的です。

3
Dave Swersky

フォームのXボックスを押したとき。 Form1_Closingが最初に実行され、次にForm1_Closed 終わらせる。

e.Cancel = True の中に Form1_Closing-防止しますForm1_Closedしたがって、呼び出されないため、フォームはアクティブなままです。

2
jmweb

ControlBoxプロパティをFalseに設定できますが、タイトルバー全体が消えますが、タイトル自体は...

1
jonaspp

フォームを閉じないようにしますが、非表示にします。

Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    Me.WindowState = FormWindowState.Minimized 
    Me.Visible=false
    e.Cancel = True
End Sub
1
user3781113

Jmwebが言ったこと ここ もOKです。フォームを閉じるときにイベントをキャンセルすると、X閉じるボタンは表示されません。ただし、そうする場合は、フォームに必要なプロセスを解放してから、フォームを閉じる必要があります。

Me.Dispose()
Me.Close()

これは、メニューストリップを使用して私のために働いた。

0
azemoten

フォーム自体を選択(またはクリック)します。プロパティウィンドウ(小さな稲妻アイコン)でイベントをクリックします。探す Form.Closingそしてそれをダブルクリックします。次に、次のように入力します。e.cancel=true

0
small_town_girl

VisualBasicでタイトルバーのないフォームを作成する。

Form Propertiesに移動し、ControlBoxShowIconの両方をfalseに設定します。

次に、フォームのtextプロパティからallテキストをクリアします。

0
Rahul Gurujala