VB.NET Inputbox - Как определить, когда нажата кнопка "Отмена"?
У меня есть простое приложение для Windows, которое открывает окно ввода для пользователей, чтобы ввести дату для поиска.
Как определить, нажал ли пользователь кнопку "Отмена" или просто нажал "ОК" без ввода каких-либо данных, поскольку оба они возвращают одно и то же значение?
Я нашел несколько примеров обработки этого в VB 6, но ни один из них не работает в мире .NET.
В идеале я хотел бы знать, как обрабатывать пустое ОК и Отмена отдельно, но я был бы полностью в порядке с хорошим способом справиться с отменой.
Ответы
Ответ 1
Вот что я сделал, и он отлично работал для того, что я хотел сделать:
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, вернет значение ", а нажатие отмены отменяет" "
С точки зрения удобства использования значение по умолчанию в поле ввода начинает подсвечиваться и очищается, когда пользователь вводит так, что опыт не отличается от того, что поле не имеет значения.
Ответ 2
input = InputBox("Text:")
If input <> "" Then
' Normal
Else
' Cancelled, or empty
End If
От MSDN:
Если пользователь нажимает кнопку Отмена, функция возвращает строку нулевой длины ("").
Ответ 3
1) создать глобальную функцию (лучше всего в модуле, так что вам нужно только объявить один раз)
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 = отменить событие)
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
Ответ 4
Мне нравится использовать метод IsNullOrEmpty класса String так...
input = InputBox("Text:")
If String.IsNullOrEmpty(input) Then
' Cancelled, or empty
Else
' Normal
End If
Ответ 5
Хотя этот вопрос задают 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
Ребята помнят, что вы можете использовать событие завершения try catch
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
Ответ 7
Вы можете сделать это проще с помощью метода 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
Ответ 8
Попробуйте это. Я пробовал решение, и оно работает.
Dim ask = InputBox("")
If ask.Length <> 0 Then
// your code
Else
// cancel or X Button
End If
Ответ 9
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
Ответ 10
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
Почему бы не проверить, нет ли ничего?
if not inputbox("bleh") = nothing then
'Code
else
' Error
end if
Это то, что я обычно использую, потому что его немного легче читать.