DataGridViewTextBoxCell、DataGridViewCell に対する AutoEllipsis (省略記号)の制御

Re[2]: DataGridViewセルでの省略記号を表示させないように
このリンク先によると DataGridViewTextBoxCell、DataGridViewCell には AutoEllipsis がないようです。

省略記号の非表示を行うサンプルコードが次のリンク先に載っています。
Re[4]: DataGridで...を表示しないようにするには?

ただし、このコードには、以下の問題があります。
・選択範囲内のアクティブ・セルの点線描画を行わない。
・TextRenderer.DrawText で文字列を描画すると、行セレクターの上に描画してしまうことがある。

グリッド・セルの省略記号については、次のリンク先にも情報がありました。

How to: Customize the Appearance of Cells in the Windows Forms DataGridView Control | Microsoft Docs

これを参考に上記の問題点を修正したものが以下のコードです。

    Private Sub dgv_CellPainting(ByVal sender As Object, _
                                 ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs _
    ) Handles dgv.CellPainting
        If e.RowIndex > -1 Then
            Select Case e.ColumnIndex
                Case txtName.Index      'txtName はグリッドの列名

                    If e.Value Is Nothing Then
                        Exit Sub
                    End If

                    '背景の描画
                    e.Paint(e.CellBounds, DataGridViewPaintParts.All And (Not DataGridViewPaintParts.ContentForeground))

                    'テキストの色
                    Dim ForeColor As Color
                    If (e.State And DataGridViewElementStates.Selected) <> 0 Then
                        ForeColor = e.CellStyle.SelectionForeColor
                    Else
                        ForeColor = e.CellStyle.ForeColor
                    End If

                    Using ForeColorBrush = New SolidBrush(ForeColor)

                        Dim StrFormat As New StringFormat()
                        StrFormat.Trimming = StringTrimming.None
                        StrFormat.FormatFlags = StrFormat.FormatFlags Or StringFormatFlags.NoWrap

                        Select Case e.CellStyle.Alignment
                            Case DataGridViewContentAlignment.BottomLeft, _
                                 DataGridViewContentAlignment.BottomCenter, _
                                 DataGridViewContentAlignment.BottomRight

                                StrFormat.LineAlignment = StringAlignment.Far

                            Case DataGridViewContentAlignment.MiddleLeft, _
                                DataGridViewContentAlignment.MiddleCenter, _
                                DataGridViewContentAlignment.MiddleRight

                                StrFormat.LineAlignment = StringAlignment.Center

                            Case DataGridViewContentAlignment.TopLeft, _
                                DataGridViewContentAlignment.TopCenter, _
                                DataGridViewContentAlignment.TopRight
                                StrFormat.LineAlignment = StringAlignment.Near
                        End Select

                        Dim newRect As New Rectangle( _
                                                e.CellBounds.X + e.CellStyle.Padding.Left, _
                                                e.CellBounds.Y + e.CellStyle.Padding.Top + 2, _
                                                e.CellBounds.Width - e.CellStyle.Padding.Horizontal - 2, _
                                                e.CellBounds.Height - e.CellStyle.Padding.Vertical - 3)

                        e.Graphics.DrawString(CStr(e.Value), _
                                                e.CellStyle.Font, _
                                                ForeColorBrush, _
                                                newRect, _
                                                StrFormat)


                    End Using

                    '描画処理を自分で行った場合は true
                    e.Handled = True

            End Select

        End If

    End Sub