Windows7 VB2010でパネルの上にプログラムからラベルの配列を設定して
グラフ描画をさせているのですが、初回は問題なく描画しますが、
データーを更新させても反映されません、何か手続きが抜けていると
思いますのでご教示お願いいたします。
#Region "10分流量積算グラフ描画"
Private Sub WriteGrif_10()
Dim j As Integer
Dim myBuff As Integer
Dim myY_Scale As Single
j = 0
WriteGrif_cls()
myY_Scale = 660 / 550
For i = 1 To 144
myBuff = Val(glDM(6100 + i)) * myY_Scale
glG_Fuel(i).size = New Size(6, myBuff)
glG_Fuel(i).location = New Point(j, 660 - myBuff) '------棒グラフの高さ
glG_Fuel(i).autosize = False
glG_Fuel(i).text = ""
glG_Fuel(i).backcolor = Color.Cyan
glG_Fuel(i).visible = True
Me.PictureBox1.Controls.Add(glG_Fuel(i)) '----Panelにラベルを載せる
j = j + 9
Next
Me.PictureBox1.BringToFront() '----最前面に表示
Me.PictureBox1.Visible = True
End Sub
#End Region
> パネルの上にプログラムからラベルの配列を設定して
glG_Fuel() というのが「Label の配列」なのだとしたら、
「Panel の上」ではなく「PictureBox の上」に
配置されているように見えます。
しかしグラフ表示なら、Label のサイズで表現するよりも、
Grapchis クラスに描画処理を記述するか、あるいは
グラフ描画のための Chart コントロールを使った方が良い気がします。
> Dim j As Integer
j += 9 な処理が組み込まれていますが、一度も使われていないような…?
> glG_Fuel(i).size = New Size(6, myBuff)
glG_Fuel(i) のインスタンスは、どのタイミングで生成されていますか?
あらかじめ(Form の Load などで)生成されているものを
使い回しているのだとしたら、AutoSize 指定や Controls.Add は
最初の一回だけで良く、何度もやりなおす必要は無いはずです。
それとも WriteGrif_cls 等で、
毎回、glG_Fuel(i) = New Label() などとして
新規に作り直しているのでしょうか。
だとしたら、それ以前に表示していた Label を
PictureBox 上から取り除いた上で、Dispose していますか?
古い物を取り除かない場合は、処理を繰り返すたびに
どんどん、Label の数が増える事になりますよね。
> データーを更新させても反映されません、
・データ更新後に、グラフ描画処理が呼ばれているかどうか、確認されましたか?
・PictureBox1.Controls.Count で返されるコントロール数は、想定どおりですか?
・Label の座標やサイズは想定どおりですか?
・同じ座標に複数の Label が重なっていませんか? 重なって良いのなら、
そのうちのどちらが手前になるべきか、正しく管理されていますか?
・イベント処理(Button の Click など)の中に、長いループ処理を
記述していないでしょうか。処理がアイドル状態にならないと、
コントロールの操作結果は画面に反映されませんので、多くの場合、
操作結果が表示されるのは、イベント処理が End Sub を通過した後です。
ツイート | ![]() |