アプリ版:「スタンプのみでお礼する」機能のリリースについて

グラフィック描画ですが、引数を持たないサブルーチンプロシージャ(固定的な
目盛り等)は、PictureBox_paint(***イベントプロシージャ内に記述すればグラフィック描画ができます(e.Graphicsでグラフィックスオブジェクトを取得できる為)が、
X、Y座標を引数としたサブルーチンプロシージャを作り、その中でLineDraw(*****で描画させたい場合サブルーチンプロシージャ内に dim g As Graphics=pictureBox1.CreateGraphics()
でグラフィックオブジェクトを生成しても
描画できないのですがどのようにすれば解決できるでしょうか(イメージがわかり難いかもしれませんのでサンプルを書きました)
よろしくお願いします
(1)private sub pictureBox1_paint(Byval sender as Object, Byval e as
system******
e.Graphics.DrawLine(****** (これは描画できる)
End Sub

(2)private sub zahyou() ' 座標を生成するサブルーチンプロシージャ
dim i as integer
for i=0 to 10
hyouji( i , i*5 )
End Sub


private sub hyouji( x as integer, y as integer) ’直線を引くサブルーチンプロシージャ
dim g As Graphics=pictureBox1.CreateGraphics()
g.DrawLine(***,x,y**** (これは描画できない)

A 回答 (3件)

dim g As ~


をSubの外に宣言してみては如何でしょうか?

Private g As Graphics = Graphics.FromImage(PictureBox1.Image)
Private p As New Pen(Color.Black)



private sub hyouji(***)
g.DrawLine(p, x1, y1, x2, y2)
End sub

…はずしていたら、すいません

この回答への補足

お返事遅れましてすみませんでした
回答有難うございます。
dim g as をプロシージャの外に出すとコンパイルエラーになってしまいました
あとPrivate g As Graphics = Graphics.FromImage(PictureBox1.Image)
のpraivate部分が引っかかってしまうのです。
記述方法がちがっていましたら、御指摘ください
よろしくお願い致します

補足日時:2002/09/13 15:43
    • good
    • 0

'フォームにPictureBox1とButton1を貼り付けて



'フォーム内の共通obj宣言
Private g As Graphics

'フォームロードに
g = PictureBox1.CreateGraphics

'ボタンクリック
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 kaku()
End Sub

'こんなSubを作成して
Private Sub kaku()
 Dim I As Integer
 For I = 1 To 40
  keisen(I * 10)
 Next
End Sub

'繰り返される部分
Private Sub keisen(ByVal Px As Integer)
 g.DrawLine(Pens.Pink, Px, 0, Px, PictureBox1.Height)
End Sub

グラフの罫線はこんな処理で描きます

このままですと、ウインドウの裏に隠れると消えてしまいますので
346706番の方法とあわせれば、書けると思います。

スイマセン↓これは大間違いでした
Private g As Graphics = Graphics.FromImage(PictureBox1.Image)

この回答への補足

すみません、前回教えていただいた方法でグラフィックが書けたのですが、
dim g as graphics=・・・・
PictureBox1.Image・・・・
を複数のSubプロシージャに書くと、先のプロシージャで表示されていたグラフィックが消えてしまいます。
例えば、座標を書くプロシージャとグラフデータを書くプロシージャと分けていた
場合、座標プロシージャを呼んでグラフデータプロシージャを呼ぶと座標が消えます。宣言の場所方法が違うのでしょうか
よろしくお願い致します

補足日時:2002/09/15 23:24
    • good
    • 0
この回答へのお礼

この度は、大変お世話になりました。
前回教えていただいた方法と組み合わせてやってみます
有難うございました。
ちなみに346706番とは、前回のお返事分でしょうか?

お礼日時:2002/09/13 23:03

返信遅れまして申し訳御座いません



フォーム=frmGurafu
ピクチャ=Picture1


開発環境の設定にもよりますが、コードのイメージは以下のようになります


田 Windows フォーム デザイナで生成されたコード


│Private g As Graphics

日Private Sub frmGurafu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
│ PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
│ g = Graphics.FromImage(PictureBox1.Image)
│'別のSub
│ sakugatate() '縦を描く
│ sakugayoko() '横を描く
│End Sub

日Sub sakugatate()
│ Dim i As Integer
│ For i = 1 To 5
│  g.DrawLine(Pens.Pink, i * 20, 0, i * 20, 100)
│ Next
│End Sub

日Sub sakugayoko()
│ Dim i As Integer
│ For i = 1 To 5
│  g.DrawLine(Pens.Pink, 0, i * 20, 100, i * 20)
│ Next
│End Sub

これで、どうでしょうか?
    • good
    • 0
この回答へのお礼

お返事いただきまして
さっそく試して上手くいきました。
とても親切に教えていただいて有難うございました。

お礼日時:2002/09/27 04:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!