在VB中我正在使用Windows窗体DatagridView。
所以在这里我试图获得该功能,在运行应用程序之后,用户应该能够调整列宽(On the Fly)。
我经历过很多东西,但他们只提供静态解决方案。但我想要实现的是在应用程序开始运行之后,如果用户想要自定义列宽,那么它的选项是什么?
答案 0 :(得分:0)
我不确定是否可以使用标准.NET DataGridViews执行此操作,但如果您下载并使用infragistic控件,它们允许您动态更改列宽作为标准。
答案 1 :(得分:0)
除非您将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