PDA

View Full Version : مبتدی: پاك كردن مقدار چندين تكست باكس



aram.joker
یک شنبه 10 آبان 1388, 17:53 عصر
دوستان من 60 تا تكست باكس دارم تو فرمم
كه اسماشون از t1 شروع ميشه تا t60

حالا ميخوام مقدار همشون رو پاك كنم
يك دستور ساده به ذهنم رسيد. ولي نتونستم پيادش كنم



for i=1 to 60
t i .text = ""
next i

Dr.Bronx
یک شنبه 10 آبان 1388, 18:04 عصر
for i = 1 to 60
T(i).text = ""
next i

aram.joker
یک شنبه 10 آبان 1388, 18:14 عصر
for i = 1 to 60
T(i).text = ""
next i


اين رو هم امتحان كرده بودم
ولي نميشه

IamOverlord
یک شنبه 10 آبان 1388, 18:49 عصر
سلام دوست عزیز!
بهتره یک textbox به نام t بزاری و بعد از اون یه آرایه ی 60 عضوی از t بسازی و اون وقت این کد رو بنویسی:

For i=0 to 59 'mitooni 1 to 60 ham bezari
t(i)=""
next i

اما حالا که برنامه ی شما این طور نیست باید این کد رو استفاده کنید:

For i = 0 To Controls.Count - 1
If Mid$(Controls(i).Name, 1, 1) = "t" And Val(Mid$(Controls(i).Name, 2, Len(Controls(i).Name) - 1)) > 1 - 1 And Val(Mid$(Controls(i).Name, 2, Len(Controls(i).Name) - 1)) < 60 + 1 Then
Controls(i).Text = ""
End If
Next
امتحان کردم برای t1 تا t60 جواب داد.:چشمک:

javadt
دوشنبه 11 آبان 1388, 09:16 صبح
چه جالب
IamOverlord جان می تونی یکم در مورد کدی که گذاشتی توضیح بدی
با تشکر

IamOverlord
دوشنبه 11 آبان 1388, 16:35 عصر
سلام دوستان!
Controls در VB6 یه مجموعه هست. مجموعه ای از تمام کنترل های استفاده شده در برنامتون.
در VB6 مجموعه های دیگه ای متل Forms یا Printers هم وجود داره.
به طور کلی برخی از روش هایی که می تونید روی مجوعه ها اعمال کنید:
Add اقلامی را به مجموعه ها می افزاید
Count تعداد اقلام درون یک مجموعه زا بر می گرداند
Remove اقلامی را از یک مجموعه حذف می کند
Item به یک کنترل در یک مجموعه ارجاع می دهد
یه مثال از کاربرد مجموعه ی Controls ،که Visible تمام کنترل ها رو False می کنه:

For i = 1 To Controls.Count - 1
Controls(i).Visible = True
Next i
یا این که کد زیر نام تمام کنترل های برنامه تان را روی فرم Print می کند:

For i = 1 To Controls.Count - 1
Print Controls(i).Name
Next i
خوب حالا کاری که من کردم اینه که اول یه حلقه ی for برای تمام کنترل های برنامه گذاشتم که چک می کنه که اگر نام هر یک از کنترل هایی که چک می شود از t1 تا t60 بود، Text اون کنترل (که TextBox هست) رو برابر "" می کنه:

Controls(i).Text = ""
خوب حالا چه طور چک می کنه که از t1 تا t60 هست:

If Mid$(Controls(i).Name, 1, 1) = "t" And Val(Mid$(Controls(i).Name, 2, Len(Controls(i).Name) - 1)) > 1 - 1 And Val(Mid$(Controls(i).Name, 2, Len(Controls(i).Name) - 1)) < 60 + 1 Then
این خط سه چیز رو چک می کنه:
اول این که حرف اول نام کنترل مورد نظر "t" باشه:

If Mid$(Controls(i).Name, 1, 1) = "t"
و دوم این که کل نام کنترل به جز حرف اول (که "t" هست) بیش تر از عدد 0 باشه:

And Val(Mid$(Controls(i).Name, 2, Len(Controls(i).Name) - 1)) > 1 - 1
و سوم این که کل نام کنترل به جز حرف اول (که "t" هست)کم تر از 61 باشه:

And Val(Mid$(Controls(i).Name, 2, Len(Controls(i).Name) - 1)) < 60 + 1
در اصل عبارت زیر که در موارد دوم و سوم استفاده شد، کل نام کنترل بدون حرف اول روبه ما می ده:

Val(Mid$(Controls(i).Name, 2, Len(Controls(i).Name) - 1))
در ضمن تابع Val یه عدد که از نوع متغیر رشته ای هست (یعنی داخل یه رشته نوشته شده) رو تبدیل به یه عدد که از نوع متغیر عددی هست می کنه. و تابع Mid$ هم قسمتی از یه رشته رو جدا می کنه.
:چشمک:

