• ベストアンサー

VB.NETでグラフィックを描くと消えてしまいます

VB.NETを使って間もないですが、PaintBox_paintイベント外にDrawLineを使って線を引くと表示されません。PaintBox_paintイベント内に書くと表示されますがそれ以外ではだめです。オートリードロウを使おうとしましたが VB.NETではありませんでした。さらに新しいウインドウをかぶせると グラフィックがかぶさったところだけ消えてしまいます。 MSDNを見てもよくわかりません。 解決方法をご存知の方、宜しくお願いいたします

質問者が選んだベストアンサー

  • ベストアンサー
  • 65_
  • ベストアンサー率100% (2/2)
回答No.1

PictureBoxに次のような感じで書くと 自動で再描画されますよ PictureBox1.Image = New Bitmap(PictureBox1.Size.Width, PictureBox1.Size.Height) Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) g.DrawRectangle(Pens.Pink, 10, 10, 100, 100) フォーム等に描いた場合は自分でPaintイベントで再描画しないと いけないようです

mehiro2
質問者

補足

早速のお返事有難うございます。 これは、pictureBox内に書かなければいけないのでしょうか

その他の回答 (1)

回答No.2

※この前は、URLアドレスの記述の件スイマセンでした No1の65さんの方法ですとPaintイベントに記述しなくても大丈夫でした Private Sub sakuga()  PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)  Dim g As Graphics = Graphics.FromImage(PictureBox1.Image)  g.DrawLine(Pens.Pink, 1, 1, 100, 50) End Sub の様な感じで、描けました。

mehiro2
質問者

お礼

お返事遅くなって申し訳ございませんでした。 早速試してみて、書くことができました。 勉強になり本当にありがとうございました

関連するQ&A

  • VB.NETのグラフィック描画について

    グラフィック描画ですが、引数を持たないサブルーチンプロシージャ(固定的な 目盛り等)は、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**** (これは描画できない)

  • VB.NET 2003 でグラフィックの表示。

    VB.NETをはじめたばかりです。 プログラムのスタート時、まずフォーム内でGraphicsオブジェクトを取得して表示させたいのですが、グラフィックに関する事項が表示しません。 一方、同じコード記述をButtonイベント内に記述し、ボタンONではグラフィック部分の描画が可能です。 フォーム内の記述だけでスタート時にグラフィックを表示するにはどのようにすればよろしいのでしょうか。 なお、フォーム内のテキスト表示、ラベルなどはイベントの発生なしでも表示します。

  • VB.NETのWebアプリケーションでグラフを書く方法

    VB.NETのASP.NETアプリケーションで折れ線グラフを 表示しようと作っているのですが、 drawlineがうまく行かずグラフが描けません。 Windowsアプリケーションだとうまくいくのですが、 同じことをASP.NETアプリケーションでやると エラーが出てしまいます。 一緒に作っている者は、Webアプリケーションでは drawlineは使えないのかな、と、別の方法を考えようとしているのですが、 どうなのでしょう? ぜひアドバイスをいただけますよう、よろしくお願いいたします。

  • 現在、VB2005でDrawLineにてPictureBox上にライン

    現在、VB2005でDrawLineにてPictureBox上にラインを描いています。 しかし、VB6とは違いラインを描いているFormが隠れるとラインが消えてしまいます。 PictureBoxのPaintイベントで描くようにすれば良いのでしょうが、ラインを描くのに 数万ループして演算しながら座標を決めてるため、Formが隠れて現れるたびに座標演算処理が働き 重くなり実用的ではありません。 Formが隠れてもラインが消えないように出来れば良いのですが、方法をご存知の方がいらっしゃいましたら 宜しくお願いいたします。

  • VB.NETのグラフィック描画で困っています

    VB.NETでのグラフィックの記述方法ですが 何かをクリックすると描画させるのではなく 単にあるsubプロシージャ内でグラフィックを描画させる記述する方法として pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) を教えていただきました。そこで private sub xy_keisan() '座標を計算させるプロシージャ disp_x() 'x座標に目盛りを表示させるプロシージャ disp_Y() 'xの目盛り数によってY座標の位置を変えて表示させるプロシージャ end sub private sub disp_x() pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) g.DrawLine(****** end sub private sub disp_y() pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) g.DrawLine(****** end sub のような記述(引数とか細かい所は端折っています)ですとdisp_yは描画されていますが,disp_xは消えてしまいます。 pictureBox1.Image=New Bitmap(PictureBox1.width,pictureBox1.Height) が消えてしまう原因だとおもって宣言場所を変えてみましたが同じです 逆にこれが無いと描画させることが出来なくなります。 これの意味も今ひとつ判りません よろしくお願い致します

  • VB6.0からVB.Netへの移行時に

    現在、VB6.0からVB.netへの移行作業をしています。 VB.netでは、Sub_Mainに書かれた処理が終了すると、 アプリケーションも終了するという事がヘルプに書かれて いました。変更手順もありましたので、その通りに 表示したいフォームをスタートアップオブジェクトに指定し、フォームのLoadイベントからSub_Mainを呼び出すように変更しました。 が、エラーがでます。 「System.InvalidOperationException' のハンドルされていない例外が system.windows.forms.dll で発生しました。」 「追加情報 : 1 つのスレッド上で、2 つ目のメッセージ ループを開始できません。Application.RunDialog または Form.ShowDialog を代わりに使用してください。」 .netに触るのは初めてで、入門書と格闘してますが、 エラーの意味する事すらわかりません。 何が問題なのでしょうか? 新規にフォームを作成したものは、問題なく表示されたのですが、VB6.0から移行したものは表示すらできない情況です。

  • VB.NETでメール送信

    いまVB.NETで入力Formにある送信ボタンの押下イベントで特定した場所にある.xlsファイルをメールに添付して送信したいです。 初心者にはちょっとレベルが高いです。 細かく教えていただければ感謝いたします。 環境: Windows XP Visual studio 2005 VB.NET よろしくお願いします。

  • VB .NETで作成したソフトはXP以外のWindowsで動きますか?

    VB.NETの対応OSはWindowsXPのみとなっていますが,他のWindows(2000, Meなど)で,VB.NETで作ったソフトを実行することはできるのでしょうか? なぜこのような質問をさせていただいたかと言うと,もしVB.NETで作ったソフトがXP以外のWindowsで動かないならば,XP以外のWindowsへの対応が出来なくなるため,VB6.0などでの開発にしなければならないからです。(なお,私はまだVB.NETは買っていません。)

  • vb.netのwebbrouserの表示

    こんにちわ! VB.netのwebbrouserを使ってwebページ(ローカルファイル)を表示しようとしているのですが、 IEで開くのとVB.netのwebbrouserとで表示が異なってしまいます。 色々調べてみて、レンダリングが異なるとのことで、レジストリに [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION] "brouser_test.exe"=dword:10001 を入力して試してみたのですが、ダメでした(ToT) 他にもなにかあるのでしょうか? ちなみに使用しているのは VS Express2012のVB.net Windows7Home IE11 です。 他に必要な情報があれば言ってください。 以上です。アドバイスのほどよろしくお願いいたします。

  • VB.NET版のDoEvents()を探しています

    こんにちわ。yukimura1024です。 VB.NET版のDoEvents()を探しています。 VB6のDoEvents()と同様のものは System.Windows.Forms.Application.DoEvents()です。 と書かれたHPをいくつかみつけたのですが、 実際VB.NETでコードを書き込むと、 「'Windows' は 'System' のメンバではありません。」 と、怒られてしまいます。 これはなぜでしょうか? コンソールアプリなんですがそれだとダメなんでしょうか。 よろしくお願いいたします。

専門家に質問してみよう