2013-12-12 26 views
10

私は「frmOptions」このダイアログフォームを表示していますし、「txtMyTextValue」という名前のテキストボックスおよび保存し、それがクリックされていますとき、フォームを閉じるには、「btnSave」という名前のボタンで「frmOptions」フォーム、VB.NETでダイアログフォームから値を取得するには?

を持っていますボタン「btnOptionsは」「btnSave」のとき、私は、メインフォーム「frmMain」テキストボックスに挿入された値「txtMyTextValue」で取得できます。この

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 

のように、メインフォーム「frmMain」をクリックされますクリックした?

答えて

18

あなたは(ユーザーがSave代わりのCancelまたはダイアログを閉じて他の方法を押した)結果はOKである場合にのみ、ダイアログから情報を取り込むので、これやってみたい:今、あなたの内側に

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 

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

スマートで簡潔な回答をいただきありがとうございます。 – Max

+0

@Max - 問題ありません。うれしいことがあなたを助けました。頑張って。 :-) –

+0

すばらしい解決策! – SamekaTV

2

SIMP:ダイアログフォーム、ユーザーがこのように、ダイアログ形式のOKアクションに対応するボタンをクリックしたときに結果Windows.Forms.DialogResult.OKを設定する必要がありますこの方法は、お使いのユーザーは、あなたがの値をコピーし、その選択を確認するには、[OK]ボタンをクリックすると、その後frmOptions

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

のグローバルレベルで宣言内部文字列を返すfrmOptionsフォームにパブリックプロパティを追加することですないよう内部変数

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

あなたは私がAVOに好む挿入された値

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

を取得するために、このようなコードを使用するテキストボックスidはfrmOptionsの内部コントロールに直接アクセスできます。プロパティは、ユーザーが指定した入力をより正確に検証するための間接指定を提供します。

3

イベントを使用してこれを処理できます。このアプローチでは、設定フォームはモーダルである必要はなく、ユーザはいつでも保存ボタンをクリックできます。 frmOptionsで

:frmMainで

'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 

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

あなたはfrmOptionsインスタンスから値にアクセスすることができます。しかし、これはデメテルの法則を破る。

クラス内のプロパティで値を公開する必要があります。 パブリッククラスfrmOptions

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

    End Get 
End Property 

エンドクラス

次に、あなたが値にアクセスすることができます:あなたはダイアログを使用している場合は、ボタンのダイアログの検索結果を設定してください。最後に、

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 

を。

関連する問題