2016-07-08 4 views
0

次のコードを使用して、直径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 
+0

コードの行に停止デバッガを置き、プログラムを実行します。その行に当たって停止すると、段階的に行を歩き、更新された変数を調べます。 'i + = 1'行を削除する必要はないので、すでにループによってインクリメントしています。 k変数は常にiと等しいので不必要に見えます。ちょうど私を使用します。 6つ以上の矩形を宣言する必要がある場合は、代わりに矩形のリストを使用する方がよいでしょう。 – LarsTech

+0

私はStackoverflowに慣れていないし、コードを追加したいので、私は "コメントを追加"でそれを行うことができなかったので、 "回答を投稿"ルーブリックを使用しました。私はstackoverflowのに慣れていないですし、コードを追加したい – Dom

答えて

0

これは近いかもしれませんが、すべてのコードなしで、私はそれをテストすることはできません。あなたは(すなわち、矩形関数は、単一の整数をしませかかります)あなたが本当にあなたは、いくつかの変換を持っていたので、ON strictオプションを有効にしてくださいN.の異なる値のためのif文の束を必要としなかったので、それを作った

Dim rect(N) As Rectangle 
'Dim XPxf(N - 1) As Integer 
'Dim YPyf(N - 1) As Integer 
Dim k As Integer = 0 
For i = 1 To N 
    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 
Next 

EDIT:削除するか、私は上記のやった2行をコメントアウトし、それが動作します。ただし、TextBox1の値が大きい場合は、最初の円を描画してから2番目の行を作成し、計算を修正する必要があります。またReturn Ryf線の上Form1.TextBox4.Text = Ryfを移動する必要があります。

+0

として、私は、「コメントを追加」でそれを行うことができませんでしたので、「答えを投稿」ルーブリックを使用しました。 – Dom

+0

@Dom編集が完了しました。しかし、あなたは本当に** ** ON strictオプションは、それが実際にコーディング良いこととは別に、すべてのあなたの潜在的な変換の問題を取り除くために有効にしてください。 – topshot

+0

偉大な、ここでもそれが動作します。私は厳しいオプションをオンにして、あなたの推薦を念頭に置いていきます。どうもありがとう。 – Dom

関連する問題