#c# #winforms #listbox
#c# #winforms #список
Вопрос:
У меня есть список, я могу выбирать записи (режим одиночного выбора — по одному за раз) с помощью клавиатуры и мыши, но когда я использую клавиши со стрелками вверх и вниз, он не выбирает список. Но возможность прокручивать список с подчеркиванием под каждым объектом, с которым связана клавиша со стрелкой. Спасибо
Комментарии:
1. Итак, в основном, когда вы нажимаете вверх / вниз, вы хотите прокручивать список вместо выбора следующего / предыдущего элемента?
Ответ №1:
Добавьте обработчик в событие Form1.KeyDown:
private Form1_KeyDown(object sender, KeyEventArgs e)
{
this.listBox1.Focus();
this.listBox1.Select();
if (e.Key == Keys.Up)
{
this.listBox1.SelectedIndex--;
}
else if (e.Key == Keys.Down)
{
this.listBox1.SelectedIndex ;
}
}
Ответ №2:
Я думаю, вы можете сделать это с помощью API SendMessage. Что-то вроде этого:
private const int WM_VSCROLL = 0x115;
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, UIntPtr wParam, IntPtr lParam);
private void listBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Down)
{
SendMessage(this.listBox.Handle, (uint)WM_VSCROLL, (System.UIntPtr)ScrollEventType.SmallIncrement, (System.IntPtr)0);
e.Handled = true;
}
if (e.KeyCode == Keys.Up)
{
SendMessage(this.listBox.Handle, (uint)WM_VSCROLL, (System.UIntPtr)ScrollEventType.SmallDecrement, (System.IntPtr)0);
e.Handled = true;
}
}
Ответ №3:
Я написал этот код
private void listBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Up)
{
int indicee = listBox1.SelectedIndex;
label2.Text = indicee.ToString();
}
if (e.KeyCode == Keys.Down)
{
int indicee = listBox1.SelectedIndex;
label2.Text = indicee.ToString();
}
но при нажатии вниз индекс не меняется, я думаю, что код должен быть в другом событии.
Ответ №4:
Это лучший способ, для меня он работает нормально
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
int indicee = listBox1.SelectedIndex 1;
label6.Text = indicee.ToString();
ni = indicee-1;
if (ni >= 0)
{ loadender(ni); }
Когда вы перемещаетесь с помощью клавиш со стрелками, индекс списка тоже меняется, тогда вы пишете свой код в этом событии.