0

1080p タッチスクリーン アプリケーションがあります。モーダルがポップアップしたら、メインフォームを暗くして強調したい。

現在、メイン フォームのサイズである、黒で不透明度が 50% の 2 番目のフォームを使用しています。モーダルを表示する必要があるときはいつでも、不透明なフォームを開き、目的のモーダルを開きます。

これは私の目的には少し悪意があると感じています。また、ユーザーがタブを切り替えると、フォームが順不同で誤動作することもありません。

暗くする効果を達成するためのより良い方法はありますか?おそらく、メインフォーム自体を暗くすることによってですか?

4

3 に答える 3

0

次のようにして、自分で解決しました。

  • メインフォームに Dock:fill で非表示のピクチャボックスを配置し、
  • 現在の画面のスクリーンショットを撮り、暗くする
  • 画像をピクチャボックスに割り当てて可視化する
  • 新しい勝利でモーダルを開く

モーダルが閉じられたとき

  • ピクチャーボックスを隠す
于 2012-10-12T07:25:24.910 に答える
-1

これは、Thomasの回答のメソッドと非常によく似たコードです。フォームを暗い状態のままにしないように、Darknessプロパティをブロックで使用することに注意してください。Try...Finally

Public Class Form1


Private _PB As PictureBox

Public WriteOnly Property Darkness
    Set(value)
        If value Then
            Dim Bmp = New Bitmap(Bounds.Size.Width, Bounds.Size.Height)
            Me.DrawToBitmap(Bmp, New Rectangle(Point.Empty, Bounds.Size))
            Using g = Graphics.FromImage(Bmp)
                Dim Brush As New SolidBrush(Color.FromArgb(125, Color.Black))
                g.FillRectangle(Brush, New Rectangle(Point.Empty, Bmp.Size))
            End Using
            _PB = New PictureBox
            Me.Controls.Add(_PB)
            _PB.Size = Bounds.Size
            _PB.Location = Bounds.Location - PointToScreen(Point.Empty)
            _PB.Image = Bmp
            _PB.BringToFront()
        Else
            If _PB IsNot Nothing Then
                Me.Controls.Remove(_PB)
                _PB.Dispose()
            End If
        End If
    End Set
End Property

Private Sub btnDialog_Click(sender As Object, e As EventArgs) Handles btnDialog.Click
    Try
        Darkness = True

        MsgBox("Modal dialog")

    Finally
        Darkness = False
    End Try
End Sub
End Class
于 2012-10-12T19:38:54.477 に答える