PDA

View Full Version : سوال: ارايه اي از كنترل ها



vahab2010
سه شنبه 23 آذر 1389, 00:11 صبح
سلام
چه طور ميشه ارايه اي از كنترل ها رو در vb.netساخت تو vb6 اين كار خيلي راحت بود كافي بود كه فقط به همه كنترل ها يك نام بديم و بعد يه انديس براي هر كدومشون درست ميشد اما اين جا نميدونم چه طوره
خواهش ميكنم اگه كسي در اين باره اطلاعي داره كمك كنه

تو اين سايت يه چيزايي بود اما من كه متوجه نشدم شيد شما متوجه شيد

http://www.codeproject.com/KB/vb/Control_Arrays.aspx

ali_najari
سه شنبه 23 آذر 1389, 01:26 صبح
دوست عزیز اینجا میتونید از روش زیر استفاده کنید:
دوست عزیز این کد رو توی Form Load با توی یک Button بزار


Dim TB az New textBox
For I as integer = 1 to 5
TB.name = "textbox" & i
Tb.Backcolor=Color.White
if i = 1 then
Tb.loacation = new point(10,10)
else
Tb.loacation = new point(10,(I*10) + (i*Tb.height))
end if
AddHandler Tb.Enter, AddressOf Textbox_Enter
AddHandler Tb.Leave, AddressOf Textbox_Leave
me.Controls.add(tb)
next

این هم مابقی کدهای مورد نیاز


Private Sub Textbox_Enter(byval Sender as object,ByVal e As System.EventArgs)
DirectCast(sender, TextBox).BackColor = Color.FromArgb(255, 255, 192)
end Sub
Private Sub Textbox_Leave(byval Sender as object,ByVal e As System.EventArgs)
DirectCast(sender, TextBox).BackColor = Color.White
end Sub

vahab2010
یک شنبه 28 آذر 1389, 11:23 صبح
من نميخوام وقتي فرم لودميشه چند تا كنترل اضافه كنه و اونا رو با هم ارايه كنه من چند تا تكس دارم كه از اول بودن و با انجام يه كار ميخوام همين تكس هايي كه از اول بودن با هم ارايه بشن

Rezahak
یک شنبه 28 آذر 1389, 11:41 صبح
باید یک آرایه یا collection از نوع textbox بسازی بعد آن textbox ها را به آن اضافه کنی :
در ابتدای class فرمی که کنترلهایت در آن است بنویس:


Private txtcol As New Collections.ObjectModel.Collection(Of TextBox)

سپس در formLoad بنویس :

txtcol.add(Textbox1)
txtcol.add(Textbox2)
...

meysam_meysam74
یک شنبه 28 آذر 1389, 12:29 عصر
سلام
شما اول فرض میکنیم 2 تا تکس باکس دارید
textbox1 , textbox2
تویه روال چنج تکس باکس 1 کد مورد نظرتون رو مینویسید یا هر روال دیگه ای که دلتون میخواد من مثلا زدم
بعدش اخر روال یه ویرگول مزارید و به این شکل مینویسید
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged ,TextBox2.TextChanged
نکته مهم اینه
TextBox1.TextChanged ,TextBox2.TextChanged
برای هر روالی عوض میشه حالا شما چه جوری باید متوجه بشید که کدوم تکس جنج شده

Select Case sender.GetHashCode
Case TextBox1.GetHashCode
MsgBox("text1")
Case TextBox2.GetHashCode
MsgBox("text2")
End Select

امید وارم مشکل حل شده باشه

Rezahak
یک شنبه 28 آذر 1389, 13:12 عصر
سلام
شما اول فرض میکنیم 2 تا تکس باکس دارید
textbox1 , textbox2
تویه روال چنج تکس باکس 1 کد مورد نظرتون رو مینویسید یا هر روال دیگه ای که دلتون میخواد من مثلا زدم
بعدش اخر روال یه ویرگول مزارید و به این شکل مینویسید
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged ,TextBox2.TextChanged
نکته مهم اینه
TextBox1.TextChanged ,TextBox2.TextChanged
برای هر روالی عوض میشه حالا شما چه جوری باید متوجه بشید که کدوم تکس جنج شده

Select Case sender.GetHashCode
Case TextBox1.GetHashCode
MsgBox("text1")
Case TextBox2.GetHashCode
MsgBox("text2")
End Select

امید وارم مشکل حل شده باشه

دوست عزیز اینهایی که نوشتی چه ارتباطی به آرایه داره؟؟؟؟؟؟

meysam_meysam74
یک شنبه 28 آذر 1389, 20:46 عصر
خوب ببخشید من بد متوجه شدم
من جواب دوست عزیزمون اقا علی را یه مقدار عوض کردم و حالا شما میتونید ازش استفاده کنید اگه منظورتون دقیقا چیزی هست که تویه ویبی 6 بود و انظار دارید اینجا هم یه اندکس اونجوری باشه نه تویه وی بی دات نت که از فرامورکر استفاده بکنه چینی چیزی نیست یا به قول معروف گشتم نبود نگرد نیست

Dim TB(3) As TextBox
Dim ArrH(3) As Long
Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
Select Case sender.GetHashCode
Case ArrH(0)
MsgBox("change1")
Case ArrH(1)
MsgBox("change2")
Case ArrH(2)
MsgBox("change3")
Case ArrH(3)
MsgBox("change4")
End Select
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TB(0) = TextBox1
TB(1) = TextBox2
TB(2) = TextBox3
TB(3) = TextBox4
For I As Integer = 0 To 3
ArrH(I) = TB(I).GetHashCode
TB(I).BackColor = Color.White
AddHandler TB(I).TextChanged, AddressOf TextBox2_TextChanged
Next
End Sub

omid-vbAuto
دوشنبه 29 آذر 1389, 00:20 صبح
دوستان من یه سوال داشتم:

به طور مثال چطوری می تونیم 10 تا textbox تولید کنیم که الگریتم Name اونها (نه Text شون) به صورت textbox1 و textbox2 و textbox3 و ... و textbox10 باشه.با این شرط که در حین کد نویسیمون بتونیم کد زیرو بنویسیم:





TextBox7.Text = "23"




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


با تشکر فراوان

meysam_meysam74
دوشنبه 29 آذر 1389, 10:01 صبح
دوست عزیز سوالتون واضع نیست

omid-vbAuto
دوشنبه 29 آذر 1389, 10:12 صبح
دوست عزیز سوالتون واضع نیست

دوست عزیز من می خوام با کد نویسی بطور مثال 10 تا تکس باکس درست کنم.خوب؟

حالا می خوام برای هر تکس باکس درست شده یه نام مشخصی هم بدم.مثلا textbox1 و textbox2 و ... .خوب؟

و می خوام از این تکس باکس ها در کد نویسی هام بهصورت زیر استفاده کنم.همین:لبخندساده:





TextBox1.Text = "OMID"
Me.Text = TextBox1.Text

Rezahak
دوشنبه 29 آذر 1389, 13:51 عصر
دوستان من یه سوال داشتم:

به طور مثال چطوری می تونیم 10 تا textbox تولید کنیم که الگریتم Name اونها (نه Text شون) به صورت textbox1 و textbox2 و textbox3 و ... و textbox10 باشه.با این شرط که در حین کد نویسیمون بتونیم کد زیرو بنویسیم:





TextBox7.Text = "23"




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


با تشکر فراوان

ببین دوست عزیز چون هر کنترل برای دسترسی و برنامه نویسی احتیاج به یک متغیر در حافظه دارد پس باید از قبل تعریف و مقدار دهی اولیه و ... شود ای چیزی که ما درکد مویسی به عنوان instance به آن مراجعه می کنیم و property و method و ... آنرا مقدار دهی یا call می کنیم در اصل نام آن متغیرها می باشد . قواعد نامگذاری متغیرها به ما اجازه نمیدهد در حالت runtime نام یک متغیر را به صورت دینامیک قراردهیم .دقت کنید گفتم نام متغیر نه خصوصیت name آنرا فقط می توانیم برای ایجاد متغیرهای دینامیک به صورتیکه قابلیت رد گیری داشته باشند از آرایه ، collection و ... استفاده کرد البته می توان آنرا بدون اضافه کردن در آرایه یا collection در form.controls اضافه کرد و از همان طریق هم آنرا ردیابی کرد ولی ناگفته نماند که form.controls نیز یک collection می باشد

omid-vbAuto
دوشنبه 29 آذر 1389, 16:30 عصر
ببین دوست عزیز چون هر کنترل برای دسترسی و برنامه نویسی احتیاج به یک متغیر در حافظه دارد پس باید از قبل تعریف و مقدار دهی اولیه و ... شود ای چیزی که ما درکد مویسی به عنوان instance به آن مراجعه می کنیم و property و method و ... آنرا مقدار دهی یا call می کنیم در اصل نام آن متغیرها می باشد . قواعد نامگذاری متغیرها به ما اجازه نمیدهد در حالت runtime نام یک متغیر را به صورت دینامیک قراردهیم .دقت کنید گفتم نام متغیر نه خصوصیت name آنرا فقط می توانیم برای ایجاد متغیرهای دینامیک به صورتیکه قابلیت رد گیری داشته باشند از آرایه ، collection و ... استفاده کرد البته می توان آنرا بدون اضافه کردن در آرایه یا collection در form.controls اضافه کرد و از همان طریق هم آنرا ردیابی کرد ولی ناگفته نماند که form.controls نیز یک collection می باشد


آفرین مهندس:تشویق:


دقیقا منظور من هم همین بود که شما به خوبی اشاره کردین.


حالا ما با چه کدی کنترل هائی ایجاد کنیم و بتونیم آنهارا ردیابی کرده وتغییرات لازمه رو در آنها اعمال کنیم؟

Rezahak
دوشنبه 29 آذر 1389, 16:53 عصر
حالا ما با چه کدی کنترل هائی ایجاد کنیم و بتونیم آنهارا ردیابی کرده وتغییرات لازمه رو در آنها اعمال کنیم؟
دوست عزیز فرض کنید شما می خواهید 10 تا textbox به طور دینامیک در حالت runtime ایجاد کنید . باید کد زیر را در formload یا click یک button بنویسید:

dim txt as TextBox
for idx as integer = 1 to 10
txt=new Textbox
txt.name = "TextBox" & idx.tostring
txt.top = 10 +txt.height * idx + (idx-1)*10
me.controls.add(txt)

next
حالا این رو داشته باش تا بقیه رو برات توضیح بدم راستش الان وقت ندارم اگه این رو تست کردی نتیجه رو بنویس تا بقیه رو توضیح بدم

omid-vbAuto
دوشنبه 29 آذر 1389, 18:56 عصر
دوست عزیز فرض کنید شما می خواهید 10 تا textbox به طور دینامیک در حالت runtime ایجاد کنید . باید کد زیر را در formload یا click یک button بنویسید:

dim txt as TextBox
for idx as integer = 1 to 10
txt=new Textbox
txt.name = "TextBox" & idx.tostring
txt.top = 10 +txt.height * idx + (idx-1)*10
me.controls.add(txt)

next
حالا این رو داشته باش تا بقیه رو برات توضیح بدم راستش الان وقت ندارم اگه این رو تست کردی نتیجه رو بنویس تا بقیه رو توضیح بدم

مهندس مرحله اول یعنی ساخت آبجکت ها با موفقیت انجام شد.

حالا منتظر مرحله دوم کد شما هستم تا بتونم آبجکت های تولیدی رو ردیابی و تغییرات لازمه رو روشن انجام بدم.

با تشکر

Rezahak
دوشنبه 29 آذر 1389, 22:43 عصر
مهندس مرحله اول یعنی ساخت آبجکت ها با موفقیت انجام شد.

حالا منتظر مرحله دوم کد شما هستم تا بتونم آبجکت های تولیدی رو ردیابی و تغییرات لازمه رو روشن انجام بدم.

خب این مرحله دیگه خیلی آسونه . فرض کن می خواهی به متن داخل Textbox که نام آنرا TextBox2 گذاشتی دسترسی پیدا کنی .فقط کافیه بنویسی :

CType(Me.Controls.Item("TextBox2"), TextBox).Text