PDA

View Full Version : کار با کنترل با استفاده از نامی که به صورت رشته در اختیار داریم



baidin
سه شنبه 14 خرداد 1392, 19:58 عصر
سلام
فرض کنیم تعدادی کنترل داریم که در زمان اجرا نام کنترلها را به صورت رشته در اختیار داریم. به عنوان مثال:
"btnSubmit" , "btnDelete"
در زمان اجرا میخواهیم با این کنترلها کار کنیم. به عنوان مثال متن روی باتن را عوض کنیم. به چه صورتی میتونیم این کار را بکنیم در حالی که نام کنترل را به صورت رشته در اختیار داریم؟

متشکرم

tooraj_azizi_1035
سه شنبه 14 خرداد 1392, 20:07 عصر
فقط می تونید خاصیت های مشترک بین همه کنترل ها مثل Text رو تغییر بدید:


' Remove the RadioButton control if it exists.
Private Sub RemoveButton_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles RemoveButton.Click
If Panel1.Controls.Contains(RemoveButton) Then
Panel1.Controls.Remove(RemoveButton)
End If
End Sub


برای رفتار خاص باید ابتدا اون رو به Label یا هر چیز دیگه تبدیل کنید بعد خواصش رو تغییر بدید.

h_a_m_i_d
سه شنبه 14 خرداد 1392, 20:24 عصر
فقط می تونید خاصیت های مشترک بین همه کنترل ها مثل Text رو تغییر بدید:

' Remove the RadioButton control if it exists.
Private Sub RemoveButton_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles RemoveButton.Click
If Panel1.Controls.Contains(RemoveButton) Then
Panel1.Controls.Remove(RemoveButton)
End If
End Sub


برای رفتار خاص باید ابتدا اون رو به Label یا هر چیز دیگه تبدیل کنید بعد خواصش رو تغییر بدید.:افسرده: یا خدا اینا دیگه چیه !!!

Form1.Controls("button").Text="Hello"اگر جستجو هم میکردی خودم یک هفته پیش این سوالو پرسیده بودم

baidin
سه شنبه 14 خرداد 1392, 20:55 عصر
:افسرده: یا خدا اینا دیگه چیه !!!

Form1.Controls("button").Text="Hello"اگر جستجو هم میکردی خودم یک هفته پیش این سوالو پرسیده بودم
دوست عزیز در صورتیکه کنترل در خود فرم قرار گرفته باشه راه حل شما جواب میده ولی در صورتیکه کنترل داخل panel یا TabControl باشه به جای نام فرم باید نام panel یا برای TabControl بایستی نام tabpage را قرار بدیم و این در حالی هست که اصلا ما اطلاع نداریم کنترل کجا واقع شده.

tooraj_azizi_1035
سه شنبه 14 خرداد 1392, 22:50 عصر
یا خدا اینا دیگه چیه !!!
اینا کده.:لبخندساده:


این در حالی هست که اصلا ما اطلاع نداریم کنترل کجا واقع شده.
در اینصورت ما باید فرض کنیم که کنترل می تونه روی فرم، داخل یک پنل، داخلی GroupBox ای که خودش داخل Panel هست و یا داخل GroupBox ای که خودش 5 تا والد داره باشه؟ این عمق رو چقدر باید در نظر بگیریم؟

baidin
سه شنبه 14 خرداد 1392, 23:07 عصر
برای رفتار خاص باید ابتدا اون رو به Label یا هر چیز دیگه تبدیل کنید بعد خواصش رو تغییر بدید.
به چه صورتی یک تکست که اطلاع داریم نام کنترل به عنوان مثال نام لیبل هست را تبدیل کنیم به لیبل؟


اینا کده.:لبخندساده:


