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

Это то, что я обычно использую, потому что его немного легче читать.