3

顧客と技術者向けのデータベースを使用してプログラムを作成しています。メイン フォーム (CustomerIncidents) には、ユーザーが州コードを入力してインシデントを探す (SearchByState) への別のフォームを開くツールストリップ ボタンがあります。

ユーザーがデータグリッド セルの 1 つをクリックすると、顧客情報が TAG に保存され、[OK] ボタンを使用してフォームが閉じられたときにメイン フォーム (CustomerIncidents) に表示されるようになります。

03/11/14 12:21pm 編集済み

問題はメイン フォームにあります。2 番目のフォームで [OK] ボタンをクリックすると、DialogResult ボタンを文字列に変換しようとします。修正方法がわかりません。

顧客フォーム (メイン フォーム) セカンダリ フォームが開きます

Private Sub btnOpenState_Click(ByVal sender As System.Object, 
ByVal e As System.EventArgs) Handles btnOpenState.Click
        Dim frmSearchState As New FindCustomer
 ----->>Dim selectedButton As DialogResult = frmSearchState.ShowDialog()
        If selectedButton = Windows.Forms.DialogResult.OK Then
            CustomerIDToolStripTextBox.Text = frmSearchState.Tag.ToString
        End If'

州フォーム(セカンダリフォーム)または「子フォーム」で検索

Private Sub btnOk_Click(message As String, ByVal e As DataGridViewCellEventArgs) Handles btnOk.Click

    message = CustomersDataGridView.Rows(e.RowIndex).Cells(e.ColumnIndex).Value.ToString

    Me.Tag = message
    Me.DialogResult = DialogResult.OK
End Sub
4

2 に答える 2

2

ボタンのクリック イベントには DataGridViewCellEventArgs パラメーターがなく、使用しようとすると例外がスローされます。

独自のプロパティを作成できるので、Tag プロパティを使用する必要はありません。

子フォームで、GridValue というプロパティを作成します。

Private Sub btnOk_Click(sender As Object, e As EventArgs) Handles btnOk.Click
  If dgv.CurrentCell Is Nothing OrElse dgv.CurrentCell.Value Is Nothing Then
    MessageBox.Show("A cell needs to be selected.")
  Else
    Me.DialogResult = DialogResult.OK
  End If
End Sub

Public ReadOnly Property GridValue As String
  Get
    Return dgv.CurrentCell.Value.ToString
  End Get
End Property

親フォームで、自分の情報にアクセスできるようになりました。

Using frmSearchState As New FindCustomer
  If frmSearchState.ShowDialog(Me) = DialogResult.Ok Then
    CustomerIDToolStripTextBox.Text = frmSearchState.GridValue
  End If
End Using
于 2014-03-11T18:49:54.187 に答える
0

この種のことを行うための私の個人的なアプローチは、子フォームにパブリック プロパティを作成し、メイン フォームに戻したい DATA と同じ型にすることです。したがって、DataGridViewの参照をTagプロパティに格納する代わりに、実際には、ユーザーがクリックしたセルにあった実際の値を格納する必要があります。

たとえば、DGV セルに文字列値が含まれている場合、次のようにすることができます。

Public Readonly Property StateName As String
    Get
        If YourDGV.SelectedCell IsNot Nothing Then
            Return YourDGV.SelectedCell.Value
        Else
            Return ""
        End If
    End Get
End Property

(私はそのコードを手で書いたので、いくつかの構文の問題があるかもしれませんが、アイデアを得ることができるはずです.)

メイン フォームで を使用ShowDialog()してこの子フォームを表示し、[OK] または [キャンセル] でStateName、子フォームのプロパティの値を確認してこの値を取得できます。ここで覚えておくべきことは、フォームを閉じても、フォームを構成するすべてのコントロールとプロパティが破棄されるわけではないため、フォームのShowDialog()呼び出しが終了した後でもそれらにアクセスできるということです。

于 2014-03-10T05:43:31.083 に答える