|
分類:[.NET 全般]
VB2010Express Windows7 64bit
あるフォームがあります。 フォームにはDataGridViewやSplitContainer、RichTextBox等があります。 フォームやDataGridViewにはグラデーション処理をPaintで行っています。
問題は、最小化したあとタスクバーから復帰する際だけ起こります。 最小化から復帰する際、MyBase.Paintが動くのですが その時点の「Me.ClientRectangle」の内容がすべて0になってしまっており、
---------------------------------------------------------------------------------------------------------- Dim myLGBrush As LinearGradientBrush = Nothing myLGBrush = New LinearGradientBrush(Me.ClientRectangle, Color.Black, Color.White, Mode) ----------------------------------------------------------------------------------------------------------
とした時点で、Me.ClientRectangleが0だとエラーになるのです。 エラー内容は、 「ArgumentExceptionはハンドルされませんでした。 四角形 '{X=0,Y=0,Width=0,Height=0}' の幅、または高さの値に 0 を指定することはできません。」 XPで実行すると、エラーにはならず画面のDataGridViewなどが表示されてない状態になります。 その後移動したりすると、表示されます。
どうしてかさっぱりわからず、 新しいプロジェクトで以下のような簡易フォームを作って実行し、 最小化から戻しても何も問題なく「Me.ClientRectangle」に値が入っています。
---------------------------------------------------------------------------------------------------------- Imports System.Drawing.Drawing2D Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Form1_Paint(ByVal sender As Object, _ ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
' グラデーションの方向 Dim mode As LinearGradientMode = LinearGradientMode.Vertical ' グラデーションを行うブラシ Dim myLGBrush As LinearGradientBrush = _ New LinearGradientBrush(Me.ClientRectangle, Color.Blue, Color.White, mode) ' 描画 e.Graphics.FillRectangle(myLGBrush, Me.ClientRectangle)
End Sub End Class ----------------------------------------------------------------------------------------------------------
何かわかることがあれば教えていただけないでしょうか。
|