C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: TableLayoutPanel.Paintが何度も実行され


(過去ログ 170 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■97909 / inTopicNo.1)  TableLayoutPanel.Paintが何度も実行され
  
□投稿者/ ピッグ (1回)-(2021/08/06(Fri) 20:15:57)

分類:[.NET 全般] 

VB.NET2015を使用しております。

TableLayoutPanel.Paintを使って背景色の一部を変更したいのですが、



    Private Sub TableLayoutPanel1_Paint(ByVal sender As System.Object, ByVal e As PaintEventArgs) Handles TableLayoutPanel1.Paint

        e.Graphics.FillRectangle(Brushes.Red, Rect)


    End Sub

のようにして実行すると、
なぜか一回だけでなく複数回実行されてしまいます。

恐らくセルの個数分実行されているのではないかと予想します。
一度だけ実行するにはどのようにしたら良いですか?






引用返信 編集キー/
■97910 / inTopicNo.2)  Re[1]: TableLayoutPanel.Paintが何度も実行され
□投稿者/ Hongliang (1185回)-(2021/08/06(Fri) 20:49:13)
試した感じではセルの個数回呼ばれるというわけではなさそうに見えます。
セル3x4でも起動時には2回しか呼び出されませんでした。

もともとPaintイベントは様々な理由により色々なタイミングで度々呼び出されるものです。
Paintイベントのイベントハンドラは、いつ呼び出されても、何度呼び出されても大丈夫なように実装する必要があります。
引用返信 編集キー/
■97911 / inTopicNo.3)  Re[2]: TableLayoutPanel.Paintが何度も実行され
□投稿者/ ピッグ (2回)-(2021/08/06(Fri) 21:04:12)
No97910 (Hongliang さん) に返信

セルの中が空の場合には、実行されないのですが
中にコントロールが入っていると
セルの数+1回 だけPaintが実行されるようです。

背景を描画するのに
それらの中の一度だけを拾いたいのですが
どのようにすれば良いですか?

引用返信 編集キー/
■97912 / inTopicNo.4)  Re[3]: TableLayoutPanel.Paintが何度も実行され
□投稿者/ Hongliang (1186回)-(2021/08/06(Fri) 21:20:23)
おお、LabelだとそんなことなかったのですがTextBoxだと確かにそんな感じになりますね。
とはいえPaintイベントでは毎回律儀に処理を実行する必要があるのは変わりません。
ただ、TableLaytoutPanelはCellPaintイベントが公開されているので、Paintイベントの代わりにこちらを使えば多少はましかもしれません。
なお呼び出される回数自体はPaintと同じのようです。
引用返信 編集キー/
■97913 / inTopicNo.5)  Re[4]: TableLayoutPanel.Paintが何度も実行され
□投稿者/ ピッグ (5回)-(2021/08/07(Sat) 08:17:25)
いま、2×2のTableLayoutPanelのそれぞれのセル内に
4×4のTableLayoutPanelが入っており、
全てのセルにコントロールが入っています。


そして、4×4のTableLayoutPanelの一部の背景色を変えたいと考えています。


2×2のTableLayoutPanelのCellPaintイベントや、Paintイベントを使うと
4×4のTableLayoutPanelが描画されるたびに呼ばれることになり
非効率だと思います。

そのため、
4×4のTableLayoutPanelのCellPaintイベントを使って、
ある一つのセルから呼ばれた時のみ実行すれば
一度で済むかと思ったのですが、
なぜか、何度も呼ばれてしまうようです。


If e.Column = 0 AndAlso e.Row = 0 Then

TableLayoutPanel1.ClientRectangle

End If

で確認しているのですが、
ClientRectangleは同じなので、なぜか同じセルが何度も描画されてしまうようです。

これってなぜなのでしょうか?

どうすれば一度だけ描画することができますか?

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -