VB.NET输入框 - 如何识别按下取消按钮的时间?

时间:2010-05-27 18:23:07

标签: vb.net

我有一个简单的Windows应用程序,弹出一个输入框,供用户输入日期进行搜索。

如何确定用户是否点击了取消按钮,或者只是按了OK而没有输入任何数据,因为两者似乎都返回相同的值?

我在VB 6中找到了一些处理它的例子,但它们都没有在.NET世界中真正起作用。

理想情况下,我想知道如何分别处理空的OK和取消,但我会完全没有办法取消处理。

13 个答案:

答案 0 :(得分:21)

这就是我所做的,它完全符合我的目标:

Dim StatusDate As String
 StatusDate = InputBox("What status date do you want to pull?", "Enter Status Date", " ")

        If StatusDate = " " Then
            MessageBox.Show("You must enter a Status date to continue.")
            Exit Sub
        ElseIf StatusDate = "" Then
            Exit Sub
        End If

此键是将输入框的默认值设置为实际空格,因此按下OK按钮的用户将返回值“”,而按下取消则返回“”

从可用性的角度来看,输入框中的默认值会突出显示,并在用户输入时清除,因此体验与框没有值时没有区别。

答案 1 :(得分:14)

input = InputBox("Text:")

If input <> "" Then
   ' Normal
Else
   ' Cancelled, or empty
End If

来自MSDN

  

如果用户单击“取消”,则该函数返回零长度字符串(“”)。

答案 2 :(得分:3)

1)创建一个Global函数(最好在模块中,这样你只需要声明一次)

Imports System.Runtime.InteropServices                 ' required imports
Public intInputBoxCancel as integer                    ' public variable

Public Function StrPtr(ByVal obj As Object) As Integer
    Dim Handle As GCHandle = GCHandle.Alloc(obj, GCHandleType.Pinned)
    Dim intReturn As Integer = Handle.AddrOfPinnedObject.ToInt32
    Handle.Free()
    Return intReturn
End Function

2)在表单load事件中放入此(使变量intInputBoxCancel = cancel事件)

intInputBoxCancel = StrPtr(String.Empty)    

3)现在,您可以在表单中的任何位置使用(如果StrPtr在模块中声明为全局,则可以使用项目)

dim ans as string = inputbox("prompt")         ' default data up to you
if StrPtr(ans) = intInputBoxCancel then
   ' cancel was clicked
else
   ' ok was clicked (blank input box will still be shown here)
endif

答案 3 :(得分:2)

我喜欢使用类String的IsNullOrEmpty方法,如此...

input = InputBox("Text:")

If String.IsNullOrEmpty(input) Then
   ' Cancelled, or empty
Else
   ' Normal
End If

答案 4 :(得分:2)

我知道这是一个非常古老的话题,但是正确的答案仍然不在这里。

接受的答案使用空格,但是用户可以删除该空格-因此此答案不可靠。 乔治的答案有效,但不必要地复杂。

要测试用户是否按“取消”,只需使用以下代码:

Dim Answer As String = InputBox("Question")
If String.ReferenceEquals(Answer, String.Empty) Then
    'User pressed cancel
Else if Answer = "" Then
    'User pressed ok with an empty string in the box
Else
    'User gave an answer

答案 5 :(得分:1)

虽然这个问题是5年前提出来的。我只是想分享我的答案。下面是我如何检测是否有人点击取消和输入框中的确定按钮:

Public sName As String

Sub FillName()
    sName = InputBox("Who is your name?")
    ' User is clicked cancel button
    If StrPtr(sName) = False Then
        MsgBox ("Please fill your name!")
        Exit Sub
    End If

   ' User is clicked OK button whether entering any data or without entering any datas
    If sName = "" Then
        ' If sName string is empty 
        MsgBox ("Please fill your name!")
    Else
        ' When sName string is filled
        MsgBox ("Welcome " & sName & " and nice see you!")
    End If
End Sub

答案 6 :(得分:1)

您可以使用DialogResult.cancel方法以更简单的方式完成此操作。

例如:

Dim anInput as String = InputBox("Enter your pin")

If anInput <>"" then

   ' Do something
Elseif DialogResult.Cancel then

  Msgbox("You've canceled")
End if

答案 7 :(得分:0)

大家记住你可以使用try catch end event

Dim Green as integer

Try
    Green = InputBox("Please enter a value for green")
    Catch ex as Exception
        MsgBox("Green must be a valid integer!")
End Try

答案 8 :(得分:0)

基于@Theo69 的回答,以下对我有用:

    public async Task UpdateTags(string token)
    {
        await Task.Run(() =>
        {
            Device.BeginInvokeOnMainThread(() =>
            {
                try
                {
                    // No point registering tags until the user has signed in and we have a device token
                    if (CurrentAccount == null)
                    {
                        Console.WriteLine($"UpdateTags cancelled: Account: {Trico.OrbitalApp.App.CurrentAccount};");
                        return;
                    }
                    var tag = $"user:{CurrentAccount.UserName}";
                    Console.WriteLine($"Registering tag: {tag}");
                    MSNotificationHub.AddTag(tag);
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Error registering device: {e.ToString()}");
                }
            });
        });
    }

答案 9 :(得分:-1)

试试这个。我已经尝试了解决方案,但它确实有效。

Dim ask = InputBox("")
If ask.Length <> 0 Then
   // your code
Else
   // cancel or X Button 
End If

答案 10 :(得分:-2)

Dim input As String

input = InputBox("Enter something:")

If StrPtr(input) = 0 Then
   MsgBox "You pressed cancel!"
Elseif input.Length = 0 Then
   MsgBox "OK pressed but nothing entered."
Else
   MsgBox "OK pressed: value= " & input
End If

答案 11 :(得分:-2)

Dim userReply As String
userReply = Microsoft.VisualBasic.InputBox("Message")
If userReply = "" Then 
  MsgBox("You did not enter anything. Try again")
ElseIf userReply.Length = 0 Then 
  MsgBox("You did not enter anything")
End If

答案 12 :(得分:-2)

为什么不检查是否一无所获?

if not inputbox("bleh") = nothing then
'Code
else
' Error
end if

这是我通常使用的,因为它更容易阅读。