VB では、Windows フォームの DatagridView を使用しています。
ここでは、アプリケーションを実行した後、ユーザーが列幅のサイズを変更できるようにする機能を取得しようとしています(オンザフライ)。
私は多くのことを経験しましたが、それらは静的なソリューションしか提供しません。しかし、私が達成したいのは、アプリケーションの実行が開始された後です。ユーザーが列幅をカスタマイズしたい場合、そのオプションは何ですか?
VB では、Windows フォームの DatagridView を使用しています。
ここでは、アプリケーションを実行した後、ユーザーが列幅のサイズを変更できるようにする機能を取得しようとしています(オンザフライ)。
私は多くのことを経験しましたが、それらは静的なソリューションしか提供しません。しかし、私が達成したいのは、アプリケーションの実行が開始された後です。ユーザーが列幅をカスタマイズしたい場合、そのオプションは何ですか?
AllowUserToResizeColumnsを適切にfalseに設定しない限り、ユーザーは、Excelのような「標準」グリッドのように、マウスを使用して好きなように変更できるはずです。
ただし、その設定をどのように保持するかを尋ねているのではないかと思います。そうすれば、次にユーザーがそれを実行したときに、列がユーザーの好みに戻されますか?
これを行う1つの方法は、イベントの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
標準の .NET DataGridViews でこれを実行できるかどうかはわかりませんが、インフラジスティック コントロールをダウンロードして使用すると、標準でその場で列幅を変更できます。