PDA

View Full Version : ایجاد Index



Hossein Bazyan
یک شنبه 12 آذر 1385, 18:46 عصر
دوستان سلام
دوستانی که با وی بی کار کرده اند (منظورم vb 6.00) میدانند که میتوان اشیاء هم نام را به شکل یک دسته و با یک نام که دارای ایندکسهای مختلفی هستند تقسیم نمود .
مثلا 10 عدد TextBox با یک نام و با ایندکسهای از صفر تا 9 میتوان ایجاد نمود که این دسته بندی در خیلی مواقع کار برنامه نویسی را خیلی آسان مینماید .
حال سوال من این است که آیا این چنین امکانی در VB.NET وجود دارد یا خیر ؟

problem
یک شنبه 12 آذر 1385, 19:26 عصر
مطمئن نیستم که درست فهمیده*باشم منظور شما رو، اما اگر مثلاً ۱۰ تا TextBox شما اسماشون tb1 و tb2 .... تا tb10 باشه و بخوای توی اون*ها لوپ کنی، می*تونی همچین کاری بکنی:



Dim i as Byte
For i = 1 to 10
Me.Controls("tb" & i).Text = ""
Next

Hossein Bazyan
یک شنبه 12 آذر 1385, 19:32 عصر
نه دوست عزیز منظورم این نبود
ببین ما 10 عدد تکت باکس داریم بنام txtAdd حال برای مقدار دهی از کد زیر میتوان استفاده نمود


dim i as byte
for i=0 to 9
txtAdd(i)="Input"
next


حال هر 10 عدد تکست باکس مقدار Input را میگیرند . یا مثلا برای اینکه مقدار موجود در تکست باکس پنجم را بدست بیاریم باید بنویسیم


dim m as String
m=txtAdd(4)

البته این کد در وی بی 6 میباشد
امیدوارم متوجه منظورم شده باشید

problem
یک شنبه 12 آذر 1385, 20:38 عصر
خوب اون توی VB6 بود که شما یک Array* از textbox ها می*ساختی. الان توی دات نت انقدری که من بلدم به جای ساختن همچین آرایه*ای، از me.controls استفاده می*کنن. اسم textbox* ها هم نمی*تونه مثل هم باشه عینا چون در OOP باید اسم اشیایی که توی یک scope*هستن فرق داشته باشه.
حالا اون راه حل پیشنهادی من چه ایرادی داشت؟

Hossein Bazyan
یک شنبه 12 آذر 1385, 22:45 عصر
دوست عزیز اگه بتونیم از آرایه استفاده کنیم کارها خیلی راحتتر پیش میره
به این کد زیر دقت کن


Private Sub txtAdd_GotFocus(Index As Integer)
txtAdd(Index).SelStart = 0
txtAdd(Index).SelLength = Len(txtAdd(Index))
End Sub

اگه در کد بالا هر تکست باسی(Index) فوکوس را به دست گرفت متنش آبی میشود چون از آرایه استفاده شده این کد برای هر 10 ( یا هر چند) تکست باکس جواب میده حال اگه همین کدها ا برای 10 عدد تکست باکس جداگانه بنویسیم کلی برنامه نویسی میشه و کلی درد سر
آیا در دات نت هم چنین حالتی را میشه ایجاد کرد؟

linux
دوشنبه 13 آذر 1385, 00:54 صبح
دوست عزیز اگه بتونیم از آرایه استفاده کنیم کارها خیلی راحتتر پیش میره
به این کد زیر دقت کن


Private Sub txtAdd_GotFocus(Index As Integer)
txtAdd(Index).SelStart = 0
txtAdd(Index).SelLength = Len(txtAdd(Index))
End Sub

اگه در کد بالا هر تکست باسی(Index) فوکوس را به دست گرفت متنش آبی میشود چون از آرایه استفاده شده این کد برای هر 10 ( یا هر چند) تکست باکس جواب میده حال اگه همین کدها ا برای 10 عدد تکست باکس جداگانه بنویسیم کلی برنامه نویسی میشه و کلی درد سر
آیا در دات نت هم چنین حالتی را میشه ایجاد کرد؟
در .نت بعضی چیزها بطور اساسی تغییر کرده است.
برای این کار شما 2 روش هست
1- یک کلاس مشتق شده از textbox درست کنید و همین کد را بنویسد در رخداد gotfocus
2- در ویبی 6 اسم تابع رخداد خیلی مهم بود ولی در .نت این مهم نیست
از این کد می توانید استفاده کنید


Private Sub TextBox1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus, TextBox2.GotFocus
' do something here!
End Sub

asar_001
دوشنبه 13 آذر 1385, 06:19 صبح
در .net هم می شه از hashtable استفاده کرد که ارایه ای از کنترل ها می سازه

jghalai
دوشنبه 13 آذر 1385, 12:35 عصر
اگه بخوای از آرایه ای از کنترل ها در Net استفاده کنی باید خودت کنترل ها را بسازی :

Dim TextBoxes(10) as TextBox
for i=0 to 9
textboxes(i).text="txt" & i
me.controls.Add(TextBoxes(i)
بقیه خصوصیات را نیز همینطور مقدار دهی کنید
next
me.resumeLayout

problem
دوشنبه 13 آذر 1385, 16:51 عصر
خوب حسین آقا، اگر واقعا مشکل شما فقط همانی است که در مثال گفتی همچین کدی برای شما مناسب تره که:



Private Sub TextBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles TextBox1.Enter, TextBox2.Enter
Dim tmpTextBox As TextBox
tmpTextBox = CType(sender, TextBox)
tmpTextBox.Text = "HAS"
'Whatever you want to do
End Sub


توجه داری که من به سادگی یک Sub رو مسئول Handle‌ کردن دوتا رویداد کردم، و برای این که بفهمم کدوم شیئ دچار رویداد شده، از sender بهره کافی بردم!

Hossein Bazyan
دوشنبه 13 آذر 1385, 17:06 عصر
دوستان از همه شما سپاسگزارم ( دکمه تشکر نمونده و الا از اون استفاده میکردم ) من هنوز وقت تست آنها را پیدا نکردم