教えて頂いたサンプルを自分の開発環境であるVB.NETを下記のように 書き直しました。 --------------------------------------------------------- Public Class sListView Inherits ListView
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) MyBase.OnPaint(e) ControlPaint.DrawBorder(e.Graphics,Me.ClientRectangle, Color.Red, ButtonBorderStyle.Solid) End Sub
Private Const WM_PAINT As Integer = &HF
Protected Overrides Sub WndProc(ByRef m As Message) MyBase.WndProc(m) If m.Msg = WM_PAINT Then Me.OnPaint(New PaintEventArgs(Me.CreateGraphics(), Bounds)) End If End Sub End Class --------------------------------------------------------- フォームにListViewコントロールを配置してデザイナで生成されたコード内の ListViewの部分を下記のようにSListViewに変更して実行しましたが 「トップレベルのコントロールをコントロールに追加できません。」 のエラーが発生します。 継承したコントロールをフォームに配置する方法が間違っているのでしょうか? --------------------------------------------------------- Friend WithEvents ListView1 As sListView Me.ListView1 = New sListView Me.SuspendLayout() ' 'ListView1 ' Me.ListView1.Location = New System.Drawing.Point(64, 56) Me.ListView1.Name = "ListView1" Me.ListView1.Size = New System.Drawing.Size(256, 120) Me.ListView1.TabIndex = 0
Imports System.Runtime.InteropServices Public Class HIListView Inherits ListView
Private Const WM_PAINT As Integer = &HF Private BorderColor As Color = SystemColors.InactiveCaption
<DllImport("user32.dll")> _ Private Shared Function GetWindowDC(ByVal hWnd As IntPtr) As IntPtr End Function
<DllImport("user32.dll")> _ Private Shared Function ReleaseDC(ByVal hWnd As IntPtr, ByVal hDC As IntPtr) As Integer End Function
Public Sub New() Me.ResizeRedraw = True End Sub
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) MyBase.OnPaint(e) Dim rect As Rectangle rect = New Rectangle(0, 0, e.ClipRectangle.Width, e.ClipRectangle.Height) ControlPaint.DrawBorder(e.Graphics, rect, BorderColor, ButtonBorderStyle.Solid) End Sub
Protected Overrides Sub WndProc(ByRef m As Message) MyBase.WndProc(m) If m.Msg = WM_PAINT Then Dim hdc As IntPtr = IntPtr.Zero Dim g As Graphics = Nothing Try hdc = GetWindowDC(Me.Handle) g = Graphics.FromHdc(hdc) Me.OnPaint(New PaintEventArgs(g, Me.Bounds)) Catch ex As Exception
End Try g.Dispose() ReleaseDC(Me.Handle, hdc) End If End Sub End Class
申し訳ありません。再度お願いします。 今日一日で問題のあったVBでのコードをVC#に書き直してテストしましたが 結果はVBで書いていたものと同じ現象が出ています。 ご指摘のように別の場所に原因があるのでしょうか? ------------------------------------------------ using System; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices;
分類:[.NET]
Listviewの境界線の色を変えるため悪戦苦闘しています。現在はBorderStyle=Noneに設定してOnPaintで境界線を描画していますが別のフォームが重なったりすると境界線が消えてしまいます。このような手法では根本的な解決にならないと思いListViewを継承する新しいクラスを作りその中で境界線の色を設定するプロパティを追加したいと思います。どなたか解決策をご存知の方ヒントでも結構ですのでお助けください。