求问高手,vb6 如何重绘某控件?
现在需要重绘某控件,类似C++的invalidate函数,请问vb中如何实现?谢谢了!!!这个控件是别人编写的控件,是连接摄像头的视频的,我终止播放后,需要刷新控件,清空...
现在需要重绘某控件,类似C++的invalidate函数,请问vb中如何实现?
谢谢了!!!
这个控件是别人编写的控件,是连接摄像头的视频的,我终止播放后,需要刷新控件,清空画面,这个控件恰恰没有refresh之类的方法啊,请问有什么好的办法呢???
我看他执行完了以后,调用了一个invalidate函数(C#),vb中似乎没有与之对应的函数。
还有,我估计此控件可能重载了invalidate函数,可能在重载过程释放了某些资源。。因为我发现加载此控件后,由于没有invalidate,程序无法正常关闭了。关闭后,任务管理器里面还有,而且cpu占用率100%,vb直接中断退出。。。可能是没有调用重载而造成的问题。 展开
谢谢了!!!
这个控件是别人编写的控件,是连接摄像头的视频的,我终止播放后,需要刷新控件,清空画面,这个控件恰恰没有refresh之类的方法啊,请问有什么好的办法呢???
我看他执行完了以后,调用了一个invalidate函数(C#),vb中似乎没有与之对应的函数。
还有,我估计此控件可能重载了invalidate函数,可能在重载过程释放了某些资源。。因为我发现加载此控件后,由于没有invalidate,程序无法正常关闭了。关闭后,任务管理器里面还有,而且cpu占用率100%,vb直接中断退出。。。可能是没有调用重载而造成的问题。 展开
2个回答
展开全部
我是直接对ADOC操作的,因此它不会受rows 的visible属性影响
因一般来说,每个DataGrid会对应一个ADODC,或RecordSet对象作为数据源。
直接对它们操作就行了。这样有个好处就是可以根据字段的属性格式化相应的列,如将调整日期或日期的显示格式。
'输出表头
For i = 0 To Me.Adodc1.Recordset.Fields.Count - 1
'设置列名
strColName1 = Chr(65 + i) & "1"
oSheet.Range(strColName1).Value = Me.DataGrid1.Columns(i).Caption
'据DataGrid中的宽度设置EXCEL列宽
StrColName = Chr(65 + i) & ":" & Chr(65 + i)
oSheet.Columns(StrColName).ColumnWidth = Int(Me.DataGrid1.Columns(i).Width / 90)
Next i
'输出内容
Do Until Me.Adodc1.Recordset.EOF
j = j + 1
For i = 0 To Me.Adodc1.Recordset.Fields.Count - 1
StrColName = Chr(65 + i) & CStr(j + 1)
If Not IsNull(Me.DataGrid1.Columns(i)) And Me.DataGrid1.Columns(i) <> "" Then
'根据列的属性对表格数据作相应格式化处理
Select Case Me.Adodc1.Recordset.Fields(i).Type
Case adCurrency
oSheet.Range(StrColName).Value = CCur(Me.DataGrid1.Columns(i))
Case adNumeric
oSheet.Range(StrColName).Value = CLng(Me.DataGrid1.Columns(i))
Case adInteger
oSheet.Range(StrColName).Value = CInt(Me.DataGrid1.Columns(i))
Case adDate
oSheet.Range(StrColName).Value = CDate(Me.DataGrid1.Columns(i))
oSheet.Range(StrColName).NumberFormatLocal = "yyyy-mm-dd hh:mm"
Case Else
oSheet.Range(StrColName).Value = Me.DataGrid1.Columns(i)
End Select
Else
oSheet.Range(StrColName).Value = Me.DataGrid1.Columns(i)
End If
Next i
Me.Adodc1.Recordset.MoveNext
Loop
因一般来说,每个DataGrid会对应一个ADODC,或RecordSet对象作为数据源。
直接对它们操作就行了。这样有个好处就是可以根据字段的属性格式化相应的列,如将调整日期或日期的显示格式。
'输出表头
For i = 0 To Me.Adodc1.Recordset.Fields.Count - 1
'设置列名
strColName1 = Chr(65 + i) & "1"
oSheet.Range(strColName1).Value = Me.DataGrid1.Columns(i).Caption
'据DataGrid中的宽度设置EXCEL列宽
StrColName = Chr(65 + i) & ":" & Chr(65 + i)
oSheet.Columns(StrColName).ColumnWidth = Int(Me.DataGrid1.Columns(i).Width / 90)
Next i
'输出内容
Do Until Me.Adodc1.Recordset.EOF
j = j + 1
For i = 0 To Me.Adodc1.Recordset.Fields.Count - 1
StrColName = Chr(65 + i) & CStr(j + 1)
If Not IsNull(Me.DataGrid1.Columns(i)) And Me.DataGrid1.Columns(i) <> "" Then
'根据列的属性对表格数据作相应格式化处理
Select Case Me.Adodc1.Recordset.Fields(i).Type
Case adCurrency
oSheet.Range(StrColName).Value = CCur(Me.DataGrid1.Columns(i))
Case adNumeric
oSheet.Range(StrColName).Value = CLng(Me.DataGrid1.Columns(i))
Case adInteger
oSheet.Range(StrColName).Value = CInt(Me.DataGrid1.Columns(i))
Case adDate
oSheet.Range(StrColName).Value = CDate(Me.DataGrid1.Columns(i))
oSheet.Range(StrColName).NumberFormatLocal = "yyyy-mm-dd hh:mm"
Case Else
oSheet.Range(StrColName).Value = Me.DataGrid1.Columns(i)
End Select
Else
oSheet.Range(StrColName).Value = Me.DataGrid1.Columns(i)
End If
Next i
Me.Adodc1.Recordset.MoveNext
Loop
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询