- ベストアンサー
図の削除直後の再描画
- VB2008 Express Edditionを使って、写真画像に直線等の図形を重ねるプログラムを作っています。
- 図形の削除と再描画を同じボタンに割り当てて行うと、一瞬図形が表示されてすぐに消えてしまいます。
- 回避するためには、図形の削除と再描画を別々のボタンに割り当てて行う必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
関連するQ&A
- 再描画すると消える
ピクチャーボックスに以下のような図形を描画するプログラムを書きました。 (PictureBox1のBackGroundImageには最初から適当なイメージが設定されています。) Dim Grp As Graphics Grp = Graphics.FromImage(Me.PictureBox1.BackgroundImage) Grp.FillEllipse(New SolidBrush(PaintSelectedColor), e.X - Me.PictureBox1.Location.X - PaintHutosa \ 2, e.Y - Me.PictureBox1.Location.Y - PaintHutosa \ 2, PaintHutosa, PaintHutosa) Grp.Dispose() Me.PictureBox1.Refresh() しかし、これを実行すると再描画されたときに消えてしまいます。 消えてしまう原因と、消えないようにする対処法をご伝授ください。
- 締切済み
- Visual Basic
- C#を用いて描画する四角形の角を丸くする方法
教えて下さい。 書籍やインターネットで調べているのですが、四角形の角を丸く(ワードの図形描画にある「角丸四角」です。)したり面取り(日曜大工で角を落とすのとおなじ)にはどのようにしたら良いのでしょうか? 多角形は参考するのがあったのですが、「角」の加工について調べたのですが見当たりませんでした。 【四角形描画】 //Graphicsオブジェクトの作成 Graphics g = PictureBox1.CreateGraphics(); //Penオブジェクトの作成(幅1の黒色) //(この場合はPenを作成せずに、Pens.Blackを使っても良い) Pen p = new Pen(Color.Black, 1); //(10,20,100,80)の長方形を描く g.DrawRectangle(p, 10, 20, 100, 80); //リソースを開放する p.Dispose(); g.Dispose(); 【四角形の一箇所の角を丸くする】 →四角形の角の描画が残ってしまう。 //Graphicsオブジェクトの作成 Graphics g = PictureBox1.CreateGraphics(); //位置(10, 20)に100x80の四角を赤色で描く g.DrawRectangle(Pens.Red, 10, 20, 100, 80); //先に描いた四角に外接する楕円の一部 //(開始角度 0度、スイープ角度 90度)を黒で描く g.DrawArc(Pens.Black, 10, 20, 100, 80, 0, 90); //リソースを開放する g.Dispose();
- ベストアンサー
- C・C++・C#
- VB.netで図形描画ができません^^;
初心者質問で申し訳ないです。 VB.net(Visual Studio 2005)で図形描画を行っています。 ボタン押下で図形(四角形)を描画する方法は理解できたのですが 起動時に表示するほうほうが分かりません。 どなたか教えてもらえないでしょうか? Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim g As Graphics g = PictureBox1.CreateGraphics() g.DrawRectangle(Pens.Black, 100, 50, 100, 100) g.Dispose() End Sub 上記のようにLoadから読み込むようにしましたが描画されませんでした。 よろしくお願い致します><
- 締切済み
- Visual Basic
- VB PictureBoxの描画範囲
VisualStudio2010のVBにて、ピクチャーボックスの範囲をプログラム中で大きくして描画をさせたいのですが、ピクチャーボックスのサイズを大きくしても、大きくした範囲には描画がされません。 やり方は↓の方法です。 まず、formにボタンとピクチャーボックスを300×200で配置して、 http://homepage1.nifty.com/rucio/main/dotnet/Samples/dnSampleKeepImage.htm ↑のページで書かれてた方法でグラフィックを再描画させています。 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つ目の図形は描画されていません。 ピクチャーボックスの範囲を大きくした所にも描画をさせたいと思っています。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- VB .net Form_Load時、または関数内でPictureBoxにライン描画を行ないたい。
Form上にPictureBox,Buttonを配置して、Botton_Click処理時にPictureBox上へのライン描画は Dim g As Graphics = PictureBox1.CreateGraphics g.DrawLine(Pens.Red, 0, 0, 100, 200) g,Dispose() にて行なえましたが、同じような描画を Form_Load時に上記の処理を入れても全く描画されません。Button_Clickイベントのように1クッション置かないと実現できないのでしょうか? Form_Load時、関数内などで周期的にライン描画を 行なってやりたいのですが、どなたか解決方法をご存知の方がいましたら回答の程よろしくお願いいたします。
- 締切済み
- Visual Basic
- VB2005 リソースの開放
VBは始めたばかりで、妙な質問ですが。 CAD等で直線描画中のラバーライン(始点は決定で終点が未定)の処理ですが Private Sub MouseMoveイベント Dim g As Graphics = PictureBox1.CreateGraphics() If ラバーライン描画中 Then ラバーライン描画処理 End If g.Dispose() End Sub Dim g As Graphics = PictureBox1.CreateGraphics()とg.Dispose()の記述はこのSubの中に書かなくてはいけないのですか? 描画処理中リソースの開放g.Dispose()するのは効率よさそうではないみたいで。 終点が決定してから開放の方が気分的にいいのですが。 なにかもっといい方法があったら御指南お願いします。
- ベストアンサー
- Visual Basic
- pictureboxの画像を削除するには?
Visual C# 2008を使用しています。 ボタンを押すとpictureboxに画像が表示されるプログラムを作成しました。 今度は、その表示された画像をクリックし、別のボタンを押すことでその画像が削除できるようにしたいと思っているのですが、うまくプログラムできません。 誰か教えていただけないでしょうか? ソースコードは以下のようになっています。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace algorithm { public partial class Form1 : Form { int space = 10; public Form1() { InitializeComponent(); } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { } private void kihonsyori_Click(object sender, EventArgs e) { if (this.pictureBox1.Image == null) { Bitmap img = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\algorithm\algorithm\picture\基本処理箱.png"); Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img, 0, space, 0.4F * img.Width, 0.3F * img.Height); space += 50; img.Dispose(); g.Dispose(); } else { this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = null; } } private void groupBox1_Enter(object sender, EventArgs e) { } private void pictureBox1_Click(object sender, EventArgs e) { } private void hanpuku_Click(object sender, EventArgs e) { if (this.pictureBox1.Image == null) { Bitmap img = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\algorithm\algorithm\picture\反復箱.png"); Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img, 0, space, 0.4F * img.Width, 0.3F * img.Height); space += 80; img.Dispose(); g.Dispose(); } else { this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = null; } } private void sentaku_Click(object sender, EventArgs e) { if (this.pictureBox1.Image == null) { Bitmap img = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\algorithm\algorithm\picture\選択箱.png"); Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img, 0, space, 0.4F * img.Width, 0.3F * img.Height); space += 80; img.Dispose(); g.Dispose(); } else { this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = null; } } private void sakujyo_Click(object sender, EventArgs e) { pictureBox1.Image = null; space = 0; } } }
- 締切済み
- C・C++・C#
- VB.NETでPictureBoxへの描画について
VB.NETでPictureBoxへの描画について PictureBoxに画像を表示し、余白部分を含めて、マウスで描画できる処理を作成しているのですが、 どうも上手くいかない為、皆さんの知恵をお借りしたいと思い質問させて頂きました。 まず、880×560のPictureBoxを用意し、その中に、600×480の画像を埋め込んでいます。 そのPictureBoxの中で、画像以外の部分(余白)にもマウスで線等を書きたいのです。 画像のみに描く場合は上手くいくのですが、余白を含めると上手くいかなくなってしまい、 困っております。 プログラムの違いは以下の箇所のみです。2の場合は上手くいきます。 1.PictureBox全体に描画する(画像も含め) Dim g As Graphics = PictureBox1.CreateGraphics 2.画像のみに描画する Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) ちなみに、マウスではなく、ボタンクリック時に描画した時は、1の場合でも上手くいきます。 お手数ですが、ご回答の程、よろしくお願いします。
- ベストアンサー
- Visual Basic
- C# フォームサイズ変更で消えない描画の方法
前略 ・C#の初心者です。 ・ボタンをクリックして作成した描画がウィンドウサイズを小さくして、再び元のサイズにした場合再描画されずに消えたまになってしまいます。消えない描画の方法をおしえてください。 ・下記はボタンをクリックするとピクチャーボックスに円を描くプログラムです。これだとウィンドウサイズを小さくしたあと、再びウィンドウを大きくしたとき円は消えたままです。 private void button1_Click(object sender, EventArgs e) { Graphics g = pictureBox1.CreateGraphics(); g.DrawEllipse(Pens.Black, 0, 0, 100, 100); } ・また下記はピクチャーボックスのペイントイベントを用いて円を描いたもので、フォームのサイズを小さくして円をかくした後フォームサイズを元にもどしても円は自動的に再描画されますが、プログラムが起動すると円が描画されてしまうプログラムです。 private void pictureBox1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.DrawEllipse(Pens.Black, 0, 0, 100, 100); } ★ ボタンをクリックすると円が描画され、ウィンドウを小さくして円を隠し、ウィンドウサイズをもとの大きさにもどした時自動的に再描画する方法をおしえてください。 以上、よろしくお願いします
- ベストアンサー
- C・C++・C#
- 描画した後での塗りるぶし VB
丸を描画後にColorDialogで指定された色で丸の範囲だけ塗りつぶすというプログラムを作っているのですが、なかなかうまくいきません。 丸は、このように描画するようにしています。 Private Sub PictureBox1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove If (e.Button = MouseButtons.Left) Then Dim g As Graphics = PictureBox1.CreateGraphics() Dim ePos As MouseEventArgs PictureBox1.Refresh() g.DrawEllipse(New Pen(Color.Black, 2), Spos.X, Spos.Y, e.X - Spos.X, e.Y - Spos.Y) ePos = e g.Dispose() End If End Sub Private Sub PictureBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown If (e.Button = System.Windows.Forms.MouseButtons.Left) Then Spos = e End If End Sub VB2010を使っています。 どなたか教えていただけるとありがたいです。よろしくお願いします。
- 締切済み
- Visual Basic
お礼
詳細な調査、ありがとうございました。 こちらでも色々試してみたのですが、ちらつきは再描画に関係なく Dim gp As Graphics = PictureBox1.CreateGraphics() gp.Clear(Color.Transparent) PictureBox1.Refresh() gp.Dispose() としただけで発生しました。 どうも gp.Clear(Color.Transparent) が、透過色ではなく真っ黒に塗り潰しているようです。 試しに gp.Clear(Color.Black) に書き換えても、見た目には全く変わりません。VBのバグ? 結局、 PictureBox1.Refresh() こそが(一時的に描いた)図形を消去していることが分かり、 図形の消去をこの1文だけにすることで、ちらつきもなくなりました。 本筋ではないかもしれませんが、とりあえずやりたいことは問題なく できるようになりました。 どうもありがとうございました。