ListBox聚焦项目

时间:2009-07-03 19:28:08

标签: .net winforms controls

这是一个WinForms问题。

在带有SelectionMode = MultiSimple的ListBox中,如何获取当前关注的项目?

注意,我不想获取SelectedItem或SelectedItems,而是获取当前包含虚线的项目,例如ListView.FocusedItem。

3 个答案:

答案 0 :(得分:1)

这有点像hacky,但我还没有找到更好的解决方案。

  1. 将ListBox.DrawMode放在OwnerDrawFixed
  2. 捕获DrawItem事件并将焦点索引保存在字段

        if (e.State == DrawItemState.Focus) {
            myfocus = e.Index;
        }
        // Draw the background of the ListBox control for each item.
        e.DrawBackground();
        // Define the default color of the brush as black.
        if (brochas.Count != colores.Count) {
            ProcesarBrochas();
        }
    
        // Draw the current item text based on the current Font 
        // and the custom brush settings.
        if (Items.Count > e.Index) {
            e.Graphics.DrawString(Items[e.Index].ToString(),
                e.Font, Brushes.Black, e.Bounds, StringFormat.GenericDefault);
        }
        // If the ListBox has focus, draw a focus rectangle around the selected item.
        e.DrawFocusRectangle();
    
  3. 使用myFocus变量

答案 1 :(得分:0)

我认为默认情况下没有 - 用户控件可能是您唯一的选择。

您可能想重新考虑自己在做什么 - 为什么需要专注的而不是选择的?可能有不同的方式。

答案 2 :(得分:0)

这不是一个完美的解决方案,但解决方法可能是在模糊事件触发时将selectedItem存储到“focusedItem”,然后在需要时将其检索。