- PR -

ユーザーコントロール(クラス)越しにDrawEllipseで円を描くには・・・

1
投稿者投稿内容
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2008-12-03 09:28
 いつも大変お世話になっております。
VB2005で下記プログラムにおきまして

'Aこれは成功する

の箇所のように直接UserControl1.vb内のボタンクリックイベントでは円が描かれるのに、クラスのインスタンス生成元のフォームからメソッドで呼び出して描こうとしても何も描かれません。。

 どのようにすればユーザーコントロール(クラス)越しにDrawEllipseで円を描くことができますでしょうか。
何卒ご教授賜りますようお願い申し上げます。



コード:

[WindowsApplication1]
 ├ Form1.vb
 └ UserControl1.vb

[Form1.vb]**************************************
UserControl11 が一つだけ貼り付いています。

Public Class Form1

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.UserControl11.DrawEl()  '@ここでは何も描かれない
    End Sub
End Class

[UserControl1.vb]**************************************
PictureBox1とButton1以外は貼り付いていません。

Public Class UserControl1
    Public Sub DrawEl()
        Dim g As Graphics = Me.PictureBox1.CreateGraphics()
        g.DrawEllipse(Pens.Black, 10, 10, 50, 50)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim g As Graphics = Me.PictureBox1.CreateGraphics()
        g.DrawEllipse(Pens.Black, 20, 20, 50, 50)    'Aこれは成功する
    End Sub
End Class


なかむら
ベテラン
会議室デビュー日: 2008/11/11
投稿数: 67
お住まい・勤務地: 福岡
投稿日時: 2008-12-03 10:46
過去のトピックが参考になりますよ。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32681&forum=7

_________________
Nakamura Blog
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2008-12-03 14:50
 ご教授ありがとうございます。

VB6では外部から定期的に受信する座標データ(ただの文字列)をPictureBoxに描いて折れ線グラフを書いていくアプリを作っていましたが、上に別のフォームを一回乗せても描画したもが消えることはありませんでした。。

VB2005で同じことをやろうとすると、これまで受信したデータを全て保存しておいて、

コード:
    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles PictureBox1.Paint
        CreateGraphic(e.Graphics)
    End Sub



のようにPaintイベントの度に最初から全て描画しなおさないといけないのでしょうか。悲しいです。。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-12-03 15:31
引用:

のようにPaintイベントの度に最初から全て描画しなおさないといけないのでしょうか。悲しいです。。



・必要な大きさのビットマップを作成
・PictureBox.Image に↑を設定
・Graphics.FromImage (PictureBox.Image) で Graphics オブジェクトを取得
・↑の Graphics に描画

とすればいいです。

PictureBox は「画像を表示するためのコントロール」であって、「絵を描画する場所」ではありません。

自前で描画するなら、PictureBox でも Panel でも同じことになってしまいます。
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2008-12-03 16:33
ご教授ありがとうございます。

なるほど、そうだったのですね!
ご教示いただいた方法でトライしてみたいと思います。

ちなみに

>VB6では外部から定期的に受信する座標データ(ただの文字列)をPictureBoxに描いて折れ線グラフを・・・

のようなものを描く場所として最適な場所はどこになりますでしょうか。。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-12-03 17:31
引用:

>VB6では外部から定期的に受信する座標データ(ただの文字列)をPictureBoxに描いて折れ線グラフを・・・

のようなものを描く場所として最適な場所はどこになりますでしょうか。。



「描く場所」は Bitmap を元に作成した Graphics です。

Bitmap を表示する方法はさまざまありますが、手軽に、ということなら PictureBox でいいと思います。
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2008-12-03 19:03
なるほどです。

教えていただいたとおりで再描画もうまくいきました!
貴重なお時間をいただき、本当にありがとうございました。

解決です!
1

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