VisualStudio2010のVBにて、ピクチャーボックスの範囲をプログラム中で大きくして描画をさせたいのですが、ピクチャーボックスのサイズを大きくしても、大きくした範囲には描画がされません。
やり方は↓の方法です。
まず、formにボタンとピクチャーボックスを300×200で配置して、
http://homepage1.nifty.com/rucio/main/dotnet/Sam …
↑のページで書かれてた方法でグラフィックを再描画させています。
Public Class Form1
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim g As Graphics = AutoGraphics(PictureBox1)
PictureBox1.Width = 400
g.FillRectangle(Brushes.Black, 100, 100, 10, 10) '1つ目の図形
g.FillRectangle(Brushes.Black, 350, 100, 10, 10) '2つ目の図形
g.Dispose()
End Sub
Public Function AutoGraphics(ByVal picSource As PictureBox) As Graphics
If picSource.Image Is Nothing Then
picSource.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
End If
Return Graphics.FromImage(picSource.Image)
End Function
End Class
これを実行すると、1つ目の図形は描画されていますが、拡大した範囲にある2つ目の図形は描画されていません。
ピクチャーボックスの範囲を大きくした所にも描画をさせたいと思っています。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
お返事有難うございます。
修正してみましたので参考にしてください。
1.1回目のボタンクリックで画像2(relief001の画像です)のように表示します。
但しrelief001 さんの補足情報をから推測すると、1回目のボタンクリックではPictureBoxの大きさは小さいままだと思いますので、PictureBoxを大きくする動作はしていません。
2.2回目のボタンクリックで画像3(relief001の画像です)のように表示します。
PictureBoxを大きくします。
「1つ目の図形を消さずに、PictureBox1のサイズを大きくして、2つ目の図形も描画します」
3.3回目のボタンクリックで画像1(relief001の画像です)のように表示します。
PictureBoxを初期の何も無い状態に戻します。
コードを変更しました。
Public Class Form1
Dim i As Integer
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
i += 1
Dim g As Graphics = PictureBox1.CreateGraphics
'1回目のボタンクリックで画像2のように表示します
If i = 1 Then
g.FillRectangle(Brushes.Black, 100, 100, 10, 10) '1つ目の図形
'2回目のボタンクリックで画像3のように表示します
ElseIf i = 2 Then
Dim gr As Graphics = AutoGraphics(PictureBox1)
gr.FillRectangle(Brushes.Black, 100, 100, 10, 10) '1つ目の図形
gr.FillRectangle(Brushes.Black, 350, 100, 10, 10) '2つ目の図形
gr.Dispose()
End If
'3回目のボタンクリックで画像1のように表示します
'PictureBoxを初期の何も無い状態に戻す必要の無い場合は下記のコードは消してください
If i > 2 Then
i = 0
If Not (PictureBox1.Image Is Nothing) Then
' PictureBox1を初期の状態にします
PictureBox1.Size = New Size(200, 200) 'ここの値はrelief001 さんの目的の値にしてください。
PictureBox1.Image.Dispose()
PictureBox1.Image = Nothing
End If
End If
g.Dispose()
End Sub
Public Function AutoGraphics(ByVal picSource As PictureBox) As Graphics
If picSource.Image Is Nothing Then
'PictureBox1のSizeをNewする
PictureBox1.Size = New Size(400, PictureBox1.Height)
picSource.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
End If
Return Graphics.FromImage(picSource.Image)
End Function
End Class
Dim g As Graphics = PictureBox1.CreateGraphicsはIf分の中に入れてもいいですね。
ありがとうございます。
2回目のボタンを押した時に、2つ目の図形と一緒に1つ目の図形も描画すればいいのですね。
解決できました。
No.2
- 回答日時:
こんばんは
私はここのサイトでVBの学習をしました。
わかりやすいサイトですが、掲示板は喧嘩が多いので利用していません。
FunctionのAutoGraphicsメソッドでPictureBox1のサイズがBitmapされますので、AutoGraphics内でPictureBox1のSizeをNewすればいいと思います。
サンプルです
Public Class Form1
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim g As Graphics = AutoGraphics(PictureBox1)
g.FillRectangle(Brushes.Black, 100, 100, 10, 10) '1つ目の図形
g.FillRectangle(Brushes.Black, 350, 100, 10, 10) '2つ目の図形
g.Dispose()
End Sub
Public Function AutoGraphics(ByVal picSource As PictureBox) As Graphics
If picSource.Image Is Nothing Then
'PictureBox1のSizeをNewする
PictureBox1.Size = New Size(400, PictureBox1.Height)
picSource.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
End If
Return Graphics.FromImage(picSource.Image)
End Function
End Class
間違っていましたらごめんなさい。
すいません。
No.1の回答に付けた補足の通り、1つ目の図形と2つ目の図形の描画は別々にやりたいと思っています。
なので、2回目に押した時にAutoGraphics内のSizeをNewしてしまうと、1つ目の図形が消えてしまいます。
1つ目の図形を消さずに、PictureBox1のサイズを大きくして、2つ目の図形も描画するという方法はありますでしょうか?
No.1
- 回答日時:
基本的に Graphics.FromImageで生成したGraphicsオブジェクトの描画範囲は
FromImageの引数の Imageの大きさになります
AutoGraphicsが呼ばれた時点では300x200なので 350,100へ描画命令をしても 範囲外なので描画自体されません
呼び出し順を
PictureBox1.Width = 400
dim g as Graphics = AutoGraphics(PictureBox1)
といった具合するといいと思います
すいません。
質問の仕方が悪かったため、少し変えさせて頂きます。
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
i = i + 1
Dim g As Graphics = AutoGraphics(PictureBox1)
If i = 1 Then
g.FillRectangle(Brushes.Black, 100, 100, 10, 10) '1つ目の図形
End If
If i = 2 Then
PictureBox1.Width = 400
g.FillRectangle(Brushes.Black, 350, 100, 10, 10) '2つ目の図形
End If
g.Dispose()
End Sub
上記のように、1回目にボタンを押すと1つ目の図形が表示されて、2回目に押した時にはピクチャーボックスの横幅が広がって、そこに描画をさせたいという場合はどうしたらいいでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
for文の実行速度を遅くしたいの...
-
ListBoxで改行したい
-
ボタンの更新速度について
-
給紙トレイをダイアログを使わ...
-
PowerPoint の VBA
-
VC;;6.0のMFCで線を簡単に引け...
-
C# シューティングゲーム ...
-
scilabでのグラフ描画時の軸設定
-
Pythonにおける物理のシミュレ...
-
DrawLineで引いた線が消えてし...
-
色を合成するには
-
BCB5:Canvas->FrameRectで描画...
-
パソコンへの「Dropbox...
-
worksheetFunctionクラスのVloo...
-
ユーザーフォームを表示中にシ...
-
VBA シートのボタン名を変更し...
-
VBAがブレークモードになっ...
-
VBA(エクセル)で自動的にボタン...
-
ウォッチ式の文字数制限について
-
ユーザーフォームに別シートか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxで改行したい
-
for文の実行速度を遅くしたいの...
-
PowerPoint の VBA
-
c言語 ちらつき
-
VB.NETでグラフィックを描くと...
-
C#を用いて描画する四角形の角...
-
win32api複数のタイマーを同時...
-
画面に絵を出す方法
-
給紙トレイをダイアログを使わ...
-
C#で壁の当たり判定と自キャラ...
-
花火のアルゴリズム
-
円の頂点の求め方を知りたいです。
-
C# DrawImage 物理サイズでな...
-
VB.netで図形描画ができません^^;
-
画面の再描画について
-
エクセルのレーダーチャート 0...
-
リアルタイムで再描画
-
.NETのPictureBoxでウインドウ...
-
Word 描画オブジェクトを削除...
-
vb6のTEXTBOX
おすすめ情報