powerboy2988
دوشنبه 11 آبان 1388, 17:03 عصر
چرا اينهمه خودتونو اذيت مي كنيد!!!!
ببينيد كه با اين كد راحت هستيد...


Private Sub Command1_Click()
Dim txt As Control
'clear the text boxes
For Each txt In Form1
If TypeOf txt Is TextBox Then txt.Text = ""
Next
End Sub


با اين كار ديگه وابستگي با اسم هم نداريد....

Tasiyan
دوشنبه 11 آبان 1388, 17:25 عصر
بنظرم بهترین راه اینه که تکست ها رو ایندکس کنی بعد مثل آب خوردن

Private Sub Command1_Click()
For i = 0 To 60
Text1(i) = ""
Next
End Sub
:لبخند:

IamOverlord
دوشنبه 11 آبان 1388, 17:38 عصر
چرا اينهمه خودتونو اذيت مي كنيد!!!!
ببينيد كه با اين كد راحت هستيد...


Private Sub Command1_Click()
Dim txt As Control
'clear the text boxes
For Each txt In Form1
If TypeOf txt Is TextBox Then txt.Text = ""
Next
End Sub


با اين كار ديگه وابستگي با اسم هم نداريد....

سلام PowerBoy عزیز!!!
من فکر کردم که شاید Aram.Joker عزیز توی فرمش TextBox های دیگه ای به جز t1 تا t60 بخواد قرار بداه... در این صورت با کد شما متن کل TextBox ها "" می شه:لبخندساده: و دوما من که از برنامه ی ایشون خبر ندارم که بدونم TextBox های دیگه ای داره یا نه!
ضمنا ممنون که کد پاک کردن متن کل TextBox ها رو هم گذاشتید:تشویق:

IamOverlord
دوشنبه 11 آبان 1388, 17:41 عصر
بنظرم بهترین راه اینه که تکست ها رو ایندکس کنی بعد مثل آب خوردن

Private Sub Command1_Click()
For i = 0 To 60
Text1(i) = ""
Next
End Sub
:لبخند:

سلام دوست عزیز!
من هم توی پست اولم این موضوع رو اشاره کردم!
به هر حال ممنون که دوباره اشاره کردید!!!!!

vbhamed
دوشنبه 11 آبان 1388, 18:31 عصر
سلام
اينم يك راه كه تكست باكسهاي ديگه رو پاك نمي كنه و فقط تكست باكسهايي با نام t0 تا t... پاك ميشه


Private Sub Command1_Click()
Dim txt As Control
'clear the text boxes
For Each txt In Form1
If TypeOf txt Is TextBox Then
if left$(txt.name,1) = "t" Then txt.Text = ""
End If
Next
End Sub

IamOverlord
دوشنبه 11 آبان 1388, 18:57 عصر
سلام
اينم يك راه كه تكست باكسهاي ديگه رو پاك نمي كنه و فقط تكست باكسهايي با نام t0 تا t... پاك ميشه


Private Sub Command1_Click()
Dim txt As Control
'clear the text boxes
For Each txt In Form1
If TypeOf txt Is TextBox Then
if left$(txt.name,1) = "t" Then txt.Text = ""
End If
Next
End Sub



سلام vbhamed عزیز!
این راهی هم که شما گذاشتید راه بدی نیست ولی مشکلش اینه که اگر TextBox با نام tabc یا txyz یا... داشته باشیم اون ها رو هم پاک می می کنه. یعنی کلا هر textbox که حرف اول نامش "t" باشه رو پاک می کنه!

aram.joker
سه شنبه 12 آبان 1388, 11:35 صبح
دوستان از همگي ممنونم به خاطر راه هايي كه گفتيد
ولي انگار هر كدوم از اين راه ها يه جاش ميلنگه
مد نظر من يك راه سادست
ميشه درباره اون راه ايندكس و .... توضيح بديد

xxxxx_xxxxx
سه شنبه 12 آبان 1388, 11:59 صبح
ميشه درباره اون راه ايندكس و .... توضيح بديد

سلام،
برای ایندکس گذاری کردن اشیاء دو شرط وجود دارد: 1) اشیاء باید از یک نوع باشند. مثلاً همه TextBox باشند. 2) همه اشیاء باید نام یکسان داشته باشند.

پس شما برای همه این TextBox هایتان نام یکسان انتخاب کنید. و به ترتیب Index آنها را از 0 تا آخر مقداردهی کنید. (در پنجره Properties تکست باکس).

زمانی اشیاء را ایندکس گذاری می کنند که کارمشابهی را انجام میدهند. و برای جلوگیری از تکرار دستورات است.

اونوقت شما میتونید از کدی که در پست دوم (http://barnamenevis.org/forum/showpost.php?p=839069&postcount=2) یا هشتم (http://barnamenevis.org/forum/showpost.php?p=839704&postcount=8) این تاپیک گذاشته شده استفاده کنید. دقت کنید که (i) به ایندکس تکست باکس اشاره می کند.