- - PR -
TableLayoutPanel上のPictureBoxの再描画について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 ] |
|
投稿日時: 2008-01-24 17:58
コントロールの描画は自分自身で行ってください。つまり、PictureBox の描画は PictureBox の Paint イベントで行います。
また、描画に使用する Graphics はイベント引数 PaintEventArgs の Graphics プロパティを使用してください。CreateGraphics メソッドは通常使用しません。 |
|
投稿日時: 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-25 10:23
検討違いならごめんなさい。
最後にtableLayoutPanel1.Invalidate() でだめですか? |
|
投稿日時: 2008-01-25 11:00
ありがとうございます。
もう一度、新しいプロジェクトを作って、Hongliangさんに教えていただいた方法で シンプルなプログラムを作ってやってみたら、再描画されました。 あちこち、テストしててプロパティをいじってしまっていたようです。 Invalidateも、今後のために調べてみます。 |
1