2

VB では、Windows フォームの DatagridView を使用しています。

ここでは、アプリケーションを実行した後、ユーザーが列幅のサイズを変更できるようにする機能を取得しようとしています(オンザフライ)。

私は多くのことを経験しましたが、それらは静的なソリ​​ューションしか提供しません。しかし、私が達成したいのは、アプリケーションの実行が開始された後です。ユーザーが列幅をカスタマイズしたい場合、そのオプションは何ですか?

4

2 に答える 2

0

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
于 2012-10-30T02:58:24.513 に答える
0

標準の .NET DataGridViews でこれを実行できるかどうかはわかりませんが、インフラジスティック コントロールをダウンロードして使用すると、標準でその場で列幅を変更できます。

于 2012-10-29T09:16:09.220 に答える