2015-10-15 14 views
0

選擇2個單選按鈕和文本好吧,所以我寫一個轉換攝氏度開和華氏溫度的程序。默認情況下,我的計算按鈕被禁用,直到用戶輸入溫度並選擇相應溫度的單選按鈕以及正在轉換的溫度。我有很多問題試圖啓用計算按鈕。我不確定自從嵌套if語句在計算區域中不起作用以後該怎麼辦。以下是我迄今爲止:如何啓用Visual Basic中的計算按鈕時,我需要在文本框中

Option Strict On 
Option Explicit On 

Public Class FmMain 
    'Yes I understand that this program is very easy to break 

    Private Sub BtnCalc_Click(sender As Object, e As EventArgs) Handles BtnCalc.Click 

     Try 

      Dim num1 As Decimal 
      Dim num2 As Decimal 
      Dim Answer As Decimal 
      Dim Flag As Integer 
      Dim Flag2 As Integer 
      Dim T1 As String 

      'This is where I'm trying to enable the calculate button 
      If TxtNum1.Text <> "" Then 
       If RadC1.Checked Or RadF1.Checked Or RadK1.Checked Then 
        If RadC2.Checked Or RadF2.Checked Or RadK2.Checked Then 
         BtnCalc.Enabled = True 
         BtnCalc.Focus() 
        End If 
       End If 
      End If 


      'This block of code makes sure that the input that is entered is numerical and does not break the program. 
      If TxtNum1.Text <> "" Then 'I won't need this line once I can get the calculate button enabled and disabled at will 
       If IsNumeric(TxtNum1.Text) Then 

        If RadF1.Checked And RadC2.Checked Then 
         Flag = 1 
        ElseIf RadF1.Checked And RadK2.Checked Then 
         Flag = 2 
        ElseIf RadC1.Checked And RadF2.Checked Then 
         Flag = 3 
        ElseIf RadC1.Checked And RadK2.Checked Then 
         Flag = 4 
        ElseIf RadK1.Checked And RadF2.Checked Then 
         Flag = 5 
        Else 
         Flag = 6 
        End If 

        If RadF2.Checked Then 
         Flag2 = 1 
        ElseIf RadC2.Checked Then 
         Flag2 = 2 
        Else 
         Flag2 = 3 
        End If 

        Answer = ModCalc.Temperature(num1, Flag, num2) 
        T1 = ModCalc.Temp(Flag2) 
        MessageBox.Show("The Answer is: " & Answer.ToString & " " & T1 & ".", "This is a Message Box", MessageBoxButtons.OK, MessageBoxIcon.Information) 

       Else 
        MessageBox.Show("Please enter a number", "Bad Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
       End If 

      Else 
       MessageBox.Show("Please enter a number", "Bad Input Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
      End If 


     Catch ex As Exception 

     End Try 

    End Sub 
    'This just ensures that the user can't click the same radio button on both sides 
    Private Sub RadF1_CheckedChanged(sender As Object, e As EventArgs) Handles RadF1.CheckedChanged 
     If RadF1.Checked Then 
      RadF2.Checked = False 
      RadF2.Enabled = False 
      RadC2.Enabled = True 
      RadK2.Enabled = True 
     End If 
    End Sub 

    Private Sub RadC1_CheckedChanged(sender As Object, e As EventArgs) Handles RadC1.CheckedChanged 
     If RadC1.Checked Then 
      RadC2.Checked = False 
      RadC2.Enabled = False 
      RadF2.Enabled = True 
      RadK2.Enabled = True 
     End If 
    End Sub 

    Private Sub RadK1_CheckedChanged(sender As Object, e As EventArgs) Handles RadK1.CheckedChanged 
     If RadK1.Checked Then 
      RadK2.Checked = False 
      RadK2.Enabled = False 
      RadF2.Enabled = True 
      RadC2.Enabled = True 
     End If 
    End Sub 

End Class 
+0

您正嘗試啓用按鈕的onclick事件處理程序中的按鈕。這沒有任何意義。您應該移動邏輯來啓用單選按鈕的按鈕來檢查更改的事件,並且只有在檢查了正確的事件時才啓用按鈕。 – Tim

回答

0

一行代碼:

BtnCalc.Enabled = TxtNum1.TextLength > 0 AndAlso 
        (RadC1.Checked OrElse RadF1.Checked OrElse RadK1.Checked) AndAlso 
        (RadC2.Checked OrElse RadF2.Checked OrElse RadK2.Checked) 

這就是說,你怎麼能實現在自己的Click事件處理程序的BtnCalc?您需要在其他控件的狀態更改時執行此操作。如果未啓用Button,則無法提升Click事件。

0

好的。正如其他成員所說 - 啓用按鈕的代碼位於按鈕的單擊事件中。如果該按鈕被禁用,該事件將永遠不會觸發,並且用於檢查輸入的代碼不會被執行。

我有什麼建議是添加一個文本改變處理程序,檢查他們兩個包含numric數據,然後啓用這樣的按鈕,這兩個文本框: -

Private Sub TxtNum1_TextChanged(sender As Object, e As EventArgs) Handles TxtNum1.TextChanged, TxtNum2.TextChanged 
     If ((IsNumeric(TNum1.Text) = True) AndAlso (IsNumeric(TxtNum2.Text) = True)) Then 
      btnCalc.Enabled = True 
     End If 
End Sub 

不過我不會包括btnCalc .Focus命令,因爲只要兩個文本框中都有有效的數字數據,焦點就會轉移到按鈕上,如果您想添加更多的數字,則每次按下時都需要點擊文本框。鍵。是它的另一個號碼,甚至刪除數

添加ISNUMERIC功能爲這部分代碼意味着可以從該檢查單選按鈕選擇哪些代碼移除。它總是很好的驗證你的輸入,以避免可能出現的問題。它使代碼更容易調試,如果在附近的代碼中發現錯誤。

此外,在窗體設計,確保每個組一個單選按鈕已經被選中屬性設置爲True檢查。這將消除檢查是否檢查單選按鈕的需要。

到的是,根據單選按鈕設置標誌的代碼行。如果你在六個月內回到你的代碼中,你不會記得將Flag設置爲1或2意味着什麼,所以我建議你使用Enum在類定義的頂部編寫一些代碼,以使其清晰後來..例如: -

只是線下..公共類FmMain,加

Enum conversion 
FtoC = 1 
    FtoK = 2 
    CtoF = 3 
    CtoK = 4 
    KtoF = 5 
    KtoC = 6 
End Enum 

然後..在你的if語句,而不是設置標誌= 1,你可以鍵入

Flag=conversion.FtoC 

這使得後來的事情更可讀性和可維護性。

最後,你可以做同樣的,以及爲標誌的東西,雖然不知道該ModCalc代碼究竟是幹什麼的,有可能是更好的做事方法。

希望這會有所幫助。