在 VB 中,我正在使用 Windows 窗体 DatagridView。
所以在这里我试图获得运行应用程序后用户应该能够调整列宽大小(动态)的功能。
我经历了很多东西,但它们只提供静态解决方案。但是我想要实现的是在应用程序开始运行之后,如果用户想要自定义列宽,那有什么选择呢?
在 VB 中,我正在使用 Windows 窗体 DatagridView。
所以在这里我试图获得运行应用程序后用户应该能够调整列宽大小(动态)的功能。
我经历了很多东西,但它们只提供静态解决方案。但是我想要实现的是在应用程序开始运行之后,如果用户想要自定义列宽,那有什么选择呢?
我不确定是否能够使用标准的 .NET DataGridViews 执行此操作,但如果您下载并使用基础控件,它们允许您作为标准动态更改列宽。
除非您将 AllowUserToResizeColumns 属性设置为 false,否则用户应该能够使用鼠标随意修改它们,就像 Excel 中的“标准”网格一样。
但是,我怀疑您在问如何保留该设置,以便下次运行它时,将列设置回用户的偏好?
一种方法是处理事件上的 ColumnWidthChanged 事件并将值存储在注册表中:
Private Sub DataGridView1_ColumnWidthChanged(sender As Object, e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles data1.ColumnWidthChanged
Dim dt As DataGridView
dt = DirectCast(sender, DataGridView)
With My.Computer.Registry
.CurrentUser.CreateSubKey(csRegKey & "\Columns\" & dt.Name)
.SetValue("HKEY_CURRENT_USER\" & csRegKey & "\Columns\" & dt.Name, e.Column.Name, e.Column.Width, Microsoft.Win32.RegistryValueKind.DWord)
End With
End Sub
其中 csRegKey 是您选择的常量字符串值,用于定义 HKCU 配置单元中存储该值的位置,例如“Software\MyAppName”。
然后,当您的应用程序启动时,读取这些值的注册表并将它们相应地应用于列宽:
Dim key As Microsoft.Win32.RegistryKey
key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(csRegKey & "\Columns\YourDataName")
If key IsNot Nothing Then
For Each colAny As DataGridViewColumn In Me.data1.Columns
If key.GetValue(colAny.Name) <> 0 Then
colAny.Width = key.GetValue(colAny.Name)
End If
Next
key.Close()
End If