2014-01-12 8 views
0

라디오 버튼 선택에 따라 일부 코드를 실행하는 방법을 찾으려고합니다. 그룹 상자에 여러 개의 라디오 버튼이있어 선택 항목에 따라 다른 코드가 실행됩니다. 이제 VB.NET에 상당히 새로운 사용자가되어이 코드를 올바르게 코딩하는 데 어려움을 겪고 있습니다.라디오 버튼 클릭에 기반한 또는 case 문

IF 문이나 SELECT CASE 문을 사용하는 것이 더 좋을까요? 나는 button1이 선택되었는지, set flag = true인지를 나타 내기 위해 부울로 설정된 플래그를 사용하여 시도했다. 그것은 내가 가진 것입니다. CheckedChanged 이벤트를 사용하여 이벤트 변경을 처리하고 있습니다. 일부 코드가 포함되어있어 누군가가 나를 시작할 수 있으면 감사 할 것입니다. 많은 감사합니다. 비교의 수가 적을 경우 라디오 버튼 목록 컨트롤이 있다면

Private Sub rdbBoxReturn_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdbBoxReturn.CheckedChanged 

'code goes here 
flagBoxReturn = True 

End Sub 


Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click 

     Try 

      If flagBoxReturn = True Then 
       MessageBox.Show(CStr(flagBoxReturn)) 
       Return 

      Else 

       DBConnection.connect() 
       sql = "SELECT MAX([Id]) from Request Boxes WHERE Customer = '" & cmbCustomer.Text & "' " 

       'MessageBox.Show(cmbCustomer.Text) 
       'sql = "INSERT INTO [Requests] ("")" 
       'Dim sql As String = "SELECT * from Boxes WHERE Customer = ? AND Status = 'i'" 

       Dim cmd As New OleDb.OleDbCommand 

       Dim id As String 
       Dim requestor As String = "DEMO" 
       Dim intake As String = "I" 
       Dim status As String = "O" 

       'cmd.Parameters.AddWithValue("@p1", cmbCustomer.Text) 

       cmd.CommandText = sql 
       cmd.Connection = oledbCnn 
       dr = cmd.ExecuteReader 


       'lvSelectRequestItems.Items.Clear() 

       While dr.Read() 

        id = CStr(CInt(dr.Item(0).ToString)) 
        id = String.Format("{0:D6}", (Convert.ToInt32(id) + 1)) 
        'id = CStr(CDbl(id) + 1) 

       End While 

       MessageBox.Show(CStr(id)) 

       dr.Close() 

       sql = "INSERT INTO [Request Boxes] ([Request no], Customer, Dept, [Type], [Service level], [Date-time received], [Received by], [Date-time due], Quantity, [Cust requestor], Status) " & 
       "VALUES ('" & id & "', '" & cmbCustomer.Text.ToUpper & "', '" & cmbDept.Text & "', '" & intake.ToString & "', '" & rbServiceLevel.ToString & "', '" & dtpDateReceived.Value & "', '" & requestor.ToString & "', '" & dtpDateDue.Value & "', '" & txtBoxQuantity.Text & "', '" & requestor.ToString & "', '" & status & "')" 

       cmd.CommandText = sql 
       cmd.ExecuteNonQuery() 

       cmd.Dispose() 
       oledbCnn.Close() 

       flagBoxReturn = False 

       MessageBox.Show("Your record number: " & id & " Was entered successfully") 

      End If 

     Catch ex As Exception 

      MessageBox.Show(ex.Message) 

     End Try 

    End Sub 
+0

플래그를 설정하는 방법이나 저장 코드 (매우 안전하지 않고 약함)에 대한 질문입니까? – Steve

+0

@ 스티브 플래그 설정 방법 – user1532468

+0

; DROP TABLE Request; SELECT '누군가는 SQL Injection에 대해 배울 필요가있다. –

답변

2

이런 식으로하면 어떨까요 ...

Public Enum SaveOption As Int32 
    DoNothing = 0 
    DoSomething = 1 ' Obviously rename this to something that makes sense in your situation. 
End Enum 

Public Function GetSaveOption() As SaveOption 
    Dim result As SaveOption = SaveOption.DoNothing 

    If rdbBoxReturn.Checked Then 
    result = DoSomething 
    End If 
    ' Add as many if statements her to cover all your radio buttons. 

    Return result 
End Function 



Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click 
    Select Case GetSaveOption 
    Case SaveOption.DoNothing 
     Exit Sub 

    Case SaveOption.DoSomething 
     ' Your save code here 
    End Select 
End Sub 

이 방법을 사용하면 UI 요소 상태를 프로그램 상태로 변환하여 코드를보다 쉽게 ​​읽을 수 있습니다.

1

스위치 문이 더 , 즉 인덱스 변수 (의 selectedIndex 속성을 전달할 수있는 경우 switch 문에서와 같이 훨씬 더 나은 것 라디오 버튼 목록)하지만 컨트롤은 웹 양식에서 사용할 수 있습니다, 또는 당신은 몇 가지 무료 사용자/사용자 지정 컨트롤 등 귀하의 경우 너무

을 발견하면 다른 문

을 경우 사용, 을 형성하고 더 나은 승리에서 사용할 수 있습니다