3

我正在为客户和技术人员编写一个使用数据库的程序。主表单 (CustomerIncidents) 有一个工具条按钮,用于打开与 (SearchByState) 不同的表单,用户在其中输入状态代码并查找任何事件。

如果用户单击其中一个数据网格单元格,我希望将客户信息存储在 TAG 中,以便在使用“确定”按钮关闭表单时,它将显示在主表单(CustomerIncidents)中。

已于 2014 年 3 月 11 日下午 12:21 编辑

问题出在主窗体中。当我单击第二个表单中的确定按钮时,它会尝试将 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()在主窗体中使用来调出此子窗体,并在确定或取消时,您可以检查StateName子窗体的属性值以获取此值。这里要记住的是,关闭表单并不会释放其所有组成控件和属性,因此即使在表单完成ShowDialog()调用后您也可以访问它们。

于 2014-03-10T05:43:31.083 回答