PDA

View Full Version : غیر فعال کردن آبجکتهای داخل فریم



vb_nima
سه شنبه 15 خرداد 1386, 19:11 عصر
همانطور که میدانید اگر چند آبجکت مثل textbox یا Label را در یک کنترل frame بگذاریم، با disable کردن frame ابجکتهای داخل فریم نیز غیر فعال می شوند.
مشکل من اینجاست که وقتی فریم را disable می کنم آبجکتهای داخل ان غیر فعال میشود ولی رنگ آبجکتها که باید به صورت کمرنگ در آید تغییری نمی کند . یعنی هیچ تغییری در ظاهر آبجکتهای داخل فریم مشاهده نمیکنیم بعد از غیر فعال کردن فریم.
من باید چی کار کنم؟

__siavash__
سه شنبه 15 خرداد 1386, 20:35 عصر
خوب فعلا برای اینکه کارت راه بیفته هر کدوم رو دونه دونه غیر فعال کن !
اصلا قطعی میدونی که باید این چنین بشه ؟
چون منم که امتحان میکنم این طوری نمیشه و باید دونه دونه غیر فعال کنم !

h_sadeghynejad
سه شنبه 15 خرداد 1386, 20:36 عصر
بله درست هستش یعنی اینکه بعد از اینکه شما یه فریم رو Disable کردید آبجکت های داخل اون غیر فعال میشن و این طوری نیست که با یه دستور دیگه بشه این کار رو کرد مگر اینکه بگی بعد از این کار یکی یکی آبجکت های داخل اون فریم رو نیز غیر فعال بکنه

majidghost
سه شنبه 15 خرداد 1386, 20:37 عصر
خوب قبل اینکه فریم رو disable کنی, آبجکتهاشو دستی disable کن.

__siavash__
سه شنبه 15 خرداد 1386, 20:47 عصر
خوب قبل اینکه فریم رو disable کنی, آبجکتهاشو دستی disable کن.
قبل و بعد نداره !
چه قبلش باشه چه بعدش Disable میشه

در ضمن من الان با EnableWindow هم این کارو کردم ولی جواب نداد

vb_nima
سه شنبه 15 خرداد 1386, 21:48 عصر
ببینم راهی وجود داره که بشه تمام آبجکتهای یک فریم را disabale کرد مثلا با یک حلقه هر چی آبجکت داخل اون فریم وجود داره را غیر فعال کرد.؟؟؟این کار امکان داره؟

CodeMasterX
چهارشنبه 16 خرداد 1386, 01:20 صبح
بله در وی بی 6 شما اگر یه فریم رو غیر فعال کنید رنگ کنترلهای درونش تغییری نمیکنن.که ترجیحا شما باید دستی اونا رو غیر فعال کنید.اگر تعداد کنترل ها زیاد باشن مشکل ساز میشه ولی فرض کنید توی فرم یک فریم داریم که توش 10 تا TextBox و چهارتا CheckBox هست :



Dim mObj As Object

For Each mObj In Me.Controls
If TypeName(mObj) = "TextBox" Then
mObj.Enabled = False
ElseIf TypeName("mObj") = "CheckBox") Then
mObj.Enabled = True
End If
Next

__siavash__
چهارشنبه 16 خرداد 1386, 09:21 صبح
بله در وی بی 6 شما اگر یه فریم رو غیر فعال کنید رنگ کنترلهای درونش تغییری نمیکنن.که ترجیحا شما باید دستی اونا رو غیر فعال کنید.اگر تعداد کنترل ها زیاد باشن مشکل ساز میشه ولی فرض کنید توی فرم یک فریم داریم که توش 10 تا TextBox و چهارتا CheckBox هست :



Dim mObj As Object

For Each mObj In Me.Controls
If TypeName(mObj) = "TextBox" Then
mObj.Enabled = False
ElseIf TypeName("mObj") = "CheckBox") Then
mObj.Enabled = True
End If
Next

این که همه کنترل های رو فرم رو غیر فعال میکنه!

Hossein Bazyan
چهارشنبه 16 خرداد 1386, 10:29 صبح
سلام
کدی که CodeMaster نوشتند همه کنترلهار را غیر فعال میکنه اگه میخوای مثلا فقط TextBox هات غیر فعال بشن میتوانی بنویسی


Dim mObj As TextBox

For Each mObj In Me.Controls
mObj.Enabled = False
Next

__siavash__
چهارشنبه 16 خرداد 1386, 10:40 صبح
سلام
کدی که CodeMaster نوشتند همه کنترلهار را غیر فعال میکنه اگه میخوای مثلا فقط TextBox هات غیر فعال بشن میتوانی بنویسی


Dim mObj As TextBox

For Each mObj In Me.Controls
mObj.Enabled = False
Next


مسله این نیست که تکست باکس غیر فعال بشه یا لیبیل یا چیز دیگه !
قراره تمام کنترل هایی که روی فریم هستند غیر فعال بشند که ممکنه مخلوطی از تکست باکس یا لیبیل و ... باشه

Mbt925
چهارشنبه 16 خرداد 1386, 12:58 عصر
CodeMaster جان هم گفتن که کدشون برای زمانیه که روی فرم فقط 1 فریم قرار داشته باشه و جز فریم چیزه دیگه ای روش نباشه.

در کل برای غیرفعال کردن اشیاء داخل فریم راهی جز غیر فعال کردن دستی وجود نداره.

ولی میشه یه اکتیوایکس نوشت که دقیقا یه فریم باشه ، فقط با این تفاوت که بعد از Disable شدن ، اشیاء داخلش هم Disable بشن ; که از نظر سرعت فرقی نمی کنه ، فقط از تعداد کدهای برنامه ی اصلیتون کاسته میشه.

(البته اگه قرار فریمی با این قابلیت نوشته بشه ، بهتره که کاملتر هم بشه و ضعف هایی که فریم وی بی داره رو پوشش بده)

__siavash__
چهارشنبه 16 خرداد 1386, 14:26 عصر
اون کد تمام کنترل های رو فرم رو تشخیص میداد
اگه بشه کنترل های روی فریم رو تشخیص داد همون کد جواب میده !؟! :متفکر:

Payman62
پنج شنبه 17 خرداد 1386, 01:23 صبح
سلام.
شما میتونی از ویژگی Tag کنترل ها استفاده کنید. یعنی ویژگی تگ همه کنترل های روی فریم رو مثلا بکن Nima بعد از کد زیر استفاده کن. یه چک باکس هم برای فعال و غیر فعال کردن کنترل های فریم بیرون فریم بذار.


Dim crlControls As Control
For Each crlControls In Form1
If crlControls.Tag = "Nima" Then crlControls.Enabled = CBool(Check1.Value)
Next

__siavash__
پنج شنبه 17 خرداد 1386, 10:51 صبح
سلام.
شما میتونی از ویژگی Tag کنترل ها استفاده کنید. یعنی ویژگی تگ همه کنترل های روی فریم رو مثلا بکن Nima بعد از کد زیر استفاده کن. یه چک باکس هم برای فعال و غیر فعال کردن کنترل های فریم بیرون فریم بذار.


Dim crlControls As Control
For Each crlControls In Form1
If crlControls.Tag = "Nima" Then crlControls.Enabled = CBool(Check1.Value)
Next

روش جالبی بود برای تشخیص کنترل های روی فریم :تشویق:

vb_nima
پنج شنبه 17 خرداد 1386, 13:51 عصر
روش خیلی جالبی بود.مرسی

Payman62
پنج شنبه 17 خرداد 1386, 14:21 عصر
سلام.
خوشحالم که کارت راه افتاد.
میتونی واسه کنترل های هر فریم تگ جدا در نظر بگیری و هر فریم با یه چک باکس فعال و غیر فعال شه.

CodeMasterX
جمعه 18 خرداد 1386, 01:12 صبح
این روشی که آقا پیمان گفتن خوب و کافی هست.
ولی کنترل های Child یی که تو یک فریم قرار دارن رو میشه با توابع API هم تشخیص داد.