- ベストアンサー
VB PictureBoxの描画範囲を拡大して描画させる方法
- VisualStudio2010のVBにて、ピクチャーボックスの範囲をプログラム中で大きくしても描画がされない場合の対処方法です。
- ピクチャーボックスのサイズを大きくした場合、拡大した範囲に描画するには特定の手順が必要です。
- 具体的な手順としては、グラフィックオブジェクトを取得し、座標を指定して図形を描画することで拡大後の範囲にも描画することができます。
- みんなの回答 (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)
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
こんばんは 私はここのサイトで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つ目の図形も描画するという方法はありますでしょうか?
- redfox63
- ベストアンサー率71% (1325/1856)
基本的に 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回目に押した時にはピクチャーボックスの横幅が広がって、そこに描画をさせたいという場合はどうしたらいいでしょうか?
お礼
ありがとうございます。 2回目のボタンを押した時に、2つ目の図形と一緒に1つ目の図形も描画すればいいのですね。 解決できました。