开发者

C#, winform - List box selection using up and down arrow key?

开发者 https://www.devze.com 2023-04-11 07:42 出处:网络
I have list box, I a开发者_开发知识库m able to select the entries (Single select mode - one at a time) using keyboard and mouse, but when i use up and down arrow keys, its not selecting the list. But

I have list box, I a开发者_开发知识库m able to select the entries (Single select mode - one at a time) using keyboard and mouse, but when i use up and down arrow keys, its not selecting the list. But able to scroll the list with an underline below each entity the arrow key is related. Thanks


Add a handler to Form1.KeyDown event:

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++;
  }
}


I think you can do this using the SendMessage API. Something like this:

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;
    }
}


I have write this code

     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();
        }

but when press down the index dont change , i think the code must be in other event.


This is the best way , its working fine for me

         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); }

When you moves with arrows keys the index of the listbox changes too, then you write your code in this event.

0

精彩评论

暂无评论...
验证码 换一张
取 消