■59213 / inTopicNo.15) |
Re[12]: Form, TabPagの再描画などについてお教え下さい。 |
□投稿者/ mine (16回)-(2011/05/19(Thu) 12:01:30)
|
■No59204 (よねKEN さん) に返信
よねKEN さん度々のご指導有り難う御座います。
> どのような方法で実装しているかの説明もなく、
> 問題を確認できるソースコードの提示もない状況では何とも言えません。
>
> どのような方法で…に関して言うと
> (1)「TabPageに表示させる」というのがどういうことなのかももう少し詳しい説明が必要
>
> なぜかと言うと、TabPageに対して直接描画するような実装はあまりしないので、
> TabPageに直接描画しているのだろうか?あるいは、TabPageの上に何かコントロールを配置して、
> そこに描画しているのだろうか?Scrollする、というのはTabPageのAutoScroll系の機能を使って実装しているのか?
> などいくつもの疑問がわくからです。
>
> (2) 「PictureBoxに表示させればScrollでも」というのがどういうことなのかももう少し詳しい説明が必要
> PictureBoxにスクロールさせる機能はないはずなので、何かのスクロール機能を使っているはずですが、
> 何をどうやっているのだろう?
>
> 上記のような点も踏まえて、言葉でわかりやすく説明するのは簡単ではないので、
> 「問題を確認できるソースコードの提示」があるとよいですね。
> 実際に今作っているコードではなく、今作っているコードから問題の再現に関係のない部分を省いて行って、
> 問題を確認できる範囲で最小限のソースコードにした上で、その全部を提示するのがお勧めです。
ソースコードの提示をしないで質問しまして申し訳ありません。
色々試行錯誤中で提示出来るようなちゃんとしたコードが出来ていなかったので失礼しました。
その後修正を行い、Invalidateも含めたコードを完成しました。
FormにはPictureBox1,これをScrollさせるためのVScrollBar1、TabPage1(AutoScroll=True), 文字や図形を表示させるための
Button1が配置してあります。 コードは次の通りです。
Public Class Form1
' 描画対象の多角形の点
Private points As Point()
'Invalidate前に描画されないようにするためのFlag
Dim flgShow As Boolean = False
Dim Fonts As New Font("MS 明朝", 12)
'************************************************************
' PictureBox1への描画
'************************************************************
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
If flgShow = True Then
Call DrawPic(e.Graphics)
End If
End Sub
'************************************************************
' TabPage1への描画
'************************************************************
Private Sub TabPage1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles TabPage1.Paint
If flgShow = True Then
Call DrawPic(e.Graphics)
End If
End Sub
'************************************************************
' PictureBox1、TabPage1への描画コード
'************************************************************
Private Sub DrawPic(ByVal g As Graphics)
Dim Fonts As New Font("MS 明朝", 12)
g.DrawString("AAAAAAAAA", Font, Brushes.Black, 100, 200)
g.DrawString("BBBBBBBBB", Font, Brushes.Black, 100, 230)
points = New Point() {New Point(90, 10), New Point(20, 180), _
New Point(190, 50), New Point(10, 70), _
New Point(200, 180)}
g.FillPolygon(Brushes.Black, points, System.Drawing.Drawing2D.FillMode.Alternate)
End Sub
'************************************************************
' PictureBox1のVScroll
'************************************************************
Private Sub VScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles VScrollBar1.Scroll
VScrollBar1.Maximum = 1000
PictureBox1.Top = VScrollBar1.Value
End Sub
'************************************************************
' Button1_Clickによる描画の実行
'************************************************************
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
flgShow = True
PictureBox1.Invalidate()
TabPage1.Invalidate()
End Sub
End Class
これでTabPage1をScrollすると消えること以外は問題なく動作しています。
ご指導頂ければ有り難いです。 よろしくお願い申し上げます。
|
|