none
DataGridView WrapModeの仕様について RRS feed

  • 質問

  • お世話になります。

    VB.NET2013にて以下のコードでセル内自動折り返しを行いたかったのですが、連続した半角英数字が(URLや計算結果など)折り返されません。

    日本語やスペースが入っているときちんと折り返されるのですが・・・。

    DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells

    DataGridView1.Columns("Column1").DefaultCellStyle.WrapMode =  DataGridViewTriState.True

    連続した半角英数字を折り返す方法があれば教えていただけませんでしょうか。

    2017年12月20日 2:14

回答

  • これと同じかな?

    Partial Public Class Form1
        Inherits Form
    
        Public Sub New()
            InitializeComponent()
    
            Dim dgv As DataGridView = New DataGridView()
            dgv.Dock = DockStyle.Fill
    
            Dim col As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn()
            col.DefaultCellStyle.WrapMode = DataGridViewTriState.True
            dgv.Columns.Add(col)
    
            Me.Controls.Add(dgv)
    
            dgv.Rows.Add("ABCDEFGHIJKLMNOPQR12345")
    
            AddHandler dgv.CellPainting, AddressOf dgv_CellPainting
        End Sub
    
        Private Sub dgv_CellPainting(ByVal sender As Object, ByVal e As DataGridViewCellPaintingEventArgs)
            If e.CellStyle.WrapMode = DataGridViewTriState.True AndAlso e.FormattedValue IsNot Nothing AndAlso TypeOf e.FormattedValue Is String Then
                Dim s As String = DirectCast(e.FormattedValue, String)
                If s.Length > 0 Then
                    Dim dgv As DataGridView = DirectCast(sender, DataGridView)
                    Dim parts As DataGridViewPaintParts = e.PaintParts And Not (DataGridViewPaintParts.ContentForeground)
                    e.Paint(e.CellBounds, parts)
    
                    Dim brush As Brush
                    If (e.State And DataGridViewElementStates.Selected) = DataGridViewElementStates.Selected Then
                        brush = New SolidBrush(e.CellStyle.SelectionForeColor)
                    Else
                        brush = New SolidBrush(e.CellStyle.ForeColor)
                    End If
    
                    Dim sf As StringFormat = New StringFormat()
                    sf.Trimming = StringTrimming.Character 'これ
                    e.Graphics.DrawString(s, e.CellStyle.Font, brush, e.CellBounds, sf)
                    brush.Dispose()
                    e.Handled = True
                End If
            End If
        End Sub
    End Class


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2017年12月20日 3:09

すべての返信

  • これと同じかな?

    Partial Public Class Form1
        Inherits Form
    
        Public Sub New()
            InitializeComponent()
    
            Dim dgv As DataGridView = New DataGridView()
            dgv.Dock = DockStyle.Fill
    
            Dim col As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn()
            col.DefaultCellStyle.WrapMode = DataGridViewTriState.True
            dgv.Columns.Add(col)
    
            Me.Controls.Add(dgv)
    
            dgv.Rows.Add("ABCDEFGHIJKLMNOPQR12345")
    
            AddHandler dgv.CellPainting, AddressOf dgv_CellPainting
        End Sub
    
        Private Sub dgv_CellPainting(ByVal sender As Object, ByVal e As DataGridViewCellPaintingEventArgs)
            If e.CellStyle.WrapMode = DataGridViewTriState.True AndAlso e.FormattedValue IsNot Nothing AndAlso TypeOf e.FormattedValue Is String Then
                Dim s As String = DirectCast(e.FormattedValue, String)
                If s.Length > 0 Then
                    Dim dgv As DataGridView = DirectCast(sender, DataGridView)
                    Dim parts As DataGridViewPaintParts = e.PaintParts And Not (DataGridViewPaintParts.ContentForeground)
                    e.Paint(e.CellBounds, parts)
    
                    Dim brush As Brush
                    If (e.State And DataGridViewElementStates.Selected) = DataGridViewElementStates.Selected Then
                        brush = New SolidBrush(e.CellStyle.SelectionForeColor)
                    Else
                        brush = New SolidBrush(e.CellStyle.ForeColor)
                    End If
    
                    Dim sf As StringFormat = New StringFormat()
                    sf.Trimming = StringTrimming.Character 'これ
                    e.Graphics.DrawString(s, e.CellStyle.Font, brush, e.CellBounds, sf)
                    brush.Dispose()
                    e.Handled = True
                End If
            End If
        End Sub
    End Class


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2017年12月20日 3:09
  • ご教示いただきましたコードを参考に試行錯誤してみたら想定した仕様で動作しました。

    大変助かりました。ありがとうございました。

    2017年12月20日 7:44