2

在 VB 中,我正在使用 Windows 窗体 DatagridView。

所以在这里我试图获得运行应用程序后用户应该能够调整列宽大小(动态)的功能。

我经历了很多东西,但它们只提供静态解决方案。但是我想要实现的是在应用程序开始运行之后,如果用户想要自定义列宽,那有什么选择呢?

4

2 回答 2

0

我不确定是否能够使用标准的 .NET DataGridViews 执行此操作,但如果您下载并使用基础控件,它们允许您作为标准动态更改列宽。

于 2012-10-29T09:16:09.220 回答
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
于 2012-10-30T02:58:24.513 回答