PDA

View Full Version : مشکل در ایجاد یک کنترل جدید



vbapr2005
یک شنبه 03 اردیبهشت 1385, 22:26 عصر
ببخشید دوستان خوبم، من دارم یه برنامه می نویسم که توش در Run-Time یه گروپ باکس می سازم که برای این کار از این کد رو برای کلیک یه دکمه استفاده کردم:

Static Counter As Int32
Dim grp As New GroupBox
grp.Name = "grp" & Counter
.
.
.
خب حالا میخوام توی این گروپ باکس، چند تا کنترل دیگه هم بذارم. همونطوری که میدونید وقتی میخوایم یه کنترل جدید اضافه کنیم حتما باید Parent ِش رو هم بگیم. حالا من چطوری بگم که پرنت این دکمه ی جدید، گروپ باکسیه که اسمش رو نمیدونم؟

البته دوبار هم گشتم اما چیزی پیدا نکردم

Maryam_y_m
دوشنبه 04 اردیبهشت 1385, 10:20 صبح
مراحل زیر را دنبال کنید:

dim myGroupBox as System.Windows.Forms.GroupBox
myGroupBox = New GroupBox
myGroupBox.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
myGroupBox.Location = New System.Drawing.Point(13, 272)
myGroupBox.Name = "myGroupBox "
myGroupBox.Size = New System.Drawing.Size(688, 208
برای اضافه کردن TextBox در GroupBox:


Dim myTextBox As New TextBox
myTextBox .Location = New System.Drawing.Point(80, 5)
myTextBox .Text = "****"
Me.myGroupBox.Controls.Add(myTextBox )و در آخر کار :

myForm.Controls.Add(Me.myGroupBox)

vbapr2005
دوشنبه 04 اردیبهشت 1385, 14:48 عصر
Static Counter As Int32
Dim grp As New GroupBox
With grp
.Text = "سیستم " & Counter
.Width = 133
.Height = 84
.Parent = flp
End With

Dim btnStopRedo As New Button
With btnStopRedo
.Text = "توقف"
.Left = 70
.Top = 20
.Width = 57
.Height = 23
.Parent = grp
End With

Dim lblTime As New Label
With lblTime
.Text = "00:00:0"
.Left = 8
.Top = 56
.Width = 57
.Height = 13
.Parent = grp
End With

flp.Controls.Add(grp)
grp.Controls.Add(btnStopRedo)
grp.Controls.Add(lblTime)

AddHandler btnStopRedo.Click, AddressOf btnStopRedoClicked

grp.Name = "grp" & Counter
btnStopRedo.Name = "btnStopRedo" & Counter
lblTime.Name = "lblTime" & Counter

Counter += 1
یه جورایی مشکلی رو که تو پست قبلی گفتم با این روش حل کردم اما یه سوال هنوز سر جای خودش باقیه:
نگاه کنید الان تو این روال چند تا کنترل درست کردم اسم هایی براشون گذاشتم و بعد از این که با اون اسم ها کار هایی رو که میخواستم انجام دادم، در آخر این کد، اسم کنترل ها رو عوض کردم (کد های قرمز)
حالا اسم این کنترل ها عوض شده و من میخوام بپرسم چطوری باید بهشون دسترسی پیدا کنم؟

به طظور ملموس تری سوالمو میپرسم: فرض کنید من میخوام تکست ِ "lblTime2" رو عوض کنم باید چیکار کنم؟ نمیتونم که بگم
lblTime2.Text = "sth"

vbapr2005
دوشنبه 04 اردیبهشت 1385, 14:49 عصر
مریم خانم بخاطر جوابت هم ممنونم

vbapr2005
دوشنبه 04 اردیبهشت 1385, 17:35 عصر
برای این که مشکل (با یه کمی زرنگی!) یه راه حلی از خودم در وکردم! (سوء استفاده از Tag به این صورت):

For i As Int32 = 0 To flp.Controls.Count - 1
For j As Int32 = 0 To flp.Controls(i).Controls.Count - 1
If (TypeOf flp.Controls(i).Controls(j) Is Label) And _
(flp.Controls(i).Controls(j).Tag = "Time") Then _
flp.Controls(i).Controls(j).Text _
= Int(flp.Controls(i).Controls(j).Text) + 1
Next
Next
البته حالا نمیدونم واقعا خاصیت Tag برای همین کاره؟

behzad_gh
دوشنبه 04 اردیبهشت 1385, 18:49 عصر
سلام از روش زیر هم می‌تونید استفاده کنید که خیلی ساده تر است. :چشمک:


grp.Controls("grp" & Counter).Text = "test"

موفق باشید.

vbapr2005
چهارشنبه 06 اردیبهشت 1385, 06:28 صبح
درسته متشکرم. من به اون یکی overload توجه نکرده بودم.
ممنون که گفتی