我正在为客户和技术人员使用数据库编写程序。主窗体(CustomerIncidents)有一个工具条按钮,可以打开一个不同的表单(SearchByState),用户输入状态代码并查找任何事件。
如果用户点击其中一个datagrid单元格,我希望将客户信息存储在TAG中,以便在使用OK按钮关闭表单时,它将在主窗体中显示备份(CustomerIncidents)。 / p>
编辑于03/11/14 12:21 pm
问题出在主表格中。当我单击第二个窗体中的确定按钮时,它尝试将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
答案 0 :(得分:2)
按钮的click事件没有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
答案 1 :(得分: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()
调用后您也可以访问它们。