10

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

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

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

詳しくは:

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

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

4

13 に答える 13

30

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


これは、falseに設定する必要があるものです: Form.ControlBoxプロパティ

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

別の方法として、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 
于 2009-11-16T17:06:59.137 に答える
10

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

const int CS_NOCLOSE = 0x200;

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

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

于 2009-11-16T17:19:20.450 に答える
9

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

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

于 2013-10-05T16:00:08.157 に答える
3

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

于 2009-11-16T17:01:42.763 に答える
2

フォームのXボックスを押したとき。Form1_Closing最初に行われ、次に行わForm1_Closedれます。

したがってe.Cancel = TrueForm1_Closing-内はForm1_Closed呼び出されないため、フォームはアクティブなままになります。

于 2012-10-24T19:05:27.567 に答える
1

ControlBoxプロパティをに設定できますFalseが、タイトルバー全体が表示されなくなりますが、タイトル自体は...

于 2009-11-16T17:04:25.413 に答える
1

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

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
于 2015-05-04T15:36:46.683 に答える
0

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

Me.Dispose()
Me.Close()

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

于 2014-07-09T23:39:39.077 に答える
0

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

于 2015-02-15T12:07:53.077 に答える
0

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

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

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

于 2015-05-14T11:45:54.140 に答える
-1

プロパティに移動し、退屈なスタイルから選択します

于 2017-07-17T11:09:55.537 に答える
-2

必要なフォームを選択し、プロパティセクションでcontrolBox=falseを設定します。これでうまくいきました:)

于 2014-05-18T18:42:30.360 に答える
-3
Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    Beep()
    e.Cancel = True
End Sub
于 2012-10-24T17:56:49.773 に答える