PDA

View Full Version : For each



Hossein Bazyan
سه شنبه 14 فروردین 1386, 16:08 عصر
در وی بی ٦ با دستور میتوانستیم یکسری شی هم نوع را با هم کنترل کنیم اما این دستور با اینکه در دات نت ساپورت میشه اما کار نمیکنه من یکسری تکست باکس دارم که میخوام یکدفعه خاصیت Text آنها را خالی کنم اما با این دستور نمیشه در ضمن تکست باکسها هم نام نیستند




Dim txt As System.Windows.Forms.Control
'Set each textbox's value to ""
For Each txt In Me.Controls
If TypeOf txt Is System.Windows.Forms.TextBox Then
txt.Text = ""
End If
Next txt

iman_22a
سه شنبه 14 فروردین 1386, 16:46 عصر
من دقیقا کد خود شما رو بردم و تست کردم ، جواب میده کـــــــه !!!
کد رو کجا اجرا می کنید ؟؟

Hossein Bazyan
سه شنبه 14 فروردین 1386, 16:52 عصر
من دقیقا کد خود شما رو بردم و تست کردم ، جواب میده کـــــــه !!!
کد رو کجا اجرا می کنید ؟؟


سلام
ممنون از توجهتان
من در محیط visual Studio 2005 اجرا میکنم و متاسفانه خاصیت text تکست باکسها را تغییری نمیده . در محیط VB6 جواب میده اما در Vs 2005 نه
شما در چه محیطی اجرا میکنید ?

Alireza_Salehi
سه شنبه 14 فروردین 1386, 19:05 عصر
این کد هیچ اشکالی نداره ، آیا کنترل تون مستقیما روی فرم قرار دارند یا درون چیز دیگری هستند؟

اگر مثلا داخل GroupBox یا TabControl یا امثال اینها هستند باید مثلا از GroupBox1.Controls استفاده کنید.

Hossein Bazyan
سه شنبه 14 فروردین 1386, 19:14 عصر
نه مستقیم روی فرم قرار دارند و جالب اینه که موقعی که فرم را اجرا میکنم کنترل به خط For Each آمده و روی خط If هم قرار گرفته اما چون هیچ تکستی را با مشخصات فوق چیدا نمیکند شرط If را False در نظر گرفته و از آن پرش میکند.

Alireza_Salehi
سه شنبه 14 فروردین 1386, 19:40 عصر
در 2005 که من تست کردم جواب میده صددرصد مشکل از جای دیگس!

iman_22a
سه شنبه 14 فروردین 1386, 21:34 عصر
نه مستقیم روی فرم قرار دارند و جالب اینه که موقعی که فرم را اجرا میکنم کنترل به خط For Each آمده و روی خط If هم قرار گرفته اما چون هیچ تکستی را با مشخصات فوق چیدا نمیکند شرط If را False در نظر گرفته و از آن پرش میکند.

منم توی 2005 تست کردم ، هیچ مشکلی نداشت . شما فرمتون رو از Vb 6 آوردین یا دستی توی 2005 کار کردین ( پروژه جدید ساختین ) ؟

Hossein Bazyan
سه شنبه 14 فروردین 1386, 22:37 عصر
من برنامه رو از روی VB6 آوردم و با خود VS آنرا تبدیل کردم همه چیز کار میکنه الا کدهایی که مربوط به دستورات For each و IfType میباشد
در ضمن یک شی به پروژه به نام txtDay اضافه کرده که نمیدانم کربوط به کدام شی میباشد . در ضمن خاصیت Name ، مربوط به TextBox ها _txtDay_0_ و txtDay_1_ و ... تا آخر میباشد .

مرسی

حامد مصافی
چهارشنبه 15 فروردین 1386, 00:35 صبح
سلام حسین جان
به احتمال قوی شما با کنترل هایی که فرزند فرم نیستند مشکل دارید که دوستان هم اشاره کردند
شما کد زیر رو یه تست بکن


sub browseConreols(obj as object)
for each ct as control in obj.controls
If TypeOf txt Is System.Windows.Forms.TextBox Then
txt.Text = ""
else
browseConreols(ct)
End If
next ct
end sub

و طریقه استفاده


call browseConreols(me)

Goeezor
چهارشنبه 15 فروردین 1386, 08:07 صبح
من هم یکبار این مشکل را داشتم
با نوشتن xp text به جای textbox مشکل حل شد.

Alireza_Salehi
چهارشنبه 15 فروردین 1386, 09:05 صبح
مطمئنا شما در برنامه VB6 تون از TextBox Array استفاده کردید!

چنین برنامه ای وقتی به دات نت تبدیل میشه ابتدا یک متغییر از نوعMicrosoft.VisualBasic.Compatibility.VB6.Text BoxArray ایجاد میشه (همون TxtDay که نمیدونید مال کجاست) بعد به ازای هر کدوم از عناصر اون آرایه در VB6 یک متغییر از نوع System.Windows.Forms.TextBox در دات نت ایجاد میشه (همون _txtDay_0 ها) ، در آخر هم به تعداد این TextBox ها دستوری مثل
Me.TxtDay.SetIndex(_TxtDay_0, CType(0,Short)) وجود داره که TextBox ها رو به این آرایه نسبت میده!

این موارد رو در قسمت Windows Form Designer generated code کدهای فرمتون میتونید پیدا کنید.
در حلقه For Each باید از این آرایه (TxtDay) استفاده کنید.

Hossein Bazyan
چهارشنبه 15 فروردین 1386, 10:39 صبح
مطمئنا شما در برنامه VB6 تون از TextBox Array استفاده کردید!

چنین برنامه ای وقتی به دات نت تبدیل میشه ابتدا یک متغییر از نوعMicrosoft.VisualBasic.Compatibility.VB6.Text BoxArray ایجاد میشه (همون TxtDay که نمیدونید مال کجاست) بعد به ازای هر کدوم از عناصر اون آرایه در VB6 یک متغییر از نوع System.Windows.Forms.TextBox در دات نت ایجاد میشه (همون _txtDay_0 ها) ، در آخر هم به تعداد این TextBox ها دستوری مثل
Me.TxtDay.SetIndex(_TxtDay_0, CType(0,Short)) وجود داره که TextBox ها رو به این آرایه نسبت میده!

این موارد رو در قسمت Windows Form Designer generated code کدهای فرمتون میتونید پیدا کنید.
در حلقه For Each باید از این آرایه (TxtDay) استفاده کنید.

سلام

حرف شما کاملا درست بود و یک آرایه ساخته و با همین آرایه توانستم کنترل را به دست بگیرم



به احتمال قوی شما با کنترل هایی که فرزند فرم نیستند مشکل دارید که دوستان هم اشاره کردند.
شما کد زیر رو یه تست بکن


حامد جان کد شما هم جواب میده البته یه مقدار تغییرات میخواست اما راه حل اولی که دوستمان جناب arsp_2004 اشاره کردند خیلی راحته