View Full Version : آموزش: مشکل در لود کردن فایل تکست در ListViwe
Haj MilaD
چهارشنبه 12 آذر 1393, 00:21 صبح
سلام
دوستان بنده لیستی (فایل Text) در ListViwe لود میکنم ولی مشکل اینه وقتی فایل با لیست مثلا 10000 تایی به لیست لود میکنم مدتی برنامه در حالت هنگ میمونه و بعد این که لیست کامل لود شد نشون میده
میخوام اول در بالا نشون بده چه تعداد اسم در لیست قرار داده و دوم این که هنگ نکنه و وقتی لیست اسم زیاد لود میکنم در هنگام لود بشمره خودش و هنگ نکنه)فکر کنم باید یک تایمر بدم و تعریف کنم که count لیست رو بشمره به این صورت...
126254
meys34
چهارشنبه 12 آذر 1393, 16:55 عصر
قبل از حلقه ای که لیست رو پر می کنید، لیست رو hidden کنید و در آخر visible کلی تو سرعتش تاثیر میذاره...
vbhamed
چهارشنبه 12 آذر 1393, 18:45 عصر
سلام
نياز به تايمر نيست
داخل حلقه اي كه به ليست اضافه ميكنه قبل از Next دستور DoEvents رو بزاريد و قبل از اين دستور هم دستور نمايش تعداد
مثلا اگر متغير حلقه i هست بنويسيد Me.Caption = i ، اينطوري تعداد در عنوان فرم نمايش داده ميشه
Haj MilaD
چهارشنبه 12 آذر 1393, 20:40 عصر
سلام
نياز به تايمر نيست
داخل حلقه اي كه به ليست اضافه ميكنه قبل از Next دستور DoEvents رو بزاريد و قبل از اين دستور هم دستور نمايش تعداد
مثلا اگر متغير حلقه i هست بنويسيد Me.Caption = i ، اينطوري تعداد در عنوان فرم نمايش داده ميشه
دوست عزیز این برنامه لود به لیست هست - انجام دادم ولی تغییر نکرده
لطفا اگر نقضی داره بگید...
Private Sub Command1_Click(Index As Integer)
Dim UTD As String, I As Long, x As Long
CommonDialog1.FileName = ""
CommonDialog1.DialogTitle = ("Tonel.Org")
CommonDialog1.Filter = ("Text Files Only Please (.txt) |*.txt|")
CommonDialog1.ShowOpen
If CommonDialog1.FileName = "" Then Exit Sub
Lv1.Visible = False
'Timer2.Enabled = True
Open CommonDialog1.FileName For Input As #1
Do Until EOF(1) = True
Line Input #1, UTD
DoEvents
If Not Trim$(UTD) = "" Then Lv1.ListItems.Add , , UTD
Loop
Close #1
Lv1.Visible = True
'Timer2.Enabled = False
'XPFrame1.Caption = " User's : " & lv1.ListItems.Count
'NowUser = 1
End Sub
vbhamed
چهارشنبه 12 آذر 1393, 23:46 عصر
سلام
منظور شما از اينكه هنگ نكنه چيه، يعني دقيقا ميخواين برنامه چطوري كار كنه
تو اين برنامه اي كه نوشتيد كه جايي اون دستور نمايش ركورد جاري كه گفتم رو ننوشتيد پس چيزي روي صفحه نميبينيد
Haj MilaD
پنج شنبه 13 آذر 1393, 00:01 صبح
سلام
منظور شما از اينكه هنگ نكنه چيه، يعني دقيقا ميخواين برنامه چطوري كار كنه
تو اين برنامه اي كه نوشتيد كه جايي اون دستور نمايش ركورد جاري كه گفتم رو ننوشتيد پس چيزي روي صفحه نميبينيد
شاید منظور خود رو واضح نرسوندم
وقتی یک لیست با اسم زیاد لود میکنم به علت زیادی نام ها تا لود شدن همه نام ها در ListViwe برنامه هنگ میکنه تا نام ها کامل در لیست قرار گیرند
میخوام یک شمارنده بالای لیست باشه و تعداد نام هارو بدون هنگ کردن بشمره!! یک نمونه عکس متحرک برای درک بهتر گذاشتم
http://s5.picofile.com/file/8155141650/Test_Prog.gif
vbhamed
پنج شنبه 13 آذر 1393, 03:16 صبح
سلام
خب دستورات پست 3 هم براي همين بود ولي شما دقيقا اونها رو اجرا نكرديد، برنامتون و نمونه فايل txt رو بزاريد
Haj MilaD
پنج شنبه 13 آذر 1393, 03:27 صبح
سلام
خب دستورات پست 3 هم براي همين بود ولي شما دقيقا اونها رو اجرا نكرديد، برنامتون و نمونه فايل txt رو بزاريد
دقیقا همینطور هست
من مقداری کار کردم رو کد و درست شد کمی ولی بعد لود اررور میده
فایل تکست کد پیوست شد...
مشکل در این تکه کد هست
XPFrame1.Caption = " User's : " & Lv1.ListItems.Count
بنده یک Frame اضافه کردم و برنامه با کد کامل کار کرد ولی باز مدت زمان بارگزاری نام هارو هنگ میکنه!!!
meys34
پنج شنبه 13 آذر 1393, 13:21 عصر
Private Sub Command1_Click()
Dim i As Long
For i = 1 To 50000
List1.AddItem i
Label1.Caption = "Item Added: " & i
Label1.Refresh
If (i Mod 143) = 0 Then DoEvents
Next
End Sub
به این روش هر 143 آیتمی که اضافه میکنه یه مرتبه DoEvents فراخوانی میکنه تا برنامه هنگ نشه...
Haj MilaD
پنج شنبه 13 آذر 1393, 15:04 عصر
کار ساز نبود
meys34
پنج شنبه 13 آذر 1393, 23:35 عصر
دقیقا همینطور هست
من مقداری کار کردم رو کد و درست شد کمی ولی بعد لود اررور میده
فایل تکست کد پیوست شد...
مشکل در این تکه کد هست
XPFrame1.Caption = " User's : " & Lv1.ListItems.Count
بنده یک Frame اضافه کردم و برنامه با کد کامل کار کرد ولی باز مدت زمان بارگزاری نام هارو هنگ میکنه!!!
چرا اینو XPFrame1.Caption = " User's : " & Lv1.ListItems.Count خارج از حلقه گذاشتید آخه؟؟؟؟؟؟؟؟؟؟؟
کار ساز نبود
درستش میشه این:
Private Sub Command1_Click(Index As Integer)
Dim UTD As String, I As Long, x As Long
CommonDialog1.FileName = ""
CommonDialog1.DialogTitle = ("Tonel.Org")
CommonDialog1.Filter = ("Text Files Only Please (.txt) |*.txt|")
CommonDialog1.ShowOpen
If CommonDialog1.FileName = "" Then Exit Sub
Lv1.Visible = False
Open CommonDialog1.FileName For Input As #1
Do Until EOF(1) = True
Line Input #1, UTD
If Not Trim$(UTD) = "" Then Lv1.ListItems.Add , , UTD
XPFrame1.Caption = " User's : " & lv1.ListItems.Count
XPFrame1.Refresh
If (lv1.ListItems.Count Mod 143) = 0 Then DoEvents
Loop
Close #1
Lv1.Visible = True
'NowUser = 1
End Sub
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.