تغییر ترتیب اجرای Event ها در سی شارپ WPF
من یک DataGrid دارم که اطلاعات رو از دیتابیس میگیره و نمایش میده
و یکسری TextBox دارم که اطلاعات هر ردیف از دیتا گرید ویو رو با کلیک کاربر روی اونها در تکست باکس نمایش میده.
برای بررسی اطلاعات یکسری شرط ها گذاشتم که هم در رویداد DataGrid_Click و هم در TextBox_TexhChange اتفاق می افتد
حالا اتفاقی که می افتد اینه که موقع اجرای برنامه زمانی که کاربر میاد روی دیتا گرید کلیک میکنه اول میره شرط های TextChange چک میکنه و بعد میره سراغ DataGrid_Click
که نتیجش میشه اطلاعات خالی
سوال اینه چیکار میتونم بکنم که رویداد هایی که همزمان اتفاق می افتد , ترتیب اجرا (یا بررسیش رو) تغییر بدم
موضوع مشابه :https://www.c-sharpcorner.com/uploadfile/b81385/how-to-change-order-of-event-handlers-execution-at-run-time/
پاسخ هوش مصنوعی
برای تغییر ترتیب اجرای رویدادها در WPF، شما می توانید از روش هایی مانند استفاده از پرچم ها (flags) یا متدهای مدیریت حالت (state management methods) بهره ببرید.
به عنوان مثال، شما می توانید یک پرچم برای بررسی وضعیت TextBox ایجاد کنید و برای جلوگیری از ورود اطلاعات خالی، فقط زمانی که DataGrid_Click فراخوانی می شود و پرچم فعال نیست، بررسی کنید.
در اینجا مثالی از نحوه استفاده از پرچم برای کنترل ترتیب اجرای رویدادها آورده شده است:
bool isTextBoxChanging = false;
private void DataGrid_Click(object sender, RoutedEventArgs e)
{
if (!isTextBoxChanging)
{
// انجام عملیات مورد نظر
}
}
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
isTextBoxChanging = true;
// انجام محاسبات قبل از تغییر
// بعد از اتمام تغییرات می توان به حالت قبلی بازگشت
isTextBoxChanging = false;
}
با این روش، شما می توانید اطمینان حاصل کنید که رویداد TextChanged در ابتدا ارزیابی نمی شود، مگر اینکه در حین پردازش کلیک DataGrid در حال تغییر باشد. این به شما امکان می دهد کنترل بیشتری بر روی ترتیب اجرای رویدادها داشته باشید.
لینکی که شما قرار دادید سوال نیست. در واقع نحوه انجام همین کار هست که می خواید. کافیه یک پروژه خالی رو ایجاد کنید و کارهایی که گفته رو مرحله به مرحله انجام بدید. البته دقت کنید که توی این لینک یک مثال از نوع Console هست.
سوال شما چون به صورت Visual هست کمی فرق داره. ببینید شما ترتیب اجرای رویداد رو نمی تونید تغییر بدید. هر رویداد وقتی رخ میده دستوراتش اجرا میشه. شما میفرمایید وقتی برنامه اجرا میشه و کاربر میاد روی DataGrid کلیک میکنه ابتدا رویداد TextChanged رخ میده. احتمال میدم رویداد DataGrid_Click رخ نمیده در اینجا اصلا.
رویدادهای CellClick یا MouseDown رو هم چک کنید شاید اونها جواب بدن.
- جلوگیری از اد شدن خودکار در گروه و کانال تلگرام
- کم کردن حجم فیلم توسط کد در Asp net core
- چه کسانی استوری تلگرام را می بینند ؟
- برای کسب و کار تلگرام پرمیوم بهتره یا واتس اپ بیزینس ؟
- جلوگیری از انتشار غیرمجاز مطالب در کانال های تلگرامی
- تفاوت های تلگرام و واتس اپ چیست ؟
- چرا استوری های واتس اپ برای دوستان نمایش داده نمیشن ؟
- چند تا استوری رایگان می تونیم تلگرام بذاریم ؟
- خطای Severity Code Description Project هنگام استارت پروژه
- کار نکردن navBar و sideBar در پروژه Asp.net core
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- رفع خطا در مایگریشن - Specify ON DELETE NO ACTION or ON UPDATE NO ACTION
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress