ورود

View Full Version : برداشتن کلیه تیک های چک باکس



reza_1199
یک شنبه 06 اسفند 1402, 11:50 صبح
سلام و عرض ادب خدمت دوستان و اساتید گرانقدر
در نمونه پیوستی در فرم یک باتن قرار داده شده به جهت اینکه اگر چند مورد از چک باکس ها انتخاب شد توسط این باتن همه اونها رو false کنیم و تیک همه اونها رو برداریم ولی نمیدونم چرا فقط تیک اون چک باکسی که فوکوس رو اون قرار داره بر میداره ممنون میشم اساتید و دوستان علت این امر رو بفرمایند . سپاس

eb_1345
یک شنبه 06 اسفند 1402, 13:17 عصر
سلام و عرض ادب خدمت دوستان و اساتید گرانقدر
در نمونه پیوستی در فرم یک باتن قرار داده شده به جهت اینکه اگر چند مورد از چک باکس ها انتخاب شد توسط این باتن همه اونها رو false کنیم و تیک همه اونها رو برداریم ولی نمیدونم چرا فقط تیک اون چک باکسی که فوکوس رو اون قرار داره بر میداره ممنون میشم اساتید و دوستان علت این امر رو بفرمایند . سپاس
سلام
موضوع این تاپیک هم در ارتباط با اون تاپیک قبلیه ! مگه در اون تاپیک به نتیجه دلخواه نرسیدی ؟

reza_1199
یک شنبه 06 اسفند 1402, 13:35 عصر
با عرض سلام و ظهر به خیر خدمت استاد بهرامی
با همت و بزرگواری شما اون مورد حل شد بطوریکه وقتی کاربر بیشتر از یک مورد رو انتخاب می‌کرد بهش پیغام نمایش میداد و اونو آگاه می‌کرد و اون چک باکسی که کنترل بروی اون قرار می‌گرفت رو برابر با false می‌کرد. ولی میخواستم ببینم به هر دلیلی اگر اپراتور بعد از اعلام هشدار تیک مورد اضافه رو برنداشت و به ادامه کار رو آورد بصورت اتوماتیک موارد انتخابی رو همه رو تیکش رو برداره و از طرفی برای خودم واقعیت جای سوال بود که در فرم‌های continuos چطور میشه اینکار رو انجام داد کدی که من استفاده کردم در این نمونه پیوستی ظاهرا باز کنترلی که بروی اون فیلد هست رو بر میداره ممنون میشم بخاطر آموزش راهنمایی کنین .سپاس

eb_1345
یک شنبه 06 اسفند 1402, 14:29 عصر
با عرض سلام و ظهر به خیر خدمت استاد بهرامی
با همت و بزرگواری شما اون مورد حل شد بطوریکه وقتی کاربر بیشتر از یک مورد رو انتخاب می‌کرد بهش پیغام نمایش میداد و اونو آگاه می‌کرد و اون چک باکسی که کنترل بروی اون قرار می‌گرفت رو برابر با false می‌کرد. ولی میخواستم ببینم به هر دلیلی اگر اپراتور بعد از اعلام هشدار تیک مورد اضافه رو برنداشت و به ادامه کار رو آورد بصورت اتوماتیک موارد انتخابی رو همه رو تیکش رو برداره و از طرفی برای خودم واقعیت جای سوال بود که در فرم‌های continuos چطور میشه اینکار رو انجام داد کدی که من استفاده کردم در این نمونه پیوستی ظاهرا باز کنترلی که بروی اون فیلد هست رو بر میداره ممنون میشم بخاطر آموزش راهنمایی کنین .سپاس
بزرگوار ! چرا تو همون تاپیک مطرح نکردی تا این مورد رو برات برطرف کنم؟ علی ایحال همین مورد رو در همون تاپیک مطرح کن تا کدهای فایل نمونه رو برات اصلاح کنم
و اما برای اینکه این ابهام شما که چرا با استفاده از حلقه for Each .... Next تیک همه چک باکس ها برداشته نمیشه برطرف بشه بعداً در همین تاپیک توضیحاتی ارائه میدم که ان شاءالله ابهامت برطرف بشه

reza_1199
یک شنبه 06 اسفند 1402, 14:58 عصر
لطفا این مبحث رو حذف نمایید . با تشکر

eb_1345
یک شنبه 06 اسفند 1402, 16:43 عصر
لطفا این مبحث رو حذف نمایید . با تشکر

برای چی حذف بشه؟ اتفاقاً به موضوع جالبی در این تاپیک اشاره کرده ای که ممکنه برای خیلی ها جای سوال و ابهام باشه

reza_1199
یک شنبه 06 اسفند 1402, 16:49 عصر
پس استاد منتظر این آموزش خواهم بود بی صبرانه

eb_1345
یک شنبه 06 اسفند 1402, 16:55 عصر
در فایل نمونه از کدهای آقا رضا در نمونه پست اول برای حذف تیک تعدادی چک باکس در فرمی در نمای Single Form استفاده شده
بعد از امتحان نمونه قطعاً کنجکاو خواهی شد که چرا در Single Form با همون کدها همه چک باکس هائی که در حالت انتخاب بودن از حالت انتخاب خارج میشوند ولی این اتفاق درفرم در حالت Continuous Forms و Datasheet نمی افتد ؟

eb_1345
یک شنبه 06 اسفند 1402, 19:53 عصر
پس استاد منتظر این آموزش خواهم بود بی صبرانه
این موضوع نیاز به آموزش خاصی ندارد . هدف اینست که خود دوستان قدری کنجکاو بشن و در این مورد بررسی کنن که چه دلیلی برای موردی که در پست 8 به اون اشاره شد وجود داره

eb_1345
دوشنبه 07 اسفند 1402, 11:21 صبح
در نمونه پست 8 برای انتخاب یا حذف انتخاب همه چک باکس های فرم از کدهای زیر استفاده شده :


Dim ctl As Control
For Each ctl In Me.Controls
If ctl.ControlType = acCheckBox Then
ctl.Value = False
End If
Next ctl

در این کدها قرار است از طریق حلقه For each تمام کنترل های موجود در فرم مورد پیمایش قرار گیرند . در واقع به حلقه For each دستور میدیم در طول پیمایش خودت کاری که در ادامه ازت میخواهیم برامون انجام بده ، در ادامه از این حلقه میخواهیم در طول چرخه و پیمایش خودت بیا فقط کنترل هائی رو که دیتا تایپ اونها از نوع چک باکس است مورد بررسی قرار بده و به هر چک باکسی که رسیدی اون رو از حالت انتخاب خارج کن (ctl.Value = False).
پس تا همینجا متوجه شدیم که چون تعداد چک باکس های موجود در فرم 5 تا است و منطقی نیست برای انتخاب یا حذف انتخاب هر چک باکس یک خط کد بنویسم از این حلقه استفاده کرده ایم .
اما چرا با استفاده از این حلقه در سابفرم نمونه پست 1 در هر بار فقط یک چک باکس آنهم زمانی که تمرکز بر روی رکورد یا سطر مورد نظر باشه از حالت انتخاب خارج میشه؟ دلیل اصلیش اینست که در سابفرم فقط یک چک باکس موجوده نه چند چک باکس و اگر در ظاهر تعداد چند چک باکس در یک ستون و زیر هم می بینی این همون یک چک باکس است که در نمای Continuous Forms و Datasheet فرم به تعداد رکوردهای مربوطه بصورت ادامه دار نمایش داده میشه . حالا اگه چک باکس در حالت باند باشه فقط چک باکس سطری که بر روی اون فوکوس شده از حالت انتخاب خارج میشه . در اینجا راه چاره اینست که از طریق پیمایش رکوردست اقدام به انجام کاری که مد نظرمون است بکنیم

eb_1345
دوشنبه 07 اسفند 1402, 12:33 عصر
در کدهای زیر با استفاده از پیمایش رکوردست فیلد چک باکس در همه رکوردهای جدول از حالت انتخاب خارج میشود :

Dim db As Database
Dim rst As Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("table1")
rst.MoveFirst
Do While Not rst.EOF
rst.Edit
rst!taeed = False
rst.Update
rst.MoveNext
Loop
rst.Close
Set rst = Nothing

reza_1199
دوشنبه 07 اسفند 1402, 12:53 عصر
سلام و عرض ادب و احترام خدمت استاد بهرامی و ظهرتون به خیر . مطالبتون بسیار ارزشمند و مفید بود و من به نوبت خودم از حسن توجهتون و وقتی که گذاشتین:تشویق: تشکر میکنم . دستتون درد نکنه

eb_1345
دوشنبه 07 اسفند 1402, 13:10 عصر
حالا ممکن است ما در جدول مثلاً تعداد 20 رکورد داشته باشیم که فیلد چک باکس برای 15 رکورد اون تیک خورده باشد و این تعداد 15 رکورد در سابفرم نمایش داده نشوند و فقط تعداد 5 رکوردی که چک باکس آنها تیک نخورده باشد در سابفرم نمایش داده شود . از طرفی قصد نداریم چک باکس تعداد 15 رکوردی که قبلاً در جدول تیک خورده از حالت انتخاب خارج کنیم و فقط چک باکس آن تعداد رکوردی که در سابفرم نمایش داده میشوند از حالت انتخاب خارج شوند ؛ در اینصورت باید از چه کدی استفاده کنیم؟
در این حالت بجای عبارت :


Set rst = db.OpenRecordset("table1")

از عبارت :


Set rst = Me.sub1.Form.RecordsetClone

این یعنی چی ؟
یعنی بجای اینکه همه رکوردهای جدول در قالب رکوردست قرار بدهیم فقط رکوردهائی که در سابفرم نمایش داده میشوند در قالب رکوردست قرار میدیم

eb_1345
دوشنبه 07 اسفند 1402, 13:15 عصر
سلام و عرض ادب و احترام خدمت استاد بهرامی و ظهرتون به خیر . مطالبتون بسیار ارزشمند و مفید بود و من به نوبت خودم از حسن توجهتون و وقتی که گذاشتین:تشویق: تشکر میکنم . دستتون درد نکنه
خواهش میکنم آقا رضا
لطف دارین شما
این کاش دوستانی که تمایل به یادگیری برنامه نویسی در محیط جذاب اکسس دارن از کنار آموزش های بسیار مفید اساتید بزرگی همچون mazoolagh عزیز و آموزش های نصف و نیمه بنده (البته اگه بشه آموزش اسمشو گذاشت) بی تفاوت رد نشن

eb_1345
دوشنبه 07 اسفند 1402, 13:29 عصر
..............................

simorgh2000
دوشنبه 07 اسفند 1402, 18:00 عصر
استاد از آموزش های بسیار ارزشمند شما تشکر میکنم
:تشویق::تشویق:

reza_1199
دوشنبه 07 اسفند 1402, 18:05 عصر
سلام شبتون به خیر و خوشی
استاد بهرامی به جرات میتونم بگم و بدون ذره ای اغراق که شما و استاد Mazoolagh نعمتی برای این گروه هستین و قطعا همه کارآموزان مثل بنده و سایر عزیزان قدردان محبت های شما هستن و خواهند بود بنده از طرف خودم و دوستان از شما تشکر میکنم . و واقعیت شرکت نکردن در بعضی مباحث قطع به یقین دلیلش سواد ناچیز ماست که از بزرگانی چون شماها استفاده می کنیم و از شما خواهشمند مطالب آموزش رو همچنان ادامه بدین . موفق و پیروز باشین

mazoolagh
دوشنبه 07 اسفند 1402, 19:26 عصر
سلام و روز خوش
پرسش مفید، و پاسخ هم طبق روال همیشگی جناب بهرامی کامل، دقیق، و دارای نکات ظریف و آموزنده بود.
بنوبه خودم از زحمات و وقتی که میگذارن تشکر میکنم.

==========
گفتنی ها گفته شده -
فقط برای این که پست آف تاپیک محسوب نشه؛
برای کار با recordsetclone یا recordset فرم نیازی نیست که یک recordset دیگه تعریف و اینها رو به اون منتسب کنیم،
میتونیم مستقیما باهاش کار کنیم:
with me.recordsetclone
...

...
end with

with me.recordset
...
...
end with

مورد بعدی این که اینجوری هم میشه از رکوردست clone گرفت:
with me.recordset.clone
...
...
end with

و این که اگر رکوردست فرم DAO نیست در کار با clone دقت کنین! (بعنوان تحقیق برای اونهایی که علاقه دارن)