PDA

View Full Version : حذف چند کنترل از روی فرم به صورت Dynamic



titbasoft
چهارشنبه 07 اردیبهشت 1384, 13:45 عصر
کسی راه حلی داره ؟
از روش FOR each هم نمی شه استفاده کرد چون کنترل های پشت سر هم رو می خواهیم حذف کنیم :گیج:

k_m
چهارشنبه 07 اردیبهشت 1384, 16:44 عصر
میشه اون کنترل ها رو disable کرد . اما فکر کنم منظورت رو درست نفهمیده باشم میشه بیشتر توضیح بدی.

titbasoft
چهارشنبه 07 اردیبهشت 1384, 17:18 عصر
فعلا چون عجله دارم hide شون کردم. ولی فرض کنید 2 کنترل به نام های ctrl1 و ctrl2 به صورت dynamic به فرمتون اضافه کردید. حالا اگر از این کد برای حذف اونها استفاده کنید

FOR EACH ctrl IN me.controls
IF instr(ctrl.Name,"ctrl") THEN me.controls.remove(ctrl)
NEXT
به این مشکل بر می خورید که پس از حذف اولین کنترل کالکشن controls دوباره reIndex می شه و کنترل دومی جای کنترل اولی رو در لیست می گیره. پس کنترل هاتون هر تعداد که باشن یکی در میون حذف میشن.

یاشار
چهارشنبه 07 اردیبهشت 1384, 17:46 عصر
منظورتون از کنترل‌های پشت سر هم چیه؟


For Each Ctl As Control In Me.Controls
If Not Ctl Is Nothing AndAlso Not Ctl.IsDisposed Then
If Ctl.GetType Is Button1.GetType AndAlso Ctl.Name <> "Button1" Then
Me.Controls.Remove(Ctl)
End If
End If
Next

اگر بدون for each هم بخواهی :


For I As Int32 = 0 To Me.Controls.Count
If Not Ctr.IsDisposed Then
If Me.Controls.Item(I).GetType Is Type.GetType("System.Windows.Forms.Button") And _
Ctr.Name <> "Button1" Then

Me.Controls.RemoveAt(I)

End If
End If
Next

یاشار
چهارشنبه 07 اردیبهشت 1384, 17:51 عصر
تا پست قبلی رو آپدیت کنم شما دوباره پست گذاشته بودید. :wink:



Private Sub RemoveManyControls()

For Each Ctl As Control In Me.GroupBox1.Controls

If Not Ctl Is Nothing AndAlso Not Ctl.IsDisposed Then
If Ctl.GetType Is Type.GetType("System.Windows.Forms.Button") Then
Me.GroupBox1.Controls.Remove(Ctl)
End If
End If
Next

If GroupBox1.Controls.Count > 0 Then RemoveManyControls()

End Sub

titbasoft
چهارشنبه 07 اردیبهشت 1384, 23:56 عصر
اولا از توجه شما ممنونم
من هم فکر کنم راه حلش همین باشه. این که این تاپیک رو زدم گفتم شاید یه کسی راهی داشته باشه که مستقیم از طریق name به کنترل رسید. یه چیزی مثل findControl در وب. به هر حال ممنون :wink:
البته این روش یه مشکلی هم داره و اون اینکه اگر کنترلها گروه بندی نشده باشن و ما نخواهیم همه رو حذف کنیم مشکل پیدا می کنیم

یاشار
جمعه 09 اردیبهشت 1384, 09:59 صبح
میتونید شرط براش تعیین کنید. اگر هم بخواهید تک تک حذف کنید (بر اساس نام)



If Ctl.GetType Is Type.GetType("System.Windows.Forms.Button") And [b]Ctl.Name = "btnSampe"[/b] Then
Me.GroupBox1.Controls.Remove(Ctl)
End If

titbasoft
جمعه 09 اردیبهشت 1384, 11:35 صبح
دوست خوبم ، این طوری که دوباره برگشتیم به مشکل اصلی. کاری که من انجام دادم این بود که یک تابع نوشتم که با دادن نام کنترل اون رو جستجو می کنه و یک نمونه از اون رو برمیگردونه و من هم حذفش می کنم فعلا کارم رو راه انداخته. فکر کنم این یکی از مشکلات VS 2003 است چون این مساله در VS 2005 بهش توجه شده.
بازم از توجه شما ممنونم :flower: :تشویق: