Vb.net 如何在windows窗体应用程序中刷新或重新绘制面板区域
我正在使用一些文本和图像的动态标签。我在loadflow函数中使用它们 面板上的图像被正确加载,当我在新DB调用后再次尝试检索时,图像不会被重新绘制或刷新 我已经尝试过一些内置函数,如Invalidate、Refresh、Update,但根本不起作用 带有图像和文本的标签如下所示 我的代码是Vb.net 如何在windows窗体应用程序中刷新或重新绘制面板区域,vb.net,windows,Vb.net,Windows,我正在使用一些文本和图像的动态标签。我在loadflow函数中使用它们 面板上的图像被正确加载,当我在新DB调用后再次尝试检索时,图像不会被重新绘制或刷新 我已经尝试过一些内置函数,如Invalidate、Refresh、Update,但根本不起作用 带有图像和文本的标签如下所示 我的代码是 Private Function LoadFlow() Dim i As Integer = 0 'Check if datatable has rows and is not nul
Private Function LoadFlow()
Dim i As Integer = 0
'Check if datatable has rows and is not null
If dtFlowPanel.Rows.Count > 0 AndAlso dtFlowPanel IsNot Nothing Then
cboCheckPointStatus.DataSource = dtFlowPanel
cboCheckPointStatus.DisplayMember = "CHECKPOINTNAME"
cboCheckPointStatus.ValueMember = "TERMINALCHECKPOINTID"
UltraPanel1.Visible = True
Do While (i < dtFlowPanel.Rows.Count)
'CheckPointName Label
lblCheckPointName = New Label
lblCheckPointName.Text = dtFlowPanel.Rows(i)("CHECKPOINTNAME").ToString()
lblCheckPointName.Name = "CheckPoint"
lblCheckPointName.ForeColor = Color.White
lblCheckPointName.AutoSize = False
lblCheckPointName.Height = 20
lblCheckPointName.Width = 100
lblCheckPointName.Location = New Point((i * 100), 50)
'Round Circle Image Label
lblImage1 = New Label
lblImage1.Name = "Test" + i.ToString()
lblImage1.Tag = i.ToString
'If lblImage1.Name = "Test0" Then
' lblImage1.Image = Image.FromFile("c:\\Untitled1.png")
'End If
'If lblImage1.Name = "Test1" Then
' lblImage1.Image = Image.FromFile("c:\\Untitled1.png")
'End If
'If lblImage1.Name = "Test2" Then
' lblImage1.Image = Image.FromFile("c:\\Untitled2.png")
'End If
lblImage1.ImageAlign = ContentAlignment.MiddleRight
lblImage1.BorderStyle = BorderStyle.None
lblImage1.AutoSize = False
lblImage1.Height = 20
lblImage1.Width = 30
lblImage1.Location = New Point((i * 100), 70)
'Solid Black Line Image Label
lblImage2 = New Label
lblImage2.Name = "Test" + i.ToString()
lblImage2.Tag = i.ToString
lblImage2.Height = 20
lblImage2.Width = 100
lblImage2.Location = New Point((i * 100), 70)
'Green Circle with Green Line
If dtFlowPanel.Rows(i)("Flag") = 0 Then
lblImage1.Image = Image.FromFile("c:\\Untitled1.png")
lblImage2.Image = Image.FromFile("c:\\Line1.png")
'Yellow Circle with White Line
ElseIf dtFlowPanel.Rows(i)("Flag") = 1 Then
lblImage1.Image = Image.FromFile("c:\\Untitled2.png")
lblImage2.Image = Image.FromFile("c:\\Line.png")
'Red Circle with White Line
ElseIf dtFlowPanel.Rows(i)("Flag") = 2 Then
lblImage1.Image = Image.FromFile("c:\\Untitled.png")
lblImage2.Image = Image.FromFile("c:\\Line.png")
End If
'DatePicker
dtpicker = New DateTimePicker
dtpicker.Name = "Date" + i.ToString()
dtpicker.Format = DateTimePickerFormat.Time
dtpicker.ShowUpDown = True
dtpicker.Height = 20
dtpicker.Width = 95
'horizontal
dtpicker.Location = New Point((i * 100), 100)
If Not IsDBNull(dtFlowPanel.Rows(i)("CheckPointTimeValue")) Then
dtpicker.Value = dtFlowPanel.Rows(i)("CheckPointTimeValue")
End If
Me.UltraPanel1.ClientArea.Controls.Add(lblImage1)
Me.UltraPanel1.ClientArea.Controls.Add(lblImage2)
Me.UltraPanel1.ClientArea.Controls.Add(dtpicker)
Me.UltraPanel1.ClientArea.Controls.Add(lblCheckPointName)
lblImage1.Refresh()
lblImage2.Refresh()
i = (i + 1)
Loop
Else
UltraPanel1.Visible = False
End If
Return Nothing
End Function
私有函数LoadFlow()
尺寸i为整数=0
'检查datatable是否有行且不为空
如果dtFlowPanel.Rows.Count>0并且dtFlowPanel也不是空的,则
cboCheckPointStatus.DataSource=dtFlowPanel
cboCheckPointStatus.DisplayMember=“检查点名称”
cboCheckPointStatus.ValueMember=“TERMINALCHECKPOINTID”
UltraPanel1.Visible=True
执行时(i
很难判断您的程序在做什么,但您的问题是:
lblImage1 = New Label
您不必创建新标签,您可以通过正在调用的
image.FromFile
使用新图像修改现有标签。如果使用该方法加载图像,您甚至不必调用刷新
,感谢您的响应,但我已经解决了此问题如果不是lblImage1什么都不是,那么就调用Me.UltraPanel1.ClientArea.Controls.Remove(lblImage1)结束如果不是lblImage2什么都不是那么Me.UltraPanel1.ClientArea.Controls.Remove(lblImage2)结束如果添加了这个If条件,好的。很高兴你拿到了。