如何解决在 C# 中找到 CurrentViewMode 的等价物
我正在浏览 webbrowser 控件中的本地文件夹,并且我使用的是 .NET 4.7:
webbrowser1.Navigate("C:/some_folder");
此文件夹以垂直线显示 pdf,其中包含上次更新、大小和类型。 我只需要找到允许我在“马赛克视图”中显示此列表的属性,图标更大,并且没有任何额外信息,如上次更新、大小或文档类型...... 经过一番挖掘,我发现一些 vb.net 用户获得了属性 webbrowser.Document.Currentviewmode。我确实有 webbrowser.Document 但没有像 Currentviewmode 这样的东西......我想这应该是一件愚蠢的事情,因为这相当于右键单击并选择显示的文档列表的属性......)
感谢您的帮助
解决方法
根据我的研究,我在 webbrower.document 中找不到名为 CurrentViewMode 的直接属性。
但是,我找到了另一种方法来更改网络浏览器的视图。
这是您可以参考的代码示例。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private const int LV_VIEW_ICON = 0x0;
private const int LV_VIEW_DETAILS = 0x1;
private const int LV_VIEW_SMALLICON = 0x2;
private const int LV_VIEW_LIST = 0x3;
private const int LV_VIEW_TILE = 0x4;
private const int EM_HIDEBALLOONTIP = 0x1504;
private const int LVM_SETVIEW = 0x108E;
private const string ListViewClassName ="SysListView32";
private static readonly HandleRef NullHandleRef = new HandleRef(null,IntPtr.Zero);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool EnumChildWindows(HandleRef hwndParent,EnumChildrenCallback lpEnumFunc,HandleRef lParam);
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd,int Msg,IntPtr wParam,IntPtr lParam);
[DllImport("user32.dll")]
static extern uint RealGetWindowClass(IntPtr hwnd,[Out] StringBuilder pszType,uint cchType);
private delegate bool EnumChildrenCallback(IntPtr hwnd,IntPtr lParam);
private HandleRef listViewHandle;
private void FindListViewHandle()
{
this.listViewHandle = NullHandleRef;
EnumChildrenCallback lpEnumFunc = new EnumChildrenCallback(EnumChildren);
EnumChildWindows(new HandleRef(this.webBrowser1,this.webBrowser1.Handle),lpEnumFunc,NullHandleRef);
}
private bool EnumChildren(IntPtr hwnd,IntPtr lparam)
{
StringBuilder sb = new StringBuilder(100);
RealGetWindowClass(hwnd,sb,100);
if (sb.ToString() == ListViewClassName)
this.listViewHandle = new HandleRef(null,hwnd);
return true;
}
private void Form1_Load(object sender,EventArgs e)
{
webBrowser1.Navigate("D:/pdf");
comboBox1.Items.Add(LV_VIEW_ICON);
comboBox1.Items.Add(LV_VIEW_DETAILS);
comboBox1.Items.Add(LV_VIEW_SMALLICON);
comboBox1.Items.Add(LV_VIEW_LIST);
comboBox1.Items.Add(LV_VIEW_TILE);
}
private void button1_Click(object sender,EventArgs e)
{
FindListViewHandle();
int view = Convert.ToInt32(comboBox1.SelectedItem);
SendMessage((IntPtr)this.listViewHandle,LVM_SETVIEW,(IntPtr)view,(IntPtr)0);
}
}
更新代码说明:
首先,我们使用FindListViewHandle()
在webbrowser中找到listview控件的句柄(listViewHandle
),所以我使用EnumChildWindows
方法来迭代子控件。
其次,我们可以使用combobox1来存储不同的listview样式。
第三,消息LVM_SETVIEW
表示设置列表视图控件的视图。
最后,SendMessage
方法将在 webbrowser 中找到 listviewcontrol 并设置 list-view 控件的视图并通过组合框值设置其样式。
这里有一些参考资料来自 Microsoft doc,您可以参考。
结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。