我有一个简单的Windows应用程序,弹出一个输入框,供用户输入日期进行搜索。
如何确定用户是否点击了取消按钮,或者只是按了OK而没有输入任何数据,因为两者似乎都返回相同的值?
我在VB 6中找到了一些处理它的例子,但它们都没有在.NET世界中真正起作用。
理想情况下,我想知道如何分别处理空的OK和取消,但我会完全没有办法取消处理。
答案 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
这是我通常使用的,因为它更容易阅读。