Как я могу удалить границу выделения на ListViewItem

Я использую SetWindowTheme, и SendMessage для создания .NET listview похожи на стиль перспективы listview, но управление .NET все еще имеет точечную границу выделения вокруг выбранного пункта:

listview

Выбранные пункты в проводнике listview не имеют той границы вокруг них. Как я могу удалить его?

Windows Explorer:

windows explorer

Править: Решение:

public static int MAKELONG(int wLow, int wHigh)
{
    int low = (int)LOWORD(wLow);
    short high = LOWORD(wHigh);
    int product = 0x00010000 * (int)high;
    int makeLong = (int)(low | product);
    return makeLong;
}

SendMessage(olv.Handle, WM_CHANGEUISTATE, Program.MAKELONG(UIS_SET, UISF_HIDEFOCUS), 0);
9
задан Axalo 10 April 2017 в 22:34
поделиться

3 ответа

Помогает ли установка свойства ListView.ShowFocusCues значения false?

2
ответ дан 4 December 2019 в 10:31
поделиться

Установка для свойства HotTracking значения true скрывает прямоугольник фокуса. Это воспроизвело стиль проводника на моей машине Win7:

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

class MyListView : ListView {
  public MyListView() {
    this.HotTracking = true;
  }
  protected override void OnHandleCreated(EventArgs e) {
    base.OnHandleCreated(e);
    SetWindowTheme(this.Handle, "explorer", null);
  }
  [DllImport("uxtheme.dll", CharSet = CharSet.Auto)]
  public extern static int SetWindowTheme(IntPtr hWnd, string appname, string subidlist);
}

Помните, что подчеркнутые элементы являются побочным эффектом.

3
ответ дан 4 December 2019 в 10:31
поделиться

Не похоже, что существует особый способ изменить стили ListViewItem с помощью Windows Forms.

Иногда невозможно изменить поведение некоторых элементов управления Win32 с помощью управляемого кода. Единственный способ - выполнить P / Invoke для изменения определенного поведения. Я считаю, что это действительно сложно, но у тебя нет другого выбора. Я часто сталкивался с этой ситуацией при разработке пользовательского интерфейса Windows Mobile (справедливо с помощью ListView).

У меня нет прямого ответа на ваш вопрос, но я почти уверен, что, если это невозможно с помощью Windows Forms, вы, безусловно, можете сделать это с помощью P / Invoke. Единственные подсказки, которые я могу вам дать:

1
ответ дан 4 December 2019 в 10:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: