【问题标题】:function that runs when dynamically generated control is interacted with与动态生成的控件交互时运行的函数
【发布时间】:2019-02-22 09:09:21
【问题描述】:

当我的 datagridview 单元格被双击时,我在制作一个运行子程序时遇到了问题。这是因为 datagridview 是以编程方式创建的,而不是由设计器创建的。我找到了一个似乎与该问题相关的帮助网站。

Public Class seattemplatecreator
    Dim alphabet() As Char = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray()
    Private WithEvents dgv_flightTemplate As DataGridView

    'help from https://it.toolbox.com/question/event-for-dynamically-created-command-button-043008

    Public Sub init(ByVal dgv01 As DataGridView)
        dgv_flightTemplate = dgv01
    End Sub

    Private Sub dgv_flightTemplate_CellMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgv_flightTemplate.CellMouseDoubleClick
        MsgBox("workwd")
    End Sub

    Private Sub btn_createflight_Click(sender As Object, e As EventArgs) Handles btn_createflight.Click
        'used https://social.msdn.microsoft.com/Forums/vstudio/en-US/e222f438-f060-4e61-ab28-523d02db91b2/how-to-programmatically-create-datagridview-with-empty-columns-and-rows?forum=vbgeneral
        'to help with this part for automatically generating the datagridview

        MsgBox(alphabet(0))

        Dim dgv_flightTemplate As New DataGridView
        Dim c As Integer = txb_columns.Text
        Dim r As Integer = txb_rows.Text

        For colcount As Integer = 0 To c - 1
            Dim nc As New DataGridViewTextBoxColumn
            nc.Name = "Seating Column"
            dgv_flightTemplate.Columns.Add(nc)
        Next
        dgv_flightTemplate.Rows.Add(r)

        For x = 0 To r - 1
            dgv_flightTemplate.Rows(x).HeaderCell.Value = alphabet(x).ToString
        Next

        Me.Controls.Add(dgv_flightTemplate)
        dgv_flightTemplate.Location = New Point(400, 400)
        dgv_flightTemplate.AllowUserToAddRows = False
        dgv_flightTemplate.AllowUserToDeleteRows = False
        dgv_flightTemplate.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders

        dgv_flightTemplate.AutoResizeRows()
        dgv_flightTemplate.AutoSize = True
    End Sub
End Class

https://it.toolbox.com/question/event-for-dynamically-created-command-button-043008

编辑:Olivier Jacot-Descombes 的响应非常完美,只需要运行“Init”子程序即可。 公共课座位模板创建者

Dim alphabet() As Char = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray()
Private WithEvents dgv_flightTemplate As DataGridView
'help from https://it.toolbox.com/question/event-for-dynamically-created-command-button-043008
Public Sub init(ByVal dgv01 As DataGridView)
    dgv_flightTemplate = dgv01
End Sub
Private Sub dgv_flightTemplate_CellMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgv_flightTemplate.CellMouseDoubleClick
    MsgBox("workwd")
End Sub

Private Sub btn_createflight_Click(sender As Object, e As EventArgs) Handles btn_createflight.Click

    'used https://social.msdn.microsoft.com/Forums/vstudio/en-US/e222f438-f060-4e61-ab28-523d02db91b2/how-to-programmatically-create-datagridview-with-empty-columns-and-rows?forum=vbgeneral 
    'to help with this part for automatically generating the datagridview
    MsgBox(alphabet(0))
    Dim dgv_flightTemplate As New DataGridView
    Dim c As Integer = txb_columns.Text
    Dim r As Integer = txb_rows.Text
    For colcount As Integer = 0 To c - 1
        Dim nc As New DataGridViewTextBoxColumn
        nc.Name = "Seating Column"
        dgv_flightTemplate.Columns.Add(nc)
    Next
    dgv_flightTemplate.Rows.Add(r)
    For x = 0 To r - 1
        dgv_flightTemplate.Rows(x).HeaderCell.Value = alphabet(x).ToString

    Next
    Me.Controls.Add(dgv_flightTemplate)


    dgv_flightTemplate.Location = New Point(400, 400)
    dgv_flightTemplate.AllowUserToAddRows = False
    dgv_flightTemplate.AllowUserToDeleteRows = False
    dgv_flightTemplate.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders

    dgv_flightTemplate.AutoResizeRows()
    dgv_flightTemplate.AutoSize = True

    init(dgv_flightTemplate)






End Sub





End Class

任何帮助将不胜感激

谢谢,泰恩

【问题讨论】:

  • 无论是在设计器中还是在代码中创建控件,事件处理程序都没有什么不同。唯一的区别是您必须使用AddHandler 语句来注册事件处理程序,而不是方法声明上的Handles 子句。
  • btn_createflight 来自哪里。这是表格代码吗?我错过了Inherits Form
  • btn_createflight 是表单上的一个按钮,用于创建数据网格视图,其中列数和行数由两个文本框设置

标签: vb.net dynamic datagridview controls


【解决方案1】:

你没有打电话给Init。但是,您也可以直接分配给该字段

dgv_flightTemplate = New DataGridView 'Note: No Dim here.

但即使您是动态创建列,您也可以使用设计器添加网格。只需拨打电话

dgv_flightTemplate.Columns.Clear()

在添加列之前。

【讨论】:

  • 感谢您的帮助!其他方法也不错,但是很简单,就像使用 init sub
猜你喜欢
  • 1970-01-01
  • 2020-06-03
  • 2013-06-27
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 2012-03-24
相关资源
最近更新 更多