• 締切済み

[続編] pictureBoxそのものの位置を移動させたい -- 残像取り除きたい

以前、『pictureBoxそのものの位置を移動させたい』というタイトルで質問させていただきました。変数iを用意して、iの値が変わるたびにpictureBoxそのものが動いているように見せかけるというもの。これに関しては、zhaojieさまから教えていただき、 Me.PictureBox1.Location = New System.Drawing.Point(i, j) で実現できました。しかしながら、実際に描画させると残像が残ってしまうようです。これをどうにかしたい。添付資料上部は初期状態で、右下に動かしたいピクチャーボックスがあります。これにある処理(グラフをかかせる)をさせながらピクチャーボックスを移動させたのが下部になります。ピクチャーボックスが左に移動しているのがわかると思います。ただ、軌跡が残像として残ってしまいます。これをなくす対処方法があれば教えてください。

みんなの回答

回答No.1

動かしている PictureBox の下にあるグラフの再描画をすればいいのでは?

kimbauer
質問者

お礼

おっしゃるとおりでした。所望のことができるようになりました。ありがとうございます。

関連するQ&A

  • pictureBoxそのものの位置を移動させたい

    pictureBoxそのものの位置を移動させたくその方法を教えていただけないでしょうか。 変数iを用意して、iの値が変わるたびにpictureBoxそのものが動いているように見せかけたいと思ってます。 下記のようにやってみたのですが、間違っているようです。 どう修正したいら良いかわかりません。 Dim i as integer PictureBox1.Location.X = i ご教授願えないでしょうか。

  • VisualStudioのpictureBox

    VC++2008でC++/CLIでpictureBoxにグラフを描画するプログラムを作成しています。 最大値を200程度にしたいのですが,約180以上の数値を入れるとpictureBoxの上部に点が描画されているようです。(pictureBoxの外側なので,点は見えませんが...) 最大値を200,最小値を0としたら,pictureBoxの最上部が200,最下部が0 になるようなプログラムはどのようにすればよいでしょうか? 座標は左下が原点になるようには設定しています。

  • 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つ目の図形は描画されていません。 ピクチャーボックスの範囲を大きくした所にも描画をさせたいと思っています。 よろしくお願いします。

  • C# PictureBoxへの描画を行うとメッセージボックスが表示されません。

    いつもお世話になっております。 ふと、PictureBoxに描画をしてみようかと思い Paintイベントに以下のようにして描画を行いました。   myBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);   Graphics g = Graphics.FromImage(myBitmap);   pictureBox1.Image = myBitmap;      ・      ・(g.FillRectangle(・・・);など)      ・ (myBitmapはBitmap型のグローバル変数です。) PictureBoxは、自由にサイズ変更可能なフォームに貼り付け、四方をanchorで固めています。 そのためサイズが変更されるたびに、描画するときBitmapのサイズも変更しないといけないので この処理を毎回通っています。 (その部分が何だか無駄な気がするのですが、他にいい方法が思いつきませんでした。) ところが、描画はうまくいったのですが、メッセージボックスを出すと そのメッセージボックスが一度Altキーを押さないと表示されません。 色々調べて、ダブルバッファリングというものがあると知りました。 そこでPaintイベントで最初にこの処理をし   Image image = new Bitmap(pictureBox1.Width, pictureBox1.Height);   g = Graphics.FromImage(image); gに描画し終わってから   e.Graphics.DrawImage(image, 0, 0); としてみると、今度はフォームを移動するのにも一瞬フリーズするようになってしまいました。 (あまり深くプログラミングをしたことがないので、理解しきれなくてやり方が悪いのかも知れません・・・) メッセージボックスが表示されないのは、PictureBoxの描画のため 他のコントロールの描画ができていなためだと推測しているのですが どう直していいかわかりません。 どなたか、わかる方がいましたらよろしくお願いします。 <補足> OS:Vista VisualStudio2008 .NET Framework3.5

  • pictureboxの表示について

    いつもお世話になります。 C#について質問です。VisualC#2008を使っています。 private PictureBox[] pictArray = new PictureBox[100]; private void Box_Load() { PictureBox pict; int nIdx = 0; while (nIdx < pictArray.Length) { pict = new PictureBox(); pictArray[nIdx] = pict; pict.Click += new EventHandler(pict_Click); nIdx++; } } のように、あるメソッドで配列にpictureboxの画像を代入(?)していく処理をしています。このメソッドを別のメソッドで呼び出し、 pictArray[1]に格納されているpicturebox pictArray[2]に格納されているpicturebox  …といった具合に、次々と表示させていきたいと考えています。しかし1つしかpictureboxが表示されません。具体的には以下のようなプログラムを組んでいるところです。 private void pict_Click(object sender, EventArgs e) { Box_Load(); kihon_pict.Location = new Point(10, yy); this.panel1.Controls.Add(pict); yy += 40; } 誰か解決策を教えていただけないでしょうか? よろしくお願いします。

  • C#でPictureBoxが二重に表示される

    碁盤を描画し、その上にマウスを合わせたとき付近の交点にPictureBox(サイズは21x21)でカーソルを表示しようと考え、次のように書きました。 int sx = (int)Math.Floor((double)(e.X - 12) / 25) + 1; int sy = (int)Math.Floor((double)(e.Y - 12) / 25) + 1; imgCsObj.Location = new Point(sx*25-21, sy*25); しかし盤上でマウスを動かすと画像のように二重にカーソルが表示される現象が起きました。 おそらく内部的にはカーソルを表示した途端にフォーカスが盤から離れPictureBoxを移動する作業が中断されたせいでは、と思い imgCsObj.Enabled = false; imgCsObj.Location = new Point(sx*25-21, sy*25); imgCsObj.Enabled = true; 一度無効にしてフォーカスがあたらない状態で位置だけ変更しようと思いましたが同じ結果でした。 どうやって以前の位置のカーソルを消せば良いのでしょうか

  • 再描画すると消える

    ピクチャーボックスに以下のような図形を描画するプログラムを書きました。 (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() しかし、これを実行すると再描画されたときに消えてしまいます。 消えてしまう原因と、消えないようにする対処法をご伝授ください。

  • VC++:pictureBoxにイベントなしで描画

    前略 ・ Visual Studio 2012 のVC++を使っています。 フォームに貼り付けたピクチャーボックスに、フォームが表示された時にボタンクリック等特にイベントを発生させないでも 描画したいのですができません。 どなたか教えていただければ幸いです。  以下の例で具体的に教えてください。 ボタンもフォームに貼りつけてボタンクリックイベントの中に以下のようにコーディングしてボタンをクリックすると円が描けます。 どのようにすれば、ボタンクリックしないでもフォームが表示された時に、円がピクチャーボックスの中に描画されているようになるのででしょうか?    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { // 描画を行うグラフィックスクラスを生成 Graphics^ g = pictureBox1->CreateGraphics(); //円の描画 Pen^ blackPen = gcnew Pen(Color::Black, 3); g->DrawEllipse(blackPen, 50, 50, 75,75); //基点(50,50) 幅×高さ:75×75  } 以上、よろしくお願いします

  • ピクチャボックスをクリックしたら・・・という動作

    C#です ピクチャボックスをクリックしたら・・・という動作ができません・・・ 宣言等はこのようにしました for (int i = 1; i <= 25; i++) { for (int j = 1; j <= 25; j++) { map[i, j] = new PictureBox(); map[i, j].Size = new Size(tate, yoko); map[i, j].Location = new Point(tate * i + 5 * i, yoko * j + j * 5);//ずらす map[i, j].BackColor = Color.Black; map[i, j].Click += new EventHandler(map_click);//マップをクリックした } } map_clickというメソッドにはどのようにかけばいいのでしょうか? そのピクチャボックスをクリックしたらそのピクチャボックスの背景色を緑色に変える という風に書きたいのですが・・・・

  • VB.NET ピクチャーボックスのImageの一部をクリップボードにコピー

    Picturebox1.Image = New Bitmap(Picturebox1.Width, Picturebox1.Height) Dim g As Graphics = Graphics.FromImage(Picturebox1.Image) これ以降 g.DrawLine 等で描画を行っています そして、ピクチャーボックスの一部の領域(矩形)を指定して クリップボードにコピーしたいのですがどうしたらいいでしょうか よろしくお願いします 他のピクチャーボックスにその一部をコピーできるだけでもいいのですが

専門家に質問してみよう