- 題名: ポイントのコピー
- 日時: 2004/02/27 12:05:44
- ID: 2761
- この記事の返信元:
- (なし)
- この記事への返信:
- [2776] Re[1]: ポイントのコピー2004/02/27 21:18:45
- ツリーを表示
StorePだけどこでもReDimされていないようですが? (他の二つはされてますね。) あと、「代入する場所が必要になった段階でRedimする」というつもりであれば、 配列の確保時の添え字が不正ですよ。 VB.NETでは、配列はアクセスでも確保の際でも0からの数を指定するので、 例えば「Dim A(1) As Integer」は要素数2個。なので、APN(0)が放置されてます。 ループを1から始めてるので流れは正常でしょうが、0番がかわいそうなので 一応突っ込みを。 (この指定って、独特の癖ですね。C#でコンポーネント開発しつつVB.NETも 使用するので、どうも慣れるのが大変です。) (ちなみに、Collectionクラスは1からです。統一して欲しい・・・。)
分類:[.NET]
以下のプログラムをデバッグすると ハンドルされていないと言う理由でデバッグが中止されます(最初の行のForm1に黄色でマーキングされます。)
そこで
Private Sub PictureBox1_Paint()内の
StoreP(Count) = APN(j)
StoreP(Count) = BPN(j)
を消すと走るのですが pointのコピーにおいてなんらかの違反がされているのでしょうか?
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows フォーム デザイナで生成されたコード "
Dim APN() As Point
Dim BPN() As Point
Dim StoreP() As Point
Dim Count As Long = 0
Dim TempCount As Long = 0
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
If e.Button = MouseButtons.Left Then
TempCount = TempCount + 1
ReDim Preserve APN(TempCount)
APN(TempCount) = New Point(e.X, e.Y)
End If
End Sub
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
If e.Button = MouseButtons.Left Then
ReDim Preserve BPN(TempCount)
BPN(TempCount) = New Point(e.X, e.Y)
Me.Refresh()
End If
End Sub
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
Dim p As New Pen(Color.Black, 1)
Dim i As Long
Dim j As Long = 1
For i = 1 To TempCount
e.Graphics.DrawLine(p, APN(i), BPN(i))
Next
Do While Count <= i
Do While j <= i
StoreP(Count) = APN(j)
Count = Count + 1
StoreP(Count) = BPN(j)
Count = Count + 1
j = j + 1
Loop
Loop
End Sub
End Class