首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VB.NET Form1 雙擊 TextBox 彈出 Form2 選取 DataGridView 值回填

     編輯:程式設計綜合問答

核心模式:ShowDialog + 公共屬性回傳值

Form2 以 **模態對話框** (`ShowDialog`) 顯示,使用者選取後設定公共屬性,Form1 讀取屬性回填 TextBox。

Form2 程式碼

Public Class Form2
    ' 對外暴露選取結果
    Public Property SelectedValue As String = ""

    Private Sub DataGridView1_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick
        If e.RowIndex >= 0 Then
            SelectedValue = DataGridView1.Rows(e.RowIndex).Cells(1).Value?.ToString() ' 第 2 欄
            Me.DialogResult = DialogResult.OK ' 關鍵:設定 DialogResult 關閉視窗
        End If
    End Sub
End Class

Form1 程式碼

Public Class Form1
    Private Sub TextBox1_DoubleClick(sender As Object, e As EventArgs) Handles TextBox1.DoubleClick
        Using frm As New Form2()
            ' 這裡可預先載入 Form2 的 DataGridView 資料
            ' frm.LoadData() 

            If frm.ShowDialog(Me) = DialogResult.OK Then
                TextBox1.Text = frm.SelectedValue
            End If
        End Using ' 自動 Dispose
    End Sub
End Class

關鍵點總結

  1. `ShowDialog(Me)` 傳入擁有者,確保模態正確、位置置中。
  2. Form2 內部 `Me.DialogResult = DialogResult.OK` 觸發關閉並回傳結果。
  3. Form1 判斷 `DialogResult.OK` 後,讀取 `frm.SelectedValue` 回填。
  4. `Using` 區塊確保 Form2 釋放資源。

替代方案:事件/委派 (鬆耦合)

' Form2
Public Event ValueSelected(value As String)
Private Sub DataGridView1_CellDoubleClick(...) Handles ...
    RaiseEvent ValueSelected(DataGridView1.Rows(e.RowIndex).Cells(1).Value.ToString())
    Me.Close()
End Sub

' Form1
Private Sub TextBox1_DoubleClick(...) Handles ...
    Dim frm As New Form2()
    AddHandler frm.ValueSelected, AddressOf OnValueSelected
    frm.ShowDialog()
End Sub

Private Sub OnValueSelected(value As String)
    TextBox1.Text = value
End Sub

事件模式適合**多處呼叫 Form2** 或**不想暴露公共屬性**的情況。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved