دسته بندی ها
13:17 1398/09/07

کار با رویداد SelectedDateChanged در کامپوننت تاریخ شمسی در سی شارپ

مشخصات سوال کننده :
کاربر : hamid_b     امتیاز کاربر : 518     رتبه کاربر : 4
دسته بندی : سی شارپ WPF Asp.net Web Form

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3065
هوش مصنوعی

پاسخ هوش مصنوعی

برای جلوگیری از اجرای رویداد SelectedDateChanged وقتی که فرم بارگذاری می شود، می توانید از یک پرچم (flag) استفاده کنید. این پرچم مشخص می کند که آیا فرم به طور کامل بارگذاری شده است یا نه. در ادامه یک مثال آورده شده است:

bool isFormLoaded = false;

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    // فرم بارگذاری شده است
    isFormLoaded = true;
}

private void DatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
    if (isFormLoaded)
    {
        // انجام عملیات مورد نظر در اینجا
    }
}

با استفاده از این کد:

  • در ابتدا پرچم isFormLoaded برابر false است.
  • زمانیکه پنجره بارگذاری می شود، این پرچم به true تغییر می کند.
  • در رویداد SelectedDateChanged، قبل از انجام عملیات، بررسی می شود که آیا فرم بارگذاری شده یا نه.

به این ترتیب، عملیات شما فقط پس از بارگذاری کامل فرم اجرا خواهد شد.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : fateme 13:31 1398/09/07

معمولا کامپوننت های تاریخ و سایر کامپوننت ها یک event برای این منظور باید داشته باشن. اما اگر این رویداد وجود نداره راهکارهایی هست که میتونید انجام بدید.

یکی از راهکارها این هست که یک متغیر از نوع bool تعریف کنید و در ابتدا مقدار اون رو false قرار بدید. این متغیر رو به صورت عمومی در بالای کلاس خودتون تعریف کنید 

 

   bool checkDate = false;

خب حالا در رویداد SelectedDateChanged کنترل کنید که اگر مقدار این متغیر true هست باید دستورات بدنه این رویداد اجرا بشن. به قطعه کد زیر دقت کنید

 

   private void persiandateTime_SelectedDateChanged(object sender, RoutedEventArgs e)
        {
            if (checkDate == true)
            {
                MessageBox.Show("123");
            }
        }

 

در دستور بالا فقط در صورتی پیغام 123 نمایش داده میشه که متغیر checkDate برابر با true باشه. و چون موقعی که فرم Load میشه این متغیر برابر با false هست پس دیگه در اون لحظه اجرا نمیشه. اما حالا باید راه حلی داشته باشید که چجوری این متغیر رو true کنیم تا وقتی تاریخ تغییر میکنه true بشه.

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

 

 private void PersiandateTime_MouseMove(object sender, MouseEventArgs e)
    {
      checkDate = true;
    }

 

در دستور بالا به محض اینکه ماو روی کنترل تاریخ شمسی در Wpf قرار میگیره متغیر checkDate برابر میشه با true و از این ببعد دستورات اون اجرا میشن.

برای کسب اطلاعات بیشتر در مورد این کار توصیه می کنم این لینک رو مطالعه بفرمایید.

به این پاسخ امتیاز بدهید    0
امتیاز: 1635 رتبه: 2
پاسخ دهنده : Sowgandi 23:57 1398/09/07

سلام. دوست عزیز این کامپوننتی که شما استفاده کردید در موقع لود فرم دستور SelectedDateChanged  به خودی خود اجرا نمیشه مگر اینکه شما مقدار پیش فرض اون رو خودتون تغییر بدید. اگه این کارو کردید بجای مقدار دادن به SelectedDate از تکست اون استفاده کنید و به اون مقدار بدید. 

مثال: 

calender.Text = MyDate.ToString();

در این حالت رویداد SelectedDateChanged  اجرا نمیشه.

ویرایش شده در پنج شنبه 7 آذر 1398 ساعت 23:59:02
به این پاسخ امتیاز بدهید    0
امتیاز: 876 رتبه: 3
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود