|  | 分類:[.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
 ----------------------------------------------------------------------------------------------------------
 
 
 何かわかることがあれば教えていただけないでしょうか。
 
 |