- PR -

TableLayoutPanel上のPictureBoxの再描画について

1
投稿者投稿内容
Miya
会議室デビュー日: 2005/02/18
投稿数: 7
お住まい・勤務地: 札幌
投稿日時: 2008-01-24 16:44
TableLayoutPanelに、PictureBoxを配置しています。

フォーム上に直接配置した場合、以下のコードで常に描画されるのですが、
TableLayoutPanel上に配置すると一瞬描画された後に消えてしまいます。

Private Sub frm_Paint(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

Using g As Graphics = Me.PictureBox1.CreateGraphics
g.DrawEllipse(Pens.Blue, 0, 0, _
PictureBox1.Width - 10, PictureBox1.Height - 10)
End Using

End Sub

TableLayoutPanel上に配置した場合の再描画はどのように行ったらよいのでしようか?
PictureBoxのPaintイベントでも、TableLayoutPanelのPaintイベントでもだめでした。

環境:VB.NET 2005

[ メッセージ編集済み 編集者: Miya 編集日時 2008-01-24 16:46 ]
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2008-01-24 17:58
コントロールの描画は自分自身で行ってください。つまり、PictureBox の描画は PictureBox の Paint イベントで行います。
また、描画に使用する Graphics はイベント引数 PaintEventArgs の Graphics プロパティを使用してください。CreateGraphics メソッドは通常使用しません。
Miya
会議室デビュー日: 2005/02/18
投稿数: 7
お住まい・勤務地: 札幌
投稿日時: 2008-01-25 09:00
ありがとうございます。

ただ、知りたかったのは、TableLayoutPanel上にPictureBoxを配置した
場合の(SplitContainerでも同じ現象がおきます)再描画の方法でした。
フォーム上に直接配置した場合はうまくいっています。
教えていただいた方法でも、TableLayoutPanel上に配置した場合はだめでした。

Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As     System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
e.Graphics.DrawEllipse(Pens.Blue, 0, 0, PictureBox1.Width - 10, PictureBox1.Height - 10)
End Sub

フォーム上に直接配置するように、デザインを変更するしかないのでしようか?
未記入
会議室デビュー日: 2008/01/22
投稿数: 1
投稿日時: 2008-01-25 10:23
検討違いならごめんなさい。
最後にtableLayoutPanel1.Invalidate()
でだめですか?
Miya
会議室デビュー日: 2005/02/18
投稿数: 7
お住まい・勤務地: 札幌
投稿日時: 2008-01-25 11:00
ありがとうございます。

もう一度、新しいプロジェクトを作って、Hongliangさんに教えていただいた方法で
シンプルなプログラムを作ってやってみたら、再描画されました。
あちこち、テストしててプロパティをいじってしまっていたようです。

Invalidateも、今後のために調べてみます。




1

スキルアップ/キャリアアップ(JOB@IT)