کار با رویداد SelectedDateChanged در کامپوننت تاریخ شمسی در سی شارپ
می خوام توی پروژه خودم که با سی شارپ و به صورت WPF هست موقعی محتویات کامپوننت تاریخ شمسی تغییر می کنه (یعنی وقتی تاریخ رو تغییر میدم) یه سری عملیات پشت صحنه انجام بشه.

برای این کار از رویداد SelectedDateChanged استفاده می کنم و به درستی هم داره کار میکنه. اما مشکل اینجاست که وقتی پنجره باز میشه در رویداد Load فرم هم این رویداد کار اجرا میشه. دلیلش هم مشخص هست. چون وقتی فرم رو باز میکنم در ابتدا این کامپوننت مقداری نداره و بعد از اینکه فرم لود میشه مقدار میگیره و به عبارتی تاریخ داره تغییر میکنه و رویداد SelectedDateChanged اجرا میشه.
حالا سوال اینجاست چجوری میشه این رویداد رو موقع Load فرم غیر فعال کرد یا کاری کرد که در این موقع اجرا نشه ؟
پاسخ هوش مصنوعی
برای جلوگیری از اجرای رویداد 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، قبل از انجام عملیات، بررسی می شود که آیا فرم بارگذاری شده یا نه.
به این ترتیب، عملیات شما فقط پس از بارگذاری کامل فرم اجرا خواهد شد.
معمولا کامپوننت های تاریخ و سایر کامپوننت ها یک 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 و از این ببعد دستورات اون اجرا میشن.
برای کسب اطلاعات بیشتر در مورد این کار توصیه می کنم این لینک رو مطالعه بفرمایید.
سلام. دوست عزیز این کامپوننتی که شما استفاده کردید در موقع لود فرم دستور SelectedDateChanged به خودی خود اجرا نمیشه مگر اینکه شما مقدار پیش فرض اون رو خودتون تغییر بدید. اگه این کارو کردید بجای مقدار دادن به SelectedDate از تکست اون استفاده کنید و به اون مقدار بدید.
مثال:
calender.Text = MyDate.ToString();
در این حالت رویداد SelectedDateChanged اجرا نمیشه.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- احراز هویت از طریق اکتیو دایرکتوری
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress