在VB中,我正在使用Windows forms DatagridView。
因此,在这里,我试图获得的功能,在运行应用程序后,用户应该能够调整列宽(在飞行)。
我经历了很多东西,但它们只提供静态解决方案。但我想要实现的是在应用程序开始运行后,如果用户想要自定义列宽,那么有什么选择呢?
发布于 2012-10-29 17:16:09
我不确定使用标准的.NET DataGridViews是否能够做到这一点,但如果您下载并使用基础架构控件,它们将允许您按照标准动态更改列宽。
发布于 2012-10-30 10:58:25
除非您将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
https://stackoverflow.com/questions/13116942
复制相似问题