VB .NET 2005 MDIアプリケーションから閉じるボタンを削除または無効にするように求められました。フォームにはネイティブプロパティがありません。ユーザーが閉じることができないように閉じるボタンをグレー表示します。これを可能にするフォームクラスに何かが表示されたのを覚えていません。
これを行うために、.NET 2005以降で設定または呼び出すAPI呼び出しまたは魔法のプロパティはありますか?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
詳しくは:
最小化/最大化機能を維持する必要があります
フォームの描画方法はすでに非常に複雑なので、元のタイトルバーを維持する必要があります。
質問に追加した最新の情報に基づいて、私の回答の最後までスキップしてください。
これは、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
ウィンドウの「クラススタイル」を変更することにより、システムメニューの閉じるボタンと閉じるメニュー項目を無効にすることができます。次のコードをフォームに追加します。
const int CS_NOCLOSE = 0x200;
protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
cp.ClassStyle |= CS_NOCLOSE;
return cp;
}
}
これにより、ウィンドウが閉じられるのを防ぐだけでなく、実際にはボタンがグレー表示されます。 C#ですが、VBに変換するのは簡単だと思います。
閉じるボタンを削除する簡単な方法は次のとおりです。
1。フォームを選択します
2。次に、Properties
に移動します。
3。 ControlBox
を見つけて、値をFalse
に変更します。
これにより、すべてのコントロールボタンが削除されます(例:最小化、最大化、終了)また、タイトルの前の左隅にあるアイコンも削除されます。
フォームのOnCloseイベントをオーバーライドできるはずです。これは、アプリケーションが「閉じられた」ときにシステムトレイに最小化される場合に一般的です。
フォームのXボックスを押したとき。 Form1_Closing
が最初に実行され、次にForm1_Closed
終わらせる。
e.Cancel = True
の中に Form1_Closing
-防止しますForm1_Closed
したがって、呼び出されないため、フォームはアクティブなままです。
ControlBox
プロパティをFalse
に設定できますが、タイトルバー全体が消えますが、タイトル自体は...
フォームを閉じないようにしますが、非表示にします。
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
Jmwebが言ったこと ここ もOKです。フォームを閉じるときにイベントをキャンセルすると、X閉じるボタンは表示されません。ただし、そうする場合は、フォームに必要なプロセスを解放してから、フォームを閉じる必要があります。
Me.Dispose()
Me.Close()
これは、メニューストリップを使用して私のために働いた。
フォーム自体を選択(またはクリック)します。プロパティウィンドウ(小さな稲妻アイコン)でイベントをクリックします。探す Form.Closing
そしてそれをダブルクリックします。次に、次のように入力します。e.cancel=true
Form Properties
に移動し、ControlBox
とShowIcon
の両方をfalseに設定します。
次に、フォームのtext
プロパティからallテキストをクリアします。