如何在VB 2012中将Tag属性与表单和代码一起使用?

时间:2014-03-10 05:25:32

标签: vb.net tag-property

我正在为客户和技术人员使用数据库编写程序。主窗体(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

2 个答案:

答案 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()调用后您也可以访问它们。