در اینصورت ما باید فرض کنیم که کنترل می تونه روی فرم، داخل یک پنل، داخلی GroupBox ای که خودش داخل Panel هست و یا داخل GroupBox ای که خودش 5 تا والد داره باشه؟ این عمق رو چقدر باید در نظر بگیریم؟
واقعیتش اطلاع از این عمق نمیتونیم داشته باشیم.
اجازه بدید یکم موضوع را محدودتر کنیم.
در صورتیکه بدونیم نام کنترلی که داریم مربوط به یک کنترل از نوع خاص(مثلا button یا label و...) باشه اون موقع چطوری میتونیم به اون کنترلی که اطلاع داریم روی فرم هست و نام اون را به صورت رشته داریم دسترسی پیدا کنیم؟ فکر میکنم پاسخ به این سوال بتونه در راه حل کلی کمکمون کنه

Saman_12
سه شنبه 14 خرداد 1392, 23:21 عصر
بیخیال خیلی سخت گرفتین موضوع رو :

Private Sub FindCtrl(name As String, Obj As Object, ByRef FoundObj As Control)

For Each ctrl As Control In Obj

If ctrl.Name = name Then FoundObj = ctrl : Exit For
If ctrl.Controls.Count > 0 Then FindCtrl(name, ctrl.Controls, FoundObj)
Next
End Sub

baidin
سه شنبه 14 خرداد 1392, 23:37 عصر
بیخیال خیلی سخت گرفتین موضوع رو :

Private Sub FindCtrl(name As String, Obj As Object, ByRef FoundObj As Control)

For Each ctrl As Control In Obj

If ctrl.Name = name Then FoundObj = ctrl : Exit For
If ctrl.Controls.Count > 0 Then FindCtrl(name, ctrl.Controls, FoundObj)
Next
End Sub


بله. منتهی دوست عزیز برای هر بار دسترسی به یک کنترل سرچ کردن بین همه کنترلها فکر نمیکنم ایده آل باشه
از پاسخ شما ممنونم

Saman_12
چهارشنبه 15 خرداد 1392, 08:31 صبح
بله. منتهی دوست عزیز برای هر بار دسترسی به یک کنترل سرچ کردن بین همه کنترلها فکر نمیکنم ایده آل باشه
از پاسخ شما ممنونم

والا من فکر میکنم که وقتی شما نمیدونید کجاست باید همه جا دنبالش بگردی پس یا میدونی یا نمیدونی میری دنبالش..؟
خوب هر روشی هم که استفاده کنید به هر حال باید بره دنبالش بگرده یا اینکه شما بهش بگین فلان جاست, به نظرتون این طور نیست؟!!!:لبخند:

baidin
چهارشنبه 15 خرداد 1392, 18:14 عصر
والا من فکر میکنم که وقتی شما نمیدونید کجاست باید همه جا دنبالش بگردی پس یا میدونی یا نمیدونی میری دنبالش..؟
خوب هر روشی هم که استفاده کنید به هر حال باید بره دنبالش بگرده یا اینکه شما بهش بگین فلان جاست, به نظرتون این طور نیست؟!!!:لبخند:
:متفکر:
بله.حق با شماست. ولی خواهش میکنم به این مساله دقت کنید:
فرض کنید ما به دنبال کنترلی بودیم که BackColor آن رنگ خاصی داشت. به دلیل اینکه اکثر کنترلها دارای این ویژگی هستند ما همه کنترلها را جستجو می کنیم و احتمال این وجود داشت که بیش از یک کنترل یافت شوند(به همین دلیل مجبور بودیم همه کنترلها را سرچ کنیم).
ولی مساله ما بسیار متفاوته و ما از نام کنترلی که به دنبال آن هستیم اطلاع داریم و از طرفی میدانیم که تنها و تنها یک کنترل در فرم وجود دارد که نام آن برابر آن متنی هست که ما داریم.
شاید راهی وجود داشته باشه تا بتونیم آبجکتی ایجاد کنیم تا اشاره کنه به کنترلی که قبلا ایجاد شده و ما نامش را داریم:ناراحت: