質問

リストビューには少し問題があります。

リストビュー項目を正常にロードできますが、背景色を設定すると、行の左側まで色が描画されません [listViewItems は、グリッドビューを作成するために ListViewSubItems とともにロードされます。最初の列のみですエラーを示します]。ペイントされていない細い帯があります。そのストリップの幅は、行ヘッダーがある場合の行ヘッダーの幅とほぼ同じです。

背景を描画するために何ができるかについて考えがある場合は、ぜひお聞きください。

ここで、新しいアイデアを試すために、この混乱した疑似グリッド ビューのひどい構成をまだ使用している最初のソリューションに 10 票の報奨金を提供します。[私はレガシーコードが大好きです。]

編集:

以下は問題を示すサンプルです。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        ListView lv = new ListView();

        lv.Dock = System.Windows.Forms.DockStyle.Fill;
        lv.FullRowSelect = true;
        lv.GridLines = true;
        lv.HideSelection = false;
        lv.Location = new System.Drawing.Point(0, 0);
        lv.TabIndex = 0;
        lv.View = System.Windows.Forms.View.Details;
        lv.AllowColumnReorder = true;

        this.Controls.Add(lv);

        lv.MultiSelect = true;

        ColumnHeader ch = new ColumnHeader();
        ch.Name = "Foo";
        ch.Text = "Foo";
        ch.Width = 40;
        ch.TextAlign = HorizontalAlignment.Left;

        lv.Columns.Add(ch);

        ColumnHeader ch2 = new ColumnHeader();
        ch.Name = "Bar";
        ch.Text = "Bar";
        ch.Width = 40;
        ch.TextAlign = HorizontalAlignment.Left;

        lv.Columns.Add(ch2);

        lv.BeginUpdate();

        for (int i = 0; i < 3; i++)
        {


            ListViewItem lvi = new ListViewItem("1", "2");

            lvi.BackColor = Color.Black;
            lvi.ForeColor = Color.White;

            lv.Items.Add(lvi);
        }
        lv.EndUpdate();
    }
}
役に立ちましたか?

解決

ああ!今分かりました:}

ハッキーが欲しいですか?私はあなたに次のものを提示します:

    ...
    lv.OwnerDraw = true;
    lv.DrawItem += new DrawListViewItemEventHandler( lv_DrawItem );
    ...

void lv_DrawItem( object sender, DrawListViewItemEventArgs e )
{
    Rectangle foo = e.Bounds;
    foo.Offset( -10, 0 );
    e.Graphics.FillRectangle( new SolidBrush( e.Item.BackColor ), foo );
    e.DrawDefault = true;
}

より独創的で、ハック的なアプローチをするには、ListView の背景画像を利用してみてください ;)

他のヒント

(編集前...)

System.Windows.Forms.ListView で BackColor を設定しようとしましたが、色はコントロール全体に (画像の有無にかかわらず) 問題なく適用されます。

カスタムペイントなどは行っていますか?

OK、解決策のメモをいくつか追加します。上記の解決策を使用する場合は、列ヘッダーの描画ハンドラーも挿入する必要があります。そうしないと、列ヘッダーは描画されません。選択されたアイテムの四角形も奇妙に見えるため、lv_DrawItem 関数でそれを確認し、同様の解決策を実装する必要があります。ハイライトはアプリケーションではなくシステム レベルで選択されることに注意してください。

より良いリストビュー (そして無料 ListView Express の改善) を使用すると、さまざまな配置設定 (中央揃え、並べて表示、引き伸ばし、フィット、境界線/コーナーへのスナップ) を使用して背景画像を設定できます。アルファ透明度もサポートされています。

enter image description here

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top