دسته بندی ها
08:59 1399/10/21

مشکل اجرای خود به خود رویداد Selection Change برای ComboBox در سی شارپ

مشخصات سوال کننده :
کاربر : MohammadH     امتیاز کاربر : 18     رتبه کاربر : 40
دسته بندی : WPF سی شارپ

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

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

برای جلوگیری از اجرای ناخواسته رویداد SelectionChanged در کمبوباکس یا دیتاگرید در C#، می توانید از یک پرچم (flag) برای ارزیابی اینکه آیا انتخاب واقعاً تغییر کرده است یا خیر استفاده کنید. با استفاده از یک پرچم، می توانید مشخص کنید که آیا باید کد داخل رویداد اجرا شود یا نه.

در اینجا یک نمونه کد ارایه می شود:


private bool isSelectionChanging = false;

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (isSelectionChanging)
        return;

    // اینجا کد مربوط به زمان تغییر انتخاب
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    isSelectionChanging = true;

    // تغییر انتخاب کمبوباکس
    comboBox1.SelectedIndex = 1; // به عنوان مثال

    isSelectionChanging = false;
}

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

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : fateme 20:22 1399/10/21

ببینید در حالت معمول نباید این طور که شما میفرمایید بشه. بنظرم پنجره خودتون رو حذف کنید و مجدد یک پنجره جدید ایجاد کنید و یک ComboBox قرار بدید. ببینید من دقیقا کدهای شما رو از لینکی که قرار دادید کپی کردم و برنامه رو اجرا کردم و هیچ پیامی هم ظاهر نمیشه :

 

کدهای xaml

<ComboBox x:Name="Cmb_Anbar" HorizontalAlignment="Left" Margin="192,112,0,0" VerticalAlignment="Top" Width="123" Height="30" FlowDirection="RightToLeft" SelectedIndex="0" IsEditable="True" SelectionChanged="Cmb_Anbar_SelectionChanged">
            <ComboBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling"/>
                </ItemsPanelTemplate>
            </ComboBox.ItemsPanel>
</ComboBox>

 

کدهای سی شارپ

private void Cmb_Anbar_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show("salam");
}

پنجره طراحی 

 

پروژه بعد از اجرا بدون پیام

 

 

سعی کنید خاصیت SelectedIndex برابر با 0 نباشه برای این کنترل

به این پاسخ امتیاز بدهید    0
امتیاز: 1635 رتبه: 2
پاسخ دهنده : mojtabahakimian 08:40 1399/10/22

https://www.quora.com/Why-does-the-SelectionChange-event-run-when-it-did-not-happen-in-C

سپاس گزارم

بررسی کردم Selection Change در واقع اتفاق می افتد در صورتی که Selected Index روی 0 باشد برای همین باید  این رویداد که ایجاد کردین از توی کد XAML حذفش کنید(یا همون بخش Event ها که دابل کلیک میکنیم) و توی Window_Loaded صداش بزنید

بزنید : 

MyComboBox1.SelectionChange += MyComboBox1_SelectionChange

توی لینک بالا توضیح داده که در واقع این رویداد اتفاق می افتد چون باید کمبوباکس رو از هیچی به 0 تبدیل کنه 

نکته : اگر توی لودینگ Window_Loaded  کد هستش باید در انتهای اون کد ها Selection Change رو صدا بزنید !

ویرایش شده در دوشنبه 22 دی 1399 ساعت 12:56:31
به این پاسخ امتیاز بدهید    1
امتیاز: 155 رتبه: 10
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود