문제

Listview에 약간의 문제가 있습니다.

목록 보기 항목을 잘 로드할 수 있지만 배경색을 설정하면 행의 왼쪽까지 색상이 그려지지 않습니다. [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를 설정하려고 시도했는데 색상이 이미지 유무에 관계없이 컨트롤 전체에 잘 적용되었습니다.

커스텀 페인팅을 하고 계시나요?

좋습니다. 추가 솔루션 노트를 추가하겠습니다.위의 솔루션을 사용하는 경우 열 헤더에 대한 그리기 핸들러도 삽입해야 합니다. 그렇지 않으면 그려지지 않습니다.선택한 항목 직사각형도 재미있어 보이므로 lv_DrawItem 함수에서 이를 확인하고 유사한 솔루션을 구현하는 것이 좋습니다.강조 표시는 응용 프로그램이 아닌 시스템 수준에서 선택된다는 점을 기억하십시오.

더 나은 목록 보기 (그리고 무료 더 나은 ListView Express)을 사용하면 다양한 정렬 설정(중앙, 타일, 늘임, 맞춤, 테두리/모서리에 맞춤)으로 배경 이미지를 설정할 수 있습니다.알파 투명도도 지원됩니다.

enter image description here

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top