می خوام توی پروژه خودم که با سی شارپ و به صورت WPF هست موقعی محتویات کامپوننت تاریخ شمسی تغییر می کنه (یعنی وقتی تاریخ رو تغییر میدم) یه سری عملیات پشت صحنه انجام بشه.
برای این کار از رویداد SelectedDateChanged استفاده می کنم و به درستی هم داره کار میکنه. اما مشکل اینجاست که وقتی پنجره باز میشه در رویداد Load فرم هم این رویداد کار اجرا میشه. دلیلش هم مشخص هست. چون وقتی فرم رو باز میکنم در ابتدا این کامپوننت مقداری نداره و بعد از اینکه فرم لود میشه مقدار میگیره و به عبارتی تاریخ داره تغییر میکنه و رویداد SelectedDateChanged اجرا میشه.
حالا سوال اینجاست چجوری میشه این رویداد رو موقع Load فرم غیر فعال کرد یا کاری کرد که در این موقع اجرا نشه ؟
معمولا کامپوننت های تاریخ و سایر کامپوننت ها یک 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 اجرا نمیشه.
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
426
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1347
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1157
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
595
- پاسخ :
1
|
تاریخ :
1403/07/13
- ساعت :
12:06:00 PM
- بازدید :
346
- پاسخ :
1
|
تاریخ :
1403/06/24
- ساعت :
08:52:00 PM
- بازدید :
309
- پاسخ :
1
|
تاریخ :
1398/09/14
- ساعت :
01:58:00 PM
- بازدید :
4263
- پاسخ :
1
|
تاریخ :
1398/09/16
- ساعت :
11:41:00 AM
- بازدید :
4279
- پاسخ :
1
|
تاریخ :
1398/09/07
- ساعت :
02:15:00 PM
- بازدید :
3875
- پاسخ :
5
|
تاریخ :
1403/05/16
- ساعت :
05:43:00 AM
- بازدید :
654
- پاسخ :
0
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
57
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
97
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1031
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
426
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
930
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1347
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4796
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1157
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
595
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
205
- پاسخ :
1
|