2013-10-12 1 views
0

현재 대참사 버전을 프로그래밍하려고합니다. 핀에 타원형 모양을 사용하고 타원형을 클릭하면 색상 선택을 포함하는 form2가 표시됩니다. 어떤 타원형을 클릭하여 오른쪽 타원으로 선택한 색을 사용하는지 확인할 수있는 코드를 찾고 있습니다. 나는 내가 가지고있는 각각의 타원형의 형태를 추가하여 그것을 할 수 알아,하지만 난 거기에 더 나은 솔루션 :이 있어야한다 생각양식을 호출하는 항목보기

코드 :

Imports Microsoft.VisualBasic.PowerPacks 
Public Class Form1 
Dim pc1 As Integer 
Dim pc2 As Integer 
Dim pc3 As Integer 
Dim pc4 As Integer 
Public Shared frmMain As Form1 

Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    frmMain = Me 
    Randomize() 
    pc1 = Math.Round(Rnd() * 5) + 1 

    pc2 = Math.Round(Rnd() * 5) + 1 
    While pc2 = pc1 
     pc2 = Math.Round(Rnd() * 5) + 1 
    End While 

    pc3 = Math.Round(Rnd() * 5) + 1 
    While pc3 = pc1 Or pc3 = pc2 
     pc3 = Math.Round(Rnd() * 5) + 1 
    End While 

    pc4 = Math.Round(Rnd() * 5) + 1 
    While pc4 = pc1 Or pc4 = pc2 Or pc4 = pc3 
     pc4 = Math.Round(Rnd() * 5) + 1 
    End While 

    showpc() 
End Sub 
Sub showpc() 
    If pc1 = 1 Then 
     OvalShape41.BackColor = Color.Blue 
    ElseIf pc1 = 2 Then 
     OvalShape41.BackColor = Color.Red 
    ElseIf pc1 = 3 Then 
     OvalShape41.BackColor = Color.Lime 
    ElseIf pc1 = 4 Then 
     OvalShape41.BackColor = Color.Yellow 
    ElseIf pc1 = 5 Then 
     OvalShape41.BackColor = Color.Black 
    ElseIf pc1 = 6 Then 
     OvalShape41.BackColor = Color.White 
    End If 
    If pc2 = 1 Then 
     OvalShape42.BackColor = Color.Blue 
    ElseIf pc2 = 2 Then 
     OvalShape42.BackColor = Color.Red 
    ElseIf pc2 = 3 Then 
     OvalShape42.BackColor = Color.Lime 
    ElseIf pc2 = 4 Then 
     OvalShape42.BackColor = Color.Yellow 
    ElseIf pc2 = 5 Then 
     OvalShape42.BackColor = Color.Black 
    ElseIf pc2 = 6 Then 
     OvalShape42.BackColor = Color.White 
    End If 
    If pc3 = 1 Then 
     OvalShape43.BackColor = Color.Blue 
    ElseIf pc3 = 2 Then 
     OvalShape43.BackColor = Color.Red 
    ElseIf pc3 = 3 Then 
     OvalShape43.BackColor = Color.Lime 
    ElseIf pc3 = 4 Then 
     OvalShape43.BackColor = Color.Yellow 
    ElseIf pc3 = 5 Then 
     OvalShape43.BackColor = Color.Black 
    ElseIf pc3 = 6 Then 
     OvalShape43.BackColor = Color.White 
    End If 
    If pc4 = 1 Then 
     OvalShape44.BackColor = Color.Blue 
    ElseIf pc4 = 2 Then 
     OvalShape44.BackColor = Color.Red 
    ElseIf pc4 = 3 Then 
     OvalShape44.BackColor = Color.Lime 
    ElseIf pc4 = 4 Then 
     OvalShape44.BackColor = Color.Yellow 
    ElseIf pc4 = 5 Then 
     OvalShape44.BackColor = Color.Black 
    ElseIf pc4 = 6 Then 
     OvalShape44.BackColor = Color.White 
    End If 
End Sub 

Private Sub OvalShape1_Click(sender As Object, e As EventArgs) _ 
    Handles OvalShape1.Click, OvalShape2.Click, OvalShape3.Click, OvalShape4.Click 
    ' delete all the other click events or remark them out 

    ' sender is still whichever OVal was clicked: 

    Dim oval As OvalShape = sender 

    ' FORM1 is not correct, need the instance name 
    Me.OvalShape1.BackColor = Color.FromName(oval.Tag) 
End Sub 
End Class 
Public Class Form2 

Private Sub OvalShape1_Click(sender As Object, e As EventArgs) Handles OvalShape1.Click 
    Form1.OvalShape1.BackColor = Color.Blue 
End Sub 

Private Sub OvalShape2_Click(sender As Object, e As EventArgs) Handles OvalShape2.Click 
    Form1.OvalShape1.BackColor = Color.Red 

End Sub 

Private Sub OvalShape3_Click(sender As Object, e As EventArgs) Handles OvalShape3.Click 
    Form1.OvalShape1.BackColor = Color.Lime 

End Sub 

Private Sub OvalShape4_Click(sender As Object, e As EventArgs) Handles OvalShape4.Click 
    Form1.OvalShape1.BackColor = Color.Yellow 

End Sub 

Private Sub OvalShape5_Click(sender As Object, e As EventArgs) Handles OvalShape5.Click 
    Form1.OvalShape1.BackColor = Color.Black 

End Sub 

Private Sub OvalShape6_Click(sender As Object, e As EventArgs) Handles OvalShape6.Click 
    Form1.OvalShape1.BackColor = Color.White 

End Sub 
End Class 

가 완료,이 거리가 멀다 아마 할 수있다, 나는 우연히 뭔가 훨씬 더 컴팩트하지만이 완료 때 :

+0

. 어떤 타원형이 그려져 있습니까? ... 코드가 도움이 될 것입니다. – Plutonix

+0

"IT"는 어떤 타원형이 그려져 있습니까? – Plutonix

+0

Form2를 어떻게 부르시겠습니까? 아마 공개 속성을 부여하고 클릭 이벤트 처리기에 설정합니다. –

답변

3

편집 다음은에게 Form2를에 모든 코드를 축소하는 방법 중 하나 그에 보이는 것 :

OValShape을 TAG이라는 속성이있을 것입니다. 에 ES '블루'에 Form2를는 등 그런 다음 '레드': 응용 프로그램을 가정

Private Sub OvalShape1_Click(sender As Object, e As EventArgs) _ 
    Handles OvalShape1.Click, OvalShape2.Click, _ 
    'Handles OvalShape3.Click ... (add a handles clause for each oval, 
    '  ' delete all the other click events or remark them out 

' sender is still whichever OVal was clicked: 

Dim oval as OvalShape = Sender 

' FORM1 is not correct, need the instance name 
frmOther.OvalShape1.BackColor = Color.FromName(oval.Tag) 

End Sub 

편집

가 Form1을하는 FormMain에서 시작, 우리는 그것을 위해 공공 참조 할 필요가있다. Form1에에서 : 당신의 FormLoad 이벤트에서

Public Shared frmMain As Form1 

:

Sub Form_Load (......) handles Me.Load 
    frmMain = Me 
End Sub 

지금, Form2를 코드는 인스턴스 참조로 frmMain 수 사용합니다.

이 마크의 생각이다 EDIT 3 : 대신 Form2를이 유치원 1의 장난감을 가지고 장난의 Form1에이 색상 자신을 설정하기 위해, 우리는 속성을 노출합니다. 형식 2에서 :

Public SelectedColor As Color 

' slight change here 
Private Sub OvalShape1_Click(sender As Object, e As EventArgs) _ 
     Handles OvalShape1.Click, Handles OvalShape2.Click 
     ' add a HANDLES for each Oval click event so you dont have to 
     ' copy this code to all of them, but DELETE the old ones. 
     ' your code looks like you added the multiple HAndles to that click (prematurely) 


' sender is still whichever OVal was clicked: 

Dim oval as OvalShape = Sender 
SelectedColor = Color.FromName(oval.Tag) 

Me.DialogResult = DialogResult.OK 
me.Close 


End Sub 

를 Form1에서 : 클릭 이벤트에 avaailble입니다

Private Sub OvalShape1_Click(sender As Object, e As EventArgs) Handles OvalShape1.Click 
     'sender is the oval shape clicked, so 
    dim oval As OvalShape = sender 
    dim oClr as Color = oval.BackColor 

    ' Form2 is a CLASS or a template for a form...need to make an instance 
    ' of Form2 to show: 

    dim frm as New Form2(oClr)    ' the right way 

    ' kind of pointless since we only return OK 
    if frm.ShowDialog=DialogResult.Ok then 

     OvalShape1.BackColor = frm.SelectedColor  ' get the color selected 
    end if 


End Sub 
+0

@Plutonix Form2가 색상을 반환해야하는 것처럼 보입니다. 생성자에서 색상을 전달하는 것이 좋습니다. 그러나 ShowDialog를 사용하는 것이 좋습니다.하지만 확인하십시오. DialogResult의 경우 Property 또는 Function에서 선택한 색상을 다시 전달하므로 다른 양식의 양식 컨트롤을 설정하는 것을 싫어합니다. –

+0

@MarkHall 예, 사양을 잘못 읽은 것으로 생각하고 잘못 전달한 것 같습니다 ... Form2가 필요하다고 생각했지만 사용 방법과 위치를 볼 수 없습니다. 나는 당신의 코멘트를 더 carefeully, 예 읽을! 이제 이해가된다! 가장 먼저 표시 할 form2를 얻으려면 – Plutonix

+0

form2를 보여주는 절차 (클릭 이벤트)를 표시하려면 게시물을 편집하고 상단에있는 몇 가지 코멘트를 삭제하십시오. – Plutonix