2013-12-12 20 views
10

Tôi có biểu mẫu "frmOptions" với hộp văn bản có tên "txtMyTextValue" và nút có tên "btnSave" để lưu và đóng biểu mẫu khi được nhấp vào,Cách lấy các giá trị từ một dạng hộp thoại trong VB.NET?

sau đó, tôi hiển thị biểu mẫu hộp thoại "frmOptions" khi một nút "btnOptions" được nhấp vào hình thức chính "frmMain", như thế này

Private Sub btnOptions_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOptions.Click 
    ShowOptionsForm() 
End Sub 

Private Sub ShowOptionsForm() 
    Dim options = New frmOptions 
    options.ShowDialog() 
End Sub 

Làm thế nào tôi có thể nhận được trong hình thức chính "frmMain" giá trị chèn vào trong hộp văn bản "txtMyTextValue" khi "btnSave" là đã nhấp?

Trả lời

18

Bạn muốn nắm bắt thông tin từ hộp thoại chỉ khi kết quả là OK (dùng nhấn Save thay vì Cancel hoặc đóng hộp thoại một số cách khác), do đó làm điều này:

Private Sub ShowOptionsForm() 
    Dim options = New frmOptions 

    ' Did the user click Save? 
    If options.ShowDialog() = Windows.Forms.DialogResult.OK Then 
     ' Yes, so grab the values you want from the dialog here 
     Dim textBoxValue As String = options.txtMyTextValue.Text 
    End If 
End Sub 

Bây giờ bên trong của bạn hình thức hộp thoại, bạn cần phải thiết lập các kết quả Windows.Forms.DialogResult.OK khi người dùng nhấp chuột vào nút tương ứng với OK hành động của mẫu hộp thoại, như thế này:

Public Class frmOptions 
    Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click 
     ' Set the result to pass back to the form that called this dialog 
     Me.DialogResult = Windows.Forms.DialogResult.OK 
    End Sub 
End Class 
+1

Cảm ơn bạn đã trả lời thông minh và súc tích. – Max

+0

@Max - không sao cả, vui vì nó đã giúp bạn. Chúc bạn may mắn. :-) –

+0

Giải pháp tuyệt vời! – SamekaTV

2

các Simp kẻo phương pháp là để thêm một tài sản công cộng mẫu frmOptions mà trả về một chuỗi nội tuyên bố ở cấp toàn cầu của frmOptions

Dim strValue As String 
Public Property MyStringValue() As String 
    Get 
     Return strValue 
    End Get 
End Property 

Sau đó, khi người dùng của bạn nhấp chuột vào nút OK để xác nhận lựa chọn của mình bạn sao chép giá trị của hộp văn bản để biến nội

Private Sub cmdOK_Click(sender As Object, e As System.EventArgs) Handles cmdOK.Click 
    strValue = txtMyTextValue.Text 
End Sub 

Cuối cùng trong frmMain bạn sử dụng mã như thế này để lấy giá trị chèn

Private Sub ShowOptionsForm() 
    Using options = New frmOptions() 
     if DialogResult.OK = options.ShowDialog() Then 
      Dim value = options.MyStringValue 
     End If 
    End Using 
End Sub 

tôi thích Avo id truy cập trực tiếp vào các điều khiển nội bộ của frmOptions, một thuộc tính cung cấp một hướng dẫn có thể được sử dụng để xác thực tốt hơn các đầu vào do người dùng của bạn cung cấp.

3

Bạn có thể sử dụng Sự kiện để xử lý việc này. Với cách tiếp cận này, Biểu mẫu Cài đặt không phải là Phương thức và người dùng có thể nhấp vào nút Lưu bất kỳ lúc nào.

Trong frmOptions:

'You can expand the signature to take more than just a single String. 
Friend Event SavedOptions(ByVal strData As String) 

Private Sub btnSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSave.Click 

    RaiseEvent SavedOptions(txtMyTextValue.Text) 

End Sub 

Trong frmMain:

Private Sub ShowOptionsForm() 

    Dim options = New frmOptions 

    AddHandler options.SavedOptions, AddressOf OnOptionsSave 

    options.ShowDialog() 

End Sub 

Private Sub OnOptionsSave(ByVal strData As String) 

    'Or whatever you want to do on frmMain with Options Data. 
    MsgBox(strData) 

End Sub 
0

Bạn có thể truy cập vào các giá trị từ các trường hợp frmOptions. Tuy nhiên, điều này vi phạm pháp luật của demeter.

Bạn nên trưng ra giá trị với thuộc tính trong lớp học của mình. Công Class frmOptions

Public ReadOnly Property MyTextValue As String 
    Get 
     Return Me.txtMyTextValue.Text 

    End Get 
End Property 

End Class

Sau đó, bạn có thể truy cập các giá trị:

Private Sub ShowOptionsForm() 
     Dim options = New frmOptions 
     Dim frmOptionTextValue As String 
     Dim frmOptionsDiagResult As DialogResult 
     frmOptionsDiagResult = options.ShowDialog() 
     If frmOptionsDiagResult = Windows.Forms.DialogResult.OK Then 
      frmOptionTextValue = options.MyTextValue 
     Else 
      '... 
     End If 
    End Sub 

Cuối cùng, nếu bạn đang sử dụng một Dialog thì chắc chắn rằng để thiết lập các Dialog quả cho nút .

Các vấn đề liên quan