问题描述
|
我想在列表视图的标题中显示一个排序箭头,发现了这一点:
如何使用C#在列表视图列的标题中显示排序箭头?
而且有效。
我试图将代码修改为:
const Int32 HDF_SORTDOWN = 0x200;
const Int32 HDF_SORTUP = 0x400;
const Int32 HDI_FORMAT = 0x4;
const Int32 HDM_GETITEM = 0x120b;
const Int32 HDM_SETITEM = 0x120c;
const Int32 LVM_GETHEADER = 0x101f;
[DllImport(\"user32.dll\",CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd,UInt32 msg,IntPtr wParam,IntPtr lParam);
[DllImport(\"user32.dll\",CharSet = CharSet.Auto,EntryPoint = \"SendMessage\")]
static extern IntPtr SendMessageLVCOLUMN(IntPtr hWnd,ref LVCOLUMN lParam);
struct LVCOLUMN
{
public UInt32 mask;
public Int32 fmt;
public Int32 cx;
public String pszText;
public Int32 cchTextMax;
public Int32 iSubItem;
public Int32 iImage;
public Int32 iOrder;
public Int32 cxMin;
public Int32 cxDefault;
public Int32 cxIdeal;
}
private void SetSortIcon(ListView lstVw,int column,SortOrder sorting)
{
IntPtr clmHdr = SendMessage(lstVw.Handle,LVM_GETHEADER,IntPtr.Zero,IntPtr.Zero);
for (int i = 0; i < lstVw.Columns.Count; i++)
{
IntPtr clmPtr = new IntPtr(i);
LVCOLUMN lvColumn = new LVCOLUMN();
lvColumn.mask = HDI_FORMAT;
SendMessageLVCOLUMN(clmHdr,HDM_GETITEM,clmPtr,ref lvColumn);
if (sorting != SortOrder.None && i == column)
{
if (sorting == SortOrder.Ascending)
{
lvColumn.fmt &= ~HDF_SORTDOWN;
lvColumn.fmt |= HDF_SORTUP;
}
else
{
lvColumn.fmt &= ~HDF_SORTUP;
lvColumn.fmt |= HDF_SORTDOWN;
}
}
else
{
lvColumn.fmt &= ~HDF_SORTDOWN & ~HDF_SORTUP;
}
SendMessageLVCOLUMN(clmHdr,HDM_SETITEM,ref lvColumn);
}
}
这不起作用。
原始版本是扩展方法,不是。
我想知道为什么这个不起作用。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)