【问题标题】:Detecting Cancel being pressed in a VB6 InputBox检测在 VB6 输入框中按下的取消
【发布时间】:2012-01-31 07:59:30
【问题描述】:

我正在构建一个一开始就接受数字的 VB 应用程序。如果用户在任何输入框中按下取消按钮,我希望能够退出。 代码是:

Private Sub Command1_Click()
Dim a, b, c, d As Integer
Dim response As Integer
Dim a1, b1, c1, d1 As String
a = InputBox("Enter Numerator 1")
b = InputBox("Enter Denominator 1")
c = InputBox("Enter Numerator 2")
d = InputBox("Enter Denominator 2")

a1 = Str(a)
b1 = Str(b)
c1 = Str(c)
d1 = Str(d)

If a1 <> "" And b1 <> "" And c1 <> "" And d1 <> "" Then
'All Actions
...
Else

 response = MsgBox("Are you sure you want to quit?", vbYesNo + vbQuestion, AdditionV1.0")
 If response = vbYes Then
 End
 Else
 Addition.Show
 End If

我尝试过使用 StrPtr,但它仍然不起作用。发生的情况是,即使我按下取消,它仍然会显示错误消息。

我们将不胜感激。

【问题讨论】:

    标签: vb6 inputbox


    【解决方案1】:

    StrPtr 是要走的路。由于您没有显示相关代码,因此无法说明您做错了什么(但代码中仍然存在一些错误)。原则上,以下工作:

    Dim a As String
    a = InputBox("Enter Numerator 1")
    If StrPtr(a) = 0 Then
        ' Nothing was entered.
    End If
    

    我怀疑您将检查应用于a1 等,而不是原始变量。这不仅不起作用(Str 强制字符串为非空),而且也没有任何意义:这些变量是干什么用的?

    此外,您所有的变量声明都是错误的。以下:

    Dim a, b, c, d As Integer
    

    abc 声明为Variant。只有d 将是Integer。为此,以及其他原因(可读性),从不在一个语句中声明多个变量。始终单独声明它们。哦,使用有意义的名称。 abcd 没有帮助。

    【讨论】:

    • 为什么在 Len(a) 足够的情况下使用 StrPtr(a)?
    • @Joshua 因为那还不够。您想区分 empty 输入和 根本没有输入(即取消按钮)。 Len(a) = 的测试与 a = "" 相同,并且正如 OP 所指出的,没有必要的区别。
    • 我个人从未遇到过任何使用输入框的代码,因此区分两者很重要。在不是 100% 需要用户输入的情况下,输入框是一个非常糟糕的解决方案,在所有其他情况下,可以使用空输入来取消。而且OP想要区分的问题对我来说也不是很清楚。但现在我明白你为什么使用 StrPtr。
    • @Joshua 如果不需要此案例,则该框不会有“取消”按钮。在很多情况下,空白输入是 valid 并且与取消操作不同(尽管 OP 不是一个,而且显然对于输入框来说是一个糟糕的用例)——例如无论何时提示用户编辑可能为空的 现有 值(“输入您最喜欢的新食物”),其中“取消”显然会恢复为旧值,而不是保存新的空值。
    【解决方案2】:

    如果我正确理解您的问题,您希望在用户按下取消按钮时停止处理。

    我建议做这样的事情(注意我将变量从 InputBox 更改为赋值的 a1、b1、c1、d1):

        Private Sub Command1_Click()
        Dim a, b, c, d As Integer
        Dim response As Integer
        Dim a1, b1, c1, d1 As String
    
        a1 = InputBox("Enter Numerator 1")
        if (a1 = "")
           exit sub
        endif
    
        b1 = InputBox("Enter Denominator 1")
        if (b1 = "")
           exit sub
        endif
    
        c1 = InputBox("Enter Numerator 2")
        if (c1 = "")
           exit sub
        endif
    
        d1 = InputBox("Enter Denominator 2")
        if (d1 = "")
           exit sub
        endif
    
    
        If a1 <> "" And b1 <> "" And c1 <> "" And d1 <> "" Then
        'All Actions
        ...
        Else
    
         response = MsgBox("Are you sure you want to quit?", vbYesNo + vbQuestion, AdditionV1.0")
         If response = vbYes Then
         End
         Else
         Addition.Show
         End If
    

    【讨论】:

    • 谢谢你们,我将分子和分母的数据类型更改为字符串,StrPtr 创造了奇迹。 Konrad,我开始学习 Python,这只是我几个月前尝试过的一个问题,今天偶然发现。尽管如此,我已经考虑了您的所有提示,并且从现在开始将按照您所说的去做。另外,您能否指导我从哪里开始学习 Python,或者我应该首先学习 Python 还是 C++。我是来自印度的 Bharat,现在上九年级。
    猜你喜欢
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多