تجاوز السلوك الافتراضي لمفتاح الفضاء في .NET Winforms ListView
سؤال
أود تنفيذ بعض السلوك المخصص لـ الفراغ المفتاح في عرض القائمة. في الأساس أود تبديل الحالة المحددة للعنصر تحت المؤشر - يجب أن يكون ذلك بسيطًا إلى حد ما
this.FocusedItem.Selected = !this.FocusedItem.Selected;
لكن للأسف ، فإنه يقوم أيضًا بالإجراء الافتراضي ، وهو لتحديد العنصر المركّز. بهذه الطريقة لا أستطيع "إلغاء تحديد" العنصر المركّز. لقد بحثت عن مشاكل مماثلة ويقترحون استخدام المعاينة الحدث ، حيث سأقوم بمعالجة المفتاح وعدم السماح بمشاهدة ListView للقيام بالإجراء الافتراضي. لكن حجة حدث المعاينة لا تحتوي على خاصية "معالجة" ، لذلك لا يمكنني "تناول" هذا المفتاح.
المحلول
هذا عمل كما تريد:
private void listView1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyData == Keys.Space) {
listView1.FocusedItem.Selected = !listView1.FocusedItem.Selected;
e.Handled = e.SuppressKeyPress = true;
}
}
لا تنتمي إلى StackOverflow