9

SetWindowThemeとSendMessageを使用して、.netリストビューをビスタスタイルのリストビューのように見せていますが、.netコントロールには、選択したアイテムの周囲に点線の選択境界線があります。

リストビュー

エクスプローラーリストビューで選択されたアイテムには、その周囲に境界線がありません。どうすれば削除できますか?

Windowsエクスプローラ:

Windowsエクスプローラ

編集:解決策:

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

6 に答える 6

5

これをNON P / Invokeの方法で行う...

ListView コントロールをオーバーライドし、次を追加します。

protected override void OnSelectedIndexChanged(EventArgs e)
{
    base.OnSelectedIndexChanged(e);
    Message m = Message.Create(this.Handle, 0x127, new IntPtr(0x10001), new IntPtr(0));
    this.WndProc(ref m);
}

protected override void OnEnter(EventArgs e)
{
    base.OnEnter(e);
    Message m = Message.Create(this.Handle, 0x127, new IntPtr(0x10001), new IntPtr(0));
    this.WndProc(ref m);
}
于 2015-01-16T09:28:14.157 に答える
3

HotTracking プロパティを true に設定すると、フォーカス四角形が非表示になります。これは、私の Win7 マシンで Explorer スタイルを再現したものです。

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

項目に下線が引かれるのは副作用であることに注意してください。

于 2010-04-22T16:37:40.377 に答える
2

ListView.ShowFocusCuesプロパティをfalseに設定すると役立ちますか?

于 2010-04-22T14:37:30.577 に答える
1

Windows フォームを使用して ListViewItem スタイルを変更する特定の方法はないようです。

マネージド コードを使用して一部の Win32 コントロールの動作を変更する方法がない場合があります。唯一の方法は、P/Invoke を実行して特定の動作を変更することです。これは本当に難しいと思いますが、他に選択肢はありません。私は、Windows Mobile UI を開発しているときに、このような状況によく直面しました (当然、ListView を使用しました)。

したがって、あなたの質問に対する直接的な回答はありませんが、Windows フォームを使用できない場合は、P/Invoke を使用すれば確実に解決できると確信しています。私があなたに与えることができる唯一の手がかり:

于 2010-04-22T15:41:34.467 に答える