PDA

View Full Version : سوال: غیر فعال کردن کلیک های مکرر بر روی یک دکمه قبل از اتمام کار کلیک اول



FirstLine
شنبه 24 آبان 1393, 09:31 صبح
با سلام
یک دکمه روی یک فرم در اپلیکشن C# دارم که وقتی روی اون کلیک میکنیم چون باید به اینترنت متصل بشه و دسترسی به اینترنت رو چک کنه، مقداری زمانبر میشه.
اگه یکبار روی اون کلیک کنیم اول دکمه غیر فعال میشه و یک پیغام نشون میده که صبر کنید و پس از انجام کار عملیات بدرستی انجام شده و دکمه فعال میشه و فوکوس رو به یک کنترل د.
حالا مشکل اینه که اگه کاربر چندین بار روی این دکمه بصورت مداوم کلیک کند این تعداد کلیکها در حافظه ذخیره میشه و پس از انجام کار مجددا روی اون دکمه رویداد کلیک اجرا میشه و نهایتا برنامه هنگ میکنه!!!!
چجوری میتونم کاری کنم که با پایان یافتن کار اولین رویداد کلیک انجام شده، بقیه کلیکهای اضافی روی دکمه از حافظه حذف بشود؟
با تشکر

wolf_majid
شنبه 24 آبان 1393, 12:13 عصر
مگه با اولین کلیک دکمه غیر فعال نمیشه ؟
اگه غیر فعال شدن دکمه زمان میبره باید کد غیر فعال شدنش رو قبل از هر کد زمان بری بگذارید

ولی اگر منظورتون اینه که فقط یکبار بشه دکمه رو کلیک کرد حتی در صورت فعال بودن :
از یک متغیر bool استفاده کنید که اگر false بود دستورات مورد نظر رو اجرا کنه و در غیر اینصورت صرف نظر کنه

FirstLine
شنبه 24 آبان 1393, 13:29 عصر
با سلام
این دکمه چون باید آنلاین بودن را بررسی کند یه مقداری طول میکشه و بخاطر اینکه با چند بار دکمه را زدن مشکلی پیش نیاد من اومدم و موارد زیر را انجام داده ام :
1- در خط اول دکمه را غیر فعال میکنم و در پایان کدها اونو فعال میکنم
2- یک متغییر سراسری و عمومی bool تعریف کردم و مقدارش را false گذاشتم و توی برنامه در اولین خط چک میکنم که این متغییر true نباشه و اگر درست بود از return میشه و اگه true نبود در خط بعد اونو true میکنه و در آخر خط کدها اونو false میکنم
3- یک پیغام هم نشون میده که داره کار میکنه ولی این هم فایده نداره
اما اینجوری نشد و اگه کاربر چندین بار روی دکمه کلیک کنه برنامه هنگ میکنه

اما راهکاری که تونستم مشکل را حل کنم این بود که:
در خط دوم کد تاریخ کلیک بر روی دکمه را در یک تکست فایل ذخیره میکنم و در خط اول و قبلی چک میکنم که آیا اختلاف تاریخ فعلی با تاریخ اون درخواست قبلی اگه کمتر از 5 دقیقه باشه return شده و از کد میاد بیرون و بهش پیغام میده که ...
با این روش مشکل حل شد اما مشکلات خاص خودشو داره اگه بتونم یه راهی پیدا کنم که در خط آخر کد، تمام ایونتهای کلیک بر روی دکمه را حذف کنم، بهتره


با تشکر

rasoolf
شنبه 24 آبان 1393, 14:26 عصر
با سلام
این دکمه چون باید آنلاین بودن را بررسی کند یه مقداری طول میکشه و بخاطر اینکه با چند بار دکمه را زدن مشکلی پیش نیاد من اومدم و موارد زیر را انجام داده ام :
1- در خط اول دکمه را غیر فعال میکنم و در پایان کدها اونو فعال میکنم
2- یک متغییر سراسری و عمومی bool تعریف کردم و مقدارش را false گذاشتم و توی برنامه در اولین خط چک میکنم که این متغییر true نباشه و اگر درست بود از return میشه و اگه true نبود در خط بعد اونو true میکنه و در آخر خط کدها اونو false میکنم
3- یک پیغام هم نشون میده که داره کار میکنه ولی این هم فایده نداره
اما اینجوری نشد و اگه کاربر چندین بار روی دکمه کلیک کنه برنامه هنگ میکنه

اما راهکاری که تونستم مشکل را حل کنم این بود که:
در خط دوم کد تاریخ کلیک بر روی دکمه را در یک تکست فایل ذخیره میکنم و در خط اول و قبلی چک میکنم که آیا اختلاف تاریخ فعلی با تاریخ اون درخواست قبلی اگه کمتر از 5 دقیقه باشه return شده و از کد میاد بیرون و بهش پیغام میده که ...
با این روش مشکل حل شد اما مشکلات خاص خودشو داره اگه بتونم یه راهی پیدا کنم که در خط آخر کد، تمام ایونتهای کلیک بر روی دکمه را حذف کنم، بهتره


با تشکر

قطعا با غیر فعال کردن دکمه در خط اول ، تا فعال شدن دکمه، هر چقدر هم کاربر روی دکمه کلیک کنه هیچ تاثیری نخواهد داشت
در مورد متغیری هم که تعریف کردین کار منطقی است اما برای درک بهتر موضوع و کمک بیشتر بهتره کدتون را قرار بدید تا دوستان بررسی کنند.