VS2005 lineを使用して線を描画する方法

このQ&Aのポイント
  • Visual Basic 2005のフォームで線を描画する方法を教えてください。
  • フォームが開かれた時に線を一本引く方法はわかりましたが、ボタンをクリックした時に線を引く方法を教えてください。
  • アクセスでしか使ったことがないので、ボタンをクリックした時に線を引くためにどのような記述をすればいいのかわかりません。
回答を見る
  • ベストアンサー

VS2005 line

Visual Basic 2005での質問です。 フォームが開いた時、線を一本ひくには Private Sub Form1_Paint(ByVal sender As Object, ByVal e _ As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint e.Graphics.DrawLine(Pens.Black, 0, 25, Me.Width, 25) End Sub でわかりましたが、 ボタンを一個置いて、それをクリックした時、線を一本ひくにはどうしたらいいですか。 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click XXXXX.DrawLine(Pens.Black, 0, 25, Me.Width, 25) End Sub XXXXX.の所をなんて記述したらいいのでしょうか? アクセスのVBAしか使ったことがないもので・・・

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

  • ベストアンサー
回答No.2

VB.NET や VB.NET 2003 の参考書でも十分に参考になりますよ。 Web サイトでは、一般の方が開設しているサイトでは、VB.NET や VB.NET 2003 から VB.NET 2005 になって変化した所を中心に書かれているような気がします。 まぁ仕方ないですね。これだけバージョンアップの間隔が短いと、毎回ゼロから書いてられないですからね。 Microsoft のサイトでは VB6.0 から VB 2005 に乗り換える人向けのコンテンツが連載中です。 http://www.microsoft.com/japan/msdn/vbasic/migration/

situmonnsya
質問者

お礼

ありがとうございます。 教えて頂いたMSのサイトにグラフィック関係があったので助かりました。 basicもずいぶん進化したものだと、感心してます(途方にくれてる!)。 行番号があって、goto文のあるbasicがなつかしいです。

その他の回答 (1)

回答No.1

単純にボタンの Click イベントで線を引くだけなら Private Sub Button1_Click(ByVal sender As System.Object, Byval e As System.EventArgs) Handles Button1.Click   CType(sender, Button).Parent.CreateGraphics.DrawLine( _     Pens.Black, 0, 25, Me.Width, 25) End Sub で大丈夫かと。 先の Paint イベントでは Form1 の Graphic を使ってましたので、Click イベントでも Form1 の Graphic を使う、と。 Click イベントの引数 sender は Button1 を表しますので、そいつの親(Parent)である Form1 の Graphic を使うというわけです。 ただし、このままだと Click 時に線を引くけど、その後は線を再描画しませんので、Form が別のウィンドウに隠れてしまうと線が消えてしまいます。 Button1 をクリックして線を引いたら、その線はいつまで有効なのかわかりませんので、勝手に解釈して「一度引かれた線は Form1 が閉じられるまで有効」とするならば、 Dim _clicked As Boolean = False Private Sub Form1_Paint(ByVal sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint   If Me._clicked Then     e.Graphics.DrawLine(Pens.Black, 0, 25, Me.Width, 25)   End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, e As System.EventArgs) Handles Button1.Click   Me._clicked = True   Me.Invalidate() End Sub とするとか。

situmonnsya
質問者

補足

ありがとうございます。 良回答でした。 VB2005の参考書はまだ少ないみたいで、ヘルプをみても良く理解できませんでした。 VB.Ver6とはだいぶ違うみたいで、どこか参考になるサイトはないでしょうか? VB.NETの参考書でも2005の教科書になりますでしょうか?

関連するQ&A

  • VB2005のピクチャーボックス内の図形の移動

    VB2005で、formにPictureBox一つと、Button三つをおいて、Button1で、PictureBoxに丸を書いて、Button2とButton3で、PictureBox内で、丸を右左に移動させようと考えています。で丸を書くことと、同じプロシジャー内では、移動させることはできました。が、別のプロシジャーから移動させるってことは出来るのでしょうか?VB2005をやり始めたばかりなのでてんでわかりません。どなたか詳しい方いらっしゃいましたら教えてください。よろしくお願いします。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim g As Graphics = PictureBox1.CreateGraphics() g.Clear(PictureBox1.BackColor) Dim w As Integer = PictureBox1.ClientSize.Width / 3 Dim h As Integer = PictureBox1.ClientSize.Height / 3 g.ResetTransform() g.DrawEllipse(Pens.Black, 0, 0, w, h) g.TranslateTransform(80, 50) g.DrawEllipse(Pens.Black, 0, 0, w, h) g.ResetTransform() g.Dispose() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim g As Graphics = PictureBox1.CreateGraphics() g.TranslateTransform(80, 50) End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click End Sub End Class

  • VBのこのコードの意味を教えてください。(至急)

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click このコードの意味を教えてください。 よろしくお願いします。

  • Form1 Load で実行されない。

    以前も同じ質問をしましたが、カテゴリーが不適当だったようですので、再度質問します。 よろしくお願いします。 VB2010のある参考書に下記のようなプログラムがありました。 Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim g As Graphics = Me.PictureBox1.CreateGraphics() g.DrawEllipse(Pens.Black, 0, 0, 100, 100) End Sub ボタンをクリックすると円が描けます。これをプログラムの起動時に実行させようと思い Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim g As Graphics = Me.PictureBox1.CreateGraphics() g.DrawEllipse(Pens.Black, 0, 0, 100, 100) End Sub と、しましたが実行されません。 どうすれば良いのでしょうか?

  • VB.NET フォーム上に描いたグラフィックのクリア方法

    最近、VB6からVB.NET 2003へプログラムの移行作業を始めたものです。極々基本的なことなのかもしれませんが、.NETでフォームに描いたグラフィック(線や円など)を消去するコードがなかなかうまく書けず困っています。 VB6でしたら Form**.Cls だけで消えるのですが、それに対応するコードはどのように記載すれば宜しいでしょうか? ヘルプなどで見るとClearメソッドを使用するとありましたが、どうもうまく動きません。 例えば、以下の簡単な例でしたらどのように変えれば宜しいでしょうか? 宜しくお願いいたします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   Dim grph As System.Drawing.Graphics   grph = Me.CreateGraphics   grph.DrawLine(Pens.Red, 50, 25, 200, 150)   ClearScreen(e) End Sub Public Sub ClearScreen(ByVal e As PaintEventArgs)   Dim BGcolor As Color   BGcolor = Color.FromArgb(0, 0, 0)   e.Graphics.Clear(BGcolor) '背景色 End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click   ClearScreen(e) End Sub

  • VB初心者です。コードの書き方が分かりません。

    VB初心者です。 VBで(zのn乗)-(xのn乗+yのn乗)の計算が出来るようにしたいのですが、答えが必ず-1になってしまいます。 Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) End Sub End Class 正しいコードの書き方を教えて下さい。 また特定の答えのときにメッセージを表示したいのですが、どうすればいいですか?

  • Elseifのコードが分かりません。(至急)

    急ぎのため再度の質問失礼します。 3つの数字すべてが7のとき、メッセージ1を出し、 どれか2つだけが7のときは、メッセージ2を出し、 どれか1つだけが7のときは、メッセージ3を出し、 どこにも7が含まれていないときは、メッセージ4を出すようにEndifを使って書きたいのですが、正しいコードを教えて下さい。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Randomize() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click PictureBox1.Visible = False Label4.Visible = False Label1.Text = CStr(Int(Rnd() * 10)) Label2.Text = CStr(Int(Rnd() * 10)) Label3.Text = CStr(Int(Rnd() * 10)) If End If End Sub Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click End Sub Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click End Sub Private Sub Label5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label5.Click End Sub End Class よろしくお願いします。

  • VB2008 PaintイベントとResize

    VB初心者です VisualStudio2008 VBを使用しております 早速質問なのですが Form1にPictureBox1があり、プロパティDockがFillとします このピクチャーボックスの色を赤にして、左上から中心に向かって線を引きたいのですが Public Class Form1 Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint Dim p1XC, p1YC As Integer p1XC = PictureBox1.Width / 2 p1YC = PictureBox1.Height / 2 e.Graphics.Clear(Color.Red) e.Graphics.DrawLine(Pens.Black, 0, 0, p1XC, p1YC) End Sub -------------------------------------------------------------------------------- Private Sub PictureBox1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureBox1.Resize Dim p1XC, p1YC As Integer p1XC = PictureBox1.Width / 2 p1YC = PictureBox1.Height / 2 Dim g As Graphics = PictureBox1.CreateGraphics g.Clear(Color.Red) g.DrawLine(Pens.Black, 0, 0, p1XC, p1YC) End Sub End Class ↑は、おかしいですよね? eに書いてるのかgに書いているのか・・・ そもそも←の考え方がおかしいのか eの扱いがよくわからないです。 *同じ色だとわからないですが、色違いにすると大きくした時は増えた部分しか書かれてない *ペイントのみにしてしまうとサイズを小さくしたときに中心に線がいかない *リサイズのみだと元の部分しか塗られない こういう場合どうするのがいいのしょうか? 実際はもっと複雑な絵を描きたいので、イベントと描写を分けたいと思っているのですが・・・ どなたかご教示下さい。

  • このコードはどこが間違っていますか?(至急)

    急ぎのため再度の質問失礼します。 (zのn乗)-(xのn乗+yのn乗)の計算をさせて、答えが0のときにメッセージを表示したいのですが、どのようなコードを書けばいいのでしょうか? Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click x = TextBox1.Text y = TextBox2.Text z = TextBox3.Text n = TextBox4.Text TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) If (TextBox5 .Text= 0) Then Label6.Visible = True End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Label6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label6.Click End Sub End Class このコードだと答えが必ず-1になってしまうのですが、どこを直せばいいのでしょうか? 正しいコードを教えて下さい。 よろしくお願いします。

  • Call文 でデバックできません。

    VB初心者です。 Win2003Sarver+SQL2000+VB.Net2008の組合せで作っています。 Call文で下記の様にすると Private Sub Button自動1600_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button自動1600.Click Call Button1600_Click() <--ここでデバックできません。 End Sub Private Sub Button1600_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1600.Click Me.洗浄機記録BindingSource.AddNew() Me.日付TextBox.Text = Now End Sub Call Button1600_Click() デバックできません。 下記の様にすると動きます。 Private Sub Button自動1600_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button自動1600.Click Call B1600() End Sub Private Sub B1600 Me.洗浄機記録BindingSource.AddNew() Me.日付TextBox.Text = Now End Sub Call先に Click(ByVal sender As System.Object, ByVal e As System.EventArgs) が あると引数か何かが必要になるのでしょうか。 ご存知の方教えてください。

  • WebBrowserについて

    VB2005で、WebBrowserを使おうとしたところ次のような問題が発生しました。 フォームに、WebBrowserを貼り付けてボタンをクリックしたところsubの途中でStopさせるとWebBrowserに表示されません。どうしてでしょうか?教えてください。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate("http://www.goo.ne.jp/") End Sub の状態だと表示されますが、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate("http://www.goo.ne.jp/")     Stop End Sub で止めると表示されません。 教えていただけないでしょうか?宜しくお願い致します。