تجاوز السلوك الافتراضي لمفتاح الفضاء في .NET Winforms ListView

StackOverflow https://stackoverflow.com/questions/2551881

سؤال

أود تنفيذ بعض السلوك المخصص لـ الفراغ المفتاح في عرض القائمة. في الأساس أود تبديل الحالة المحددة للعنصر تحت المؤشر - يجب أن يكون ذلك بسيطًا إلى حد ما

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;
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top