Vb.net 当我需要选择两个单选按钮和文本框中的文本时,如何在visual basic中启用“计算”按钮

Vb.net 当我需要选择两个单选按钮和文本框中的文本时,如何在visual basic中启用“计算”按钮,vb.net,Vb.net,好的,我正在写一个程序,转换摄氏度开尔文和华氏度。默认情况下,我会禁用“计算”按钮,直到用户输入温度并选择相应温度和转换温度的单选按钮。我在尝试启用“计算”按钮时遇到了很多问题。我不知道该怎么办,因为计算区域中的嵌套if语句不起作用。以下是我到目前为止的情况: Option Strict On Option Explicit On Public Class FmMain 'Yes I understand that this program is very easy to break

好的,我正在写一个程序,转换摄氏度开尔文和华氏度。默认情况下,我会禁用“计算”按钮,直到用户输入温度并选择相应温度和转换温度的单选按钮。我在尝试启用“计算”按钮时遇到了很多问题。我不知道该怎么办,因为计算区域中的嵌套if语句不起作用。以下是我到目前为止的情况:

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
选项严格打开
选项显式打开
公共类FmMain
是的,我知道这个计划很容易被打破
私有子BtnCalc_Click(发送方作为对象,e作为事件参数)处理BtnCalc。单击
尝试
作为十进制的Dim num1
作为十进制的Dim num2
以十进制表示的模糊答案
作为整数的Dim标志
Dim Flag2为整数
作为字符串的Dim T1
'这就是我试图启用“计算”按钮的地方
如果为TxtNum1.Text“”,则
如果RadC1.已检查或RadF1.已检查或RadK1.已检查,则
如果RadC2.已检查或RadF2.已检查或RadK2.已检查,则
BtnCalc.Enabled=True
BtnCalc.Focus()
如果结束
如果结束
如果结束
'这段代码确保输入的是数字,不会中断程序。
如果是TxtNum1.Text“”,那么一旦我可以随意启用和禁用calculate按钮,我就不需要这一行了
如果是数字(TxtNum1.Text),则
如果RadF1.已检查且RadC2.已检查,则
标志=1
ElseIf RadF1.已检查,RadK2.已检查
标志=2
ElseIf RadC1.已检查,RadF2.已检查
标志=3
ElseIf RadC1.已检查,RadK2.已检查
标志=4
ElseIf RadK1.已检查,RadF2.已检查,然后
标志=5
其他的
标志=6
如果结束
如果RadF2已检查,则
Flag2=1
ElseIf RadC2.检查过了吗
Flag2=2
其他的
Flag2=3
如果结束
答案=计算温度(num1,标志,num2)
T1=模型温度(Flag2)
MessageBox.Show(“答案是:”&Answer.ToString&“&T1&“,“这是一个消息框”,MessageBoxButtons.OK,MessageBoxIcon.Information)
其他的
MessageBox.Show(“请输入一个数字”,“输入错误”,MessageBoxButtons.OK,MessageBoxIcon.Error)
如果结束
其他的
MessageBox.Show(“请输入一个数字”,“输入错误”,MessageBoxButtons.OK,MessageBoxIcon.Error)
如果结束
特例
结束尝试
端接头
这只会确保用户不能在两侧单击同一个单选按钮
私有子RadF1_CheckedChanged(发送方作为对象,e作为事件args)处理RadF1.CheckedChanged
如果RadF1。已选中,则
RadF2.Checked=False
RadF2.Enabled=False
RadC2.Enabled=True
RadK2.Enabled=True
如果结束
端接头
私有子RadC1_CheckedChanged(发送方作为对象,e作为事件args)处理RadC1.CheckedChanged
如果RadC1.已检查,则
RadC2.Checked=False
RadC2.Enabled=False
RadF2.Enabled=True
RadK2.Enabled=True
如果结束
端接头
私有子RadK1_CheckedChanged(发送方作为对象,e作为事件args)处理RadK1.CheckedChanged
如果RadK1已检查,则
RadK2.Checked=False
RadK2.Enabled=False
RadF2.Enabled=True
RadC2.Enabled=True
如果结束
端接头
末级
一个衬里:

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

也就是说,如何在自己的
单击
事件处理程序中启用
BtnCalc
?当其他控件的状态更改时,您需要执行此操作。如果未启用
按钮
,则无法引发
单击事件。

确定。正如其他成员所说,启用按钮的代码位于按钮的click事件中。如果按钮被禁用,事件将永远不会触发,检查输入的代码也不会执行

我建议为两个文本框添加一个文本更改处理程序,检查它们是否都包含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函数添加到此代码段中意味着您可以将其从检查所选单选按钮的代码中删除。尽快验证您的输入总是好的,这样可以避免以后代码中可能出现的问题。如果可以在附近的代码中找到某个地方的错误,那么调试代码就容易多了

此外,在表单设计器中,通过将checked属性设置为True,确保已选中每个组中的一个单选按钮。这样就不需要检查单选按钮是否被选中

好,转到根据单选按钮设置标志的代码。如果您在六个月后回到代码中,您将记不起将Flag设置为1或2意味着什么,因此我建议您使用Enum在类定义的顶部编写一些代码来明确这一点
Enum conversion
FtoC = 1
    FtoK = 2
    CtoF = 3
    CtoK = 4
    KtoF = 5
    KtoC = 6
End Enum
Flag=conversion.FtoC