gpt4 book ai didi

vb.net - 引入登录表单后未填写组合框

转载 作者:行者123 更新时间:2023-12-03 08:55:16 25 4
gpt4 key购买 nike

我的UC_Menu_Scout类中包含以下代码:

Private Sub cmbScoutName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbScoutName.SelectedIndexChanged

If loaded = True Then
cmbReportDate.DataSource = Nothing
cmbReportDate.DataSource = frmPlayerInfo.filterReports()
cmbReportDate.DisplayMember = "ReportDate"
cmbReportDate.ValueMember = "ReportID"
End If

End Sub

Private Sub cmbReportDate_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbReportDate.SelectedIndexChanged

If loaded = True Then
If cmbReportDate.Items.Count > 0 Then
'frmPlayerInfo.myDataTable = Nothing
frmPlayerInfo.myDataTable = frmPlayerInfo.retrieveDT()
dgPlayers.DataSource = frmPlayerInfo.myDataTable
frmPlayerInfo.setReport()
End If

End If

End Sub

我的frmPlayerInfo类中的以下代码(仅是相关代码):
Public myDataTable As DataTable = Nothing

Private Sub frmPlayerInfo_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

UC_Menu_Scout1.cmbScoutName.DataSource = retrieveScouts()
UC_Menu_Scout1.cmbScoutName.DisplayMember = "ScoutName"
UC_Menu_Scout1.cmbScoutName.ValueMember = "ScoutID"

UC_Menu_Scout1.cmbReportDate.DataSource = filterReports()
UC_Menu_Scout1.cmbReportDate.DisplayMember = "ReportDate"
UC_Menu_Scout1.cmbReportDate.ValueMember = "ReportID"

myDataTable = retrieveDT()
UC_Menu_Scout1.dgPlayers.DataSource = myDataTable

setReport()
loaded = True
End Sub

Public Function retrieveDT() As DataTable
Dim Str As String = _
<String> SELECT
Player.PlayerID,
PlayerFirstName,
PlayerLastName,
DOB,
Age,
PlaceOfBirth,
PlayerImage
FROM
Player
INNER JOIN
Report ON Report.PlayerID = Player.PlayerID
/*WHERE
ReportID = @ReportID*/
ORDER BY
PlayerFirstName
</String>

Dim dt As New DataTable
Using conn As New SqlClient.SqlConnection(DBConnection)
conn.Open()
Using cmdQuery As New SqlClient.SqlCommand(Str, conn)
cmdQuery.Parameters.Add("@ReportID", SqlDbType.Int).Value = UC_Menu_Scout1.cmbReportDate.SelectedItem.ReportID
cmdQuery.CommandTimeout = 600

Try
Using daResults As New SqlClient.SqlDataAdapter(cmdQuery)
daResults.Fill(dt)
End Using
Catch ex As Exception
MsgBox("An Exception has happened: " & ex.Message & vbNewLine)
End Try

End Using 'Automatically closes connection
End Using

Return dt

End Function

在创建登录表单之前,一切正常。从那时起(成功登录后),我的组合框一直收到“对象变量或未设置块变量的错误”错误-表示在表单加载事件时它们现在为空。由于设置了“已加载” bool(boolean) 值,因此消除了frmPlayerInfo.filterReports()的错误,但是我仍然在此行cmdQuery.Parameters.Add(“@ ReportID”,SqlDbType.Int上收到针对frmPlayerInfo.retrieveDT-的相同消息。 )。值= UC_Menu_Scout1.cmbReportDate.SelectedItem.ReportID。再次说明组合框(cmbReportDate)为空。

初始加载事件起作用,但是崩溃发生在cmbReportDate_SelectedIndexChanged事件上,在以下行上:restoreDT函数中的frmPlayerInfo.myDataTable = frmPlayerInfo.retrieveDT()。

如果我删除登录表单,则不会出现此类问题-特定于我程序的答案将不胜感激。

最佳答案

这是一个如何从UserControl中获取对主窗体的引用的示例:

    Dim frm As Form = Me.FindForm
If TypeOf frm Is frmPlayerInfo Then
Dim player As frmPlayerInfo = DirectCast(frm, frmPlayerInfo)
' ... now do something with "player" ...

End If

不,这是 而不是一个好的设计,因为现在您的UserControl只能与frmPlayerInfo表单一起使用。如果您对此表示满意,那么以下是使用您的特定代码的示例:
Private Sub cmbReportDate_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbReportDate.SelectedIndexChanged
If loaded = True Then
If cmbReportDate.Items.Count > 0 Then
Dim frm As Form = Me.FindForm
If TypeOf frm Is frmPlayerInfo Then
Dim player As frmPlayerInfo = DirectCast(frm, frmPlayerInfo)
' ... now do something with "player" ...
player.myDataTable = player.retrieveDT()
dgPlayers.DataSource = player.myDataTable
player.setReport()
End If
End If
End If
End Sub

关于vb.net - 引入登录表单后未填写组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28199563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com