次のコードを使用して、直径Dの円の列を描画し、x座標とy座標(ユーザーコントロール)に配置します。行の円の数は、私はループを使用して、それを短くしようとしている変数Nvbネットのループを使用してx座標とy座標に配置された円の行を描画します
Dim rectangle1, rectangle2, rectangle3, rectangle4, rectangle5,
rectangle6,......... as rectangle
Dim XR1, XR2, XR3, XR4, XR5, XR6,........YR1, YR2, YR3, YR4, YR5,
YR6,.........
as Single
XR1 = XPxf(0) ' Function XPxf (k)
XR2 = XPxf(1)
XR3 = XPxf(2)
XR4 = XPxf(3)
' Etc...
YR1 = XPyf(0) ' Function YPyf (k)
YR2 = XPyf(1)
YR3 = XPyf(2)
YR4 = XPyf(3)
' Etc...
If N = 4 Then
rectangle1 = New Rectangle(XR1, YR1, D, D)
rectangle2 = New Rectangle(XR2, YR2, D, D)
rectangle3 = New Rectangle(XR3, YR3, D, D)
rectangle4 = New Rectangle(XR4, YR4, D, D)
G.DrawEllipse(New Pen(Color.White, 3), rectangle1)
G.DrawRectangle(Pens.Transparent, rectangle1)
G.DrawEllipse(New Pen(Color.White, 3), rectangle2)
G.DrawRectangle(Pens.Transparent, rectangle2)
G.DrawEllipse(New Pen(Color.White, 3), rectangle
G.DrawRectangle(Pens.Transparent, rectangle3)
G.DrawEllipse(New Pen(Color.White, 3), rectangle4)
G.DrawRectangle(Pens.Transparent, rectangle4)
ElseIf N13 = 6 Then
rectangle1 = New Rectangle(XR1, YR1, D1, D2)
rectangle2 = New Rectangle(XR2, YR2, D1, D2)
rectangle3 = New Rectangle(XR3, YR3, D1, D2)
' Etc......
に依存しますが、私は全くそれに慣れていないです。いくつかの試みの後、次のコードは、単にxとyは考慮されないことを意味し、画面の左上隅に、お互いの上に円を得るために私を可能にします。
If N = 4 Then
Dim i As Integer = 0
Dim k As Integer = 0
For i = 0 To 3
Dim rect(i) As Rectangle
Dim XPxf(k), YPyf(k) As Single
rect(i) = New Rectangle(XPxf(k), XPyf(k), D, D)
G.DrawRectangle(Pens.Transparent, rect(i))
G.DrawEllipse(New Pen(Color.White, 3), rect(i))
k = i
i += 1
Next
Elseif N = 6 Then
' Etc...
この問題に関する助けを前もっておねがいします。ラース@
を::
は追記デバッグは、エラーを示すものではありません。 Topshot @
:私はあなたの提案から、いくつかの方法を試してきたが、図面は、まだ、画面の左上隅に残っています。簡単にするために、ここではソリューションをテストするための2つの機能を備えたモジュールを含む簡略化されたプログラムがあります。モジュールで
:Form1ので
Public Function XPxf(ByVal k As Integer) As Single
XPxf = Form1.TextBox1.Text + k * 20
End Function
Public Function XPyf(ByVal k As Integer) As Single
Dim Ryf As Single
If XPxf(k) > 200 Then
Ryf = 100
ElseIf XPxf(k) > 400 Then
Ryf = 200
ElseIf XPxf(k) > 600 Then
Ryf = 300
End If
Return Ryf
Form1.TextBox4.Text = Ryf
End Function
:Form2ので
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Form2.Show()
End Sub
:
Private Sub form2_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Dim G As Graphics
G = Me.CreateGraphics
Dim N = Val(Form1.TextBox2.Text)
Dim D = Val(Form1.TextBox3.Text)
Try
For i As Integer = 1 To N
Dim k As Integer = i - 1
Dim rect(i) As Rectangle
Dim XPxf(k) As Single
Dim XPyf(k) As Single
rect(i) = New Rectangle(XPxf(k), XPyf(k), D, D)
G.DrawRectangle(Pens.Transparent, rect(i))
G.DrawEllipse(New Pen(Color.Black, 3), rect(i))
Next
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
コードの行に停止デバッガを置き、プログラムを実行します。その行に当たって停止すると、段階的に行を歩き、更新された変数を調べます。 'i + = 1'行を削除する必要はないので、すでにループによってインクリメントしています。 k変数は常にiと等しいので不必要に見えます。ちょうど私を使用します。 6つ以上の矩形を宣言する必要がある場合は、代わりに矩形のリストを使用する方がよいでしょう。 – LarsTech
私はStackoverflowに慣れていないし、コードを追加したいので、私は "コメントを追加"でそれを行うことができなかったので、 "回答を投稿"ルーブリックを使用しました。私はstackoverflowのに慣れていないですし、コードを追加したい – Dom