I have a simple windows application that pops up an input box for users to enter in a date to do searches.
How do I identify if the user clicked on the Cancel button, or merely pressed OK without开发者_如何学C entering any data as both appear to return the same value?
I have found some examples of handling this in VB 6 but none of them really function in the .NET world.
Ideally I would like to know how to handle the empty OK and the Cancel seperately, but I would be totally ok with just a good way to handle the cancel.
Here is what I did and it worked perfectly for what I was looking to do:
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
This key was to set the default value of the input box to be an actual space, so a user pressing just the OK button would return a value of " " while pressing cancel returns ""
From a usability standpoint, the defaulted value in the input box starts highlighted and is cleared when a user types so the experience is no different than if the box had no value.
input = InputBox("Text:")
If input <> "" Then
' Normal
Else
' Cancelled, or empty
End If
From MSDN:
If the user clicks Cancel, the function returns a zero-length string ("").
I know this is a very old topic, but the correct answer is still not here.
The accepted answer works with a space, but the user can remove this space - so this answer is not reliable. The answer of Georg works, but is needlessly complex.
To test if the user pressed cancel, just use the following code:
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
1) create a Global function (best in a module so that you only need to declare once)
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) in the form load event put this (to make the variable intInputBoxCancel = cancel event)
intInputBoxCancel = StrPtr(String.Empty)
3) now, you can use anywhere in your form (or project if StrPtr is declared global in module)
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
I like using the IsNullOrEmpty method of the class String like so...
input = InputBox("Text:")
If String.IsNullOrEmpty(input) Then
' Cancelled, or empty
Else
' Normal
End If
You can do it in a simpler way using the DialogResult.cancel
method.
Eg:
Dim anInput as String = InputBox("Enter your pin")
If anInput <>"" then
' Do something
Elseif DialogResult.Cancel then
Msgbox("You've canceled")
End if
Base on @Theo69's answer, the following worked for me:
Dim answer As String = Nothing
answer = InputBox("Your answer")
If answer is Nothing Then
'User clicked the Cancel button.
End If
Base on @Theo69's answer, the following worked for me:
Dim Answer As String = InputBox("Question", DefaultResponse:=vbCr)
If Answer = "" Then
'User pressed cancel
ElseIf Answer = vbcr Then
'User pressed ok with an empty string in the box
Else
'User gave an answer
Dim Response As String = Answer.Replace(vbCr, "")
End If
I used carriage return because I didn't like seeing a character in the textbox.
Guys remember that you can use the 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
Try this. I've tried the solution and it works.
Dim ask = InputBox("")
If ask.Length <> 0 Then
// your code
Else
// cancel or X Button
End If
Although this question is being asked for 5 years ago. I just want to share my answer. Below is how I detect whether someone is clicked cancel and OK button in input box:
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
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
Why not check if for nothing?
if not inputbox("bleh") = nothing then
'Code
else
' Error
end if
This is what i typically use, because its a little easier to read.
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
精彩评论