如何在VB.Net中预加载表单?

如何在VB.Net中预加载表单?,vb.net,Vb.net,我有一个表单,包含很多东西,包括文本框、图像、面板和数据库。问题是,当我开始运行它时,窗口会显示出来,但内容会在窗口显示几秒钟后显示出来 我尝试在表单的显示事件中删除此重要代码。这有点有用,但程序无法正常工作: Private Sub Inventory_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown Label1.Parent = PictureBox1 Label2.Par

我有一个表单,包含很多东西,包括文本框、图像、面板和数据库。问题是,当我开始运行它时,窗口会显示出来,但内容会在窗口显示几秒钟后显示出来

我尝试在表单的显示事件中删除此重要代码。这有点有用,但程序无法正常工作:

Private Sub Inventory_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
    Label1.Parent = PictureBox1
    Label2.Parent = PictureBox1
    OpenConnection()
    Dim da As SqlDataAdapter = New SqlDataAdapter("Select * from inventory order by [Item No] asc", conn)
    Dim ds As New DataSet
    da.Fill(ds, "inventory")
    DataGridView1.DataSource = ds.Tables("inventory")
    DataGridView1.ClearSelection()
    conn.Close()
    If DataGridView1.RowCount <> 0 Then
        PictureBox1.Visible = False
        Label1.Visible = False
        Label2.Visible = False
    End If
    TextBox2.Focus()
    MG.Visible = True
    btnClear.PerformClick()
    txtItemNo.ReadOnly = False
    txtItemNo.Text = DataGridView1.RowCount + 1
    txtItemNo.ReadOnly = True
    btnDelete.Enabled = False
    clearExpiryDate.Visible = False
End Sub
Private Sub Inventory_显示(ByVal sender作为对象,ByVal e作为System.EventArgs)处理我。显示
Label1.Parent=PictureBox1
Label2.Parent=PictureBox1
OpenConnection()
Dim da As SqlDataAdapter=新SqlDataAdapter(“根据[项目编号]asc从库存订单中选择*,conn)
Dim ds作为新数据集
da.填充(ds,“库存”)
DataGridView1.DataSource=ds.Tables(“库存”)
DataGridView1.ClearSelection()
康涅狄格州关闭
如果DataGridView1.RowCount为0,则
PictureBox1.Visible=False
Label1.Visible=False
Label2.Visible=False
如果结束
TextBox2.Focus()
MG.可见=真实
btnClear.PerformClick()
txtItemNo.ReadOnly=False
txtItemNo.Text=DataGridView1.RowCount+1
txtItemNo.ReadOnly=True
btnDelete.Enabled=False
clearExpiryDate.Visible=False
端接头

如何修复此延迟?

您删除了上面多少代码?你是怎么说程序不能正常工作的。我可能会将数据库初始化和数据集加载到构造函数中。这样,在您尝试显示窗体之前,它将被预加载。我删除了上面的所有代码,导致程序在显示窗体时不执行某些所需的任务。看起来所有这些代码都可以完全从事件中移出,并移到类似于以Me.show结尾的初始化方法中。但是,所有数据库内容仍将在某个时间点出现延迟,但至少执行上述操作将意味着用户看到等待光标一刻,然后表单突然打开,而不是幽灵轮廓效果。@peterG我对这种东西有点陌生。您能告诉我怎么做吗?在您的表单代码中创建一个新的子项,并将其称为“初始化”或类似名称。剪切并将上面的所有代码粘贴到子项中。然后在末尾添加“Me.Show”或“Me.ShowDialog”。然后,不要调用f.show来显示表单,而是调用f.initialise。哦,是的,还可以在SQL中添加WHERE子句,这样就不会像其他注释那样,尽可能地提取整个表