2010-05-27 29 views
15

Tôi có một ứng dụng cửa sổ đơn giản bật lên một hộp đầu vào để người dùng nhập vào một ngày để thực hiện tìm kiếm.Hộp nhập liệu VB.NET - Làm thế nào để xác định khi nào Nút Cancel được nhấn?

Làm cách nào để xác định xem người dùng đã nhấp vào nút Hủy hay chỉ nhấn OK mà không nhập bất kỳ dữ liệu nào vừa xuất hiện để trả về cùng một giá trị?

Tôi đã tìm thấy một số ví dụ về việc xử lý điều này trong VB 6 nhưng không ai trong số chúng thực sự hoạt động trong thế giới .NET.

Lý tưởng nhất là tôi muốn biết cách xử lý OK trống và Hủy riêng biệt, nhưng tôi sẽ hoàn toàn ok chỉ với một cách tốt để xử lý việc hủy.

Trả lời

18

Đây là những gì tôi đã làm và nó làm việc một cách hoàn hảo cho những gì tôi đã tìm cách để làm:

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 

chìa khóa này là để thiết lập giá trị mặc định của hộp đầu vào là một không gian thực tế , do đó người dùng nhấn nút OK sẽ trả về giá trị "" trong khi nhấn hủy trả về ""

Từ quan điểm khả năng sử dụng, giá trị mặc định trong hộp nhập liệu bắt đầu được đánh dấu và bị xóa khi người dùng nhập như vậy e không khác gì nếu hộp không có giá trị.

13
input = InputBox("Text:") 

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

Từ MSDN:

Nếu người dùng nhấp Cancel, hàm trả về một chuỗi zero-length ("").

+0

này sẽ làm việc, nhưng có một cách để biết sự khác biệt giữa một hủy nút nhấn hoặc một ok trống rỗng? (Giống như những gì Jamie đã đăng bên dưới, nhưng theo cách làm việc với .NET) –

+0

Hộp nhập liệu rất hạn chế, như Jamie nói, chỉ cần viết hộp thoại của riêng bạn thay thế. –

-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 
+2

Đây là những gì tôi đang tìm kiếm khái niệm, nhưng StrPtr không hợp lệ trong VB.NET –

-1

Hãy thử điều này. Tôi đã thử giải pháp và nó hoạt động.

Dim ask = InputBox("") 
If ask.Length <> 0 Then 
    // your code 
Else 
    // cancel or X Button 
End If 
-1
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 
+0

Tôi không quen thuộc với hướng dẫn kiểu VB và không có thụt lề trong câu trả lời, nhưng tôi đã cố gắng khôi phục những gì đã mất trong định dạng (và sao chép & dán?) –

+1

Trong điều kiện nào có thể 'userReply <>" "' và 'userReply.Length = 0'? –

-2

Tại sao không kiểm tra nếu vì không có gì?

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

Đây là những gì tôi thường sử dụng, vì dễ đọc hơn một chút.

+0

Không có gì không giống như một chuỗi rỗng, đó là những gì được trả lại khi người dùng nhấp vào Hủy. –

2

Tôi thích sử dụng phương pháp IsNullOrEmpty của lớp String như vậy ...

input = InputBox("Text:") 

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

Không thể phân biệt một giá trị rỗng từ hành động hủy bỏ? – JCarlos

3

1) tạo ra một chức năng toàn cầu (tốt nhất trong một module để bạn chỉ cần khai báo một lần)

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) trong trường hợp hình thức tải đặt này (để làm cho biến intInputBoxCancel = hủy sự kiện)

intInputBoxCancel = StrPtr(String.Empty)  

3) bây giờ, bạn có thể sử dụng bất cứ nơi nào trong hình thức của bạn (hoặc dự án nếu StrPtr được khai báo toàn cầu trong mô-đun)

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 
1

Mặc dù câu hỏi này đã được hỏi trong 5 năm trước. Tôi chỉ muốn chia sẻ câu trả lời của tôi.Dưới đây là cách tôi phát hiện xem ai đó đang nhấp hủy và nút OK trong hộp đầu vào:

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 
+0

StrPtr không có sẵn trong VB.NET. – eniacAvenger

+0

Xin lỗi, ý của bạn là gì? Theo tôi đang sử dụng mã, nó hoạt động. – zmd94

0

Guys hãy nhớ rằng bạn có thể sử dụng các sự kiện cố gắng nắm bắt cuối

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 
0

Bạn có thể làm điều đó một cách đơn giản hơn sử dụng phương thức DialogResult.cancel.

Ví dụ:

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

If anInput <>"" then 

    ' Do something 
Elseif DialogResult.Cancel then 

    Msgbox("You've canceled") 
End if 
Các vấn đề liên quan