在做一个用listview实时显示excel中符合条件的项目的模块,显示结果总是错位,我是新手,望高手指点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在做一个用listview实时显示excel中符合条件的项目的模块,显示结果总是错位,我是新手,望高手指点相关的知识,希望对你有一定的参考价值。
数据源在程序目录下basedata.xls中关键代码如下
Public xlApp As Excel.Application
Public xlBook As Excel.Workbook
Public xlsheet As Excel.Worksheet
Public lsFileName As String
Option Explicit
Dim bNUm As Integer
Dim cNUm As Integer
Dim S As String
Dim M As String
Dim strInput As String
Private Sub Form_Load()
Set xlApp = CreateObject("excel.Application")
lsFileName = App.Path & "\basedata.xls"
xlApp.Visible = False
Set xlBook = xlApp.Workbooks.Open(lsFileName)
Set xlsheet = xlBook.Worksheets(1)
End Sub
Private Sub Text1_Change()
Dim i%, j%
bNUm = Len(Text1.Text)
ListView1.ListItems.Clear
strInput = Left(Text1.Text, bNUm)
For i = 2 To 500
S = xlApp.Range("B" & i).Value
M = xlApp.Range("A" & i).Value
cNUm = Len(S)
For j = 1 To cNUm - bNUm
If Mid(S, j, bNUm) = strInput Then
ListView1.ListItems.Add().Text = M
ListView1.ListItems.Add().SubItems(1) = S
End If
Next
Next
End Sub
excel内容:
运行结果:
错位了~
ListView1.ListItems.Add().Text = M
ListView1.ListItems.Add().SubItems(1) = S
尝试并参考以下两句改改试试吧:
dim Hang as long '声明一个变量存储总行数
Hang=ListView1.ListItems.Count '获取当前总行数
ListView1.ListItems.Item(Hang+1).SubItems(1)=M
ListView1.ListItems.Item(Hang+1).SubItems(2)=S 参考技术B ListView1.ListItems.Add().Text = M
ListView1.ListItems.Add().SubItems(1) = S
两个都是ADD肯定要错位啊,第二个ADD改为修改文本内容撒,太久不用VB,方法搞忘了 参考技术C ListView1.ListItems.Add().SubItems(1) = S
改成
ListView1.ListItems(ListView1.ListItems.count).SubItems(1) = S本回答被提问者采纳
winform中如何在多线程中更新UI控件--ListView实时显示执行信息
1、在winform中,所有对UI的操作,都得回到UI线程(主线程)上来,才不会报错
线程间操作无效: 从不是创建控件的线程访问它。
2、在winform中,允许通过Control.invoke对控件进行操作。如下代码:
private void btnTest_Click(object sender, EventArgs e) { CheckA(); } private void CheckA() { System.Threading.ThreadPool.QueueUserWorkItem(t => { ShowInfo("检测开始....."); System.Threading.Thread.Sleep(3000); ShowInfo("暂停3秒结束....."); System.Threading.Thread.Sleep(2000); ShowInfo("暂停2秒结束....."); System.Threading.Thread.Sleep(1000); ShowInfo("检测结束"); }); } private void ShowInfo(string Info) { listView1.Invoke(new Action(() => { listView1.Columns[0].Width = listView1.ClientSize.Width; listView1.Items.Insert(0, new ListViewItem(Info)); })); }
以上是关于在做一个用listview实时显示excel中符合条件的项目的模块,显示结果总是错位,我是新手,望高手指点的主要内容,如果未能解决你的问题,请参考以下文章