سؤال

لدي مشكلة صغيرة مع Listview.

يمكنني تحميله بعناصر عرض القائمة بشكل جيد، ولكن عندما أقوم بتعيين لون الخلفية، فإنه لا يرسم اللون على طول الطريق إلى الجانب الأيسر من الصف [يتم تحميل listViewItems مع ListViewSubItems لإنشاء عرض الشبكة، فقط العمود الأول يظهر الخطأ].هناك شريط ضيق لا يرسم.عرض هذا الشريط هو تقريبًا نفس عرض رأس الصف إذا كان لدي رأس صف.

إذا كانت لديك فكرة عما يمكن فعله لرسم الخلفية، فأنا أرغب في سماعها.

الآن فقط لتجربة فكرة جديدة، أعرض مكافأة قدرها عشرة أصوات للحل الأول الذي لا يزال يجعلني أستخدم هذا البناء الفظيع لفوضى عرض الشبكة الزائفة.[أنا أحب الكود القديم.]

يحرر:

فيما يلي نموذج يعرض المشكلة.

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؛)

نصائح أخرى

(قبل التعديل...)

لقد حاولت للتو تعيين BackColor على System.Windows.Forms.ListView، ويتم تطبيق اللون عبر عنصر التحكم بشكل جيد (مع الصور وبدونها).

هل تقوم بأي لوحة مخصصة على الإطلاق؟

حسنًا، أقوم بإضافة بعض ملاحظات الحل الإضافية.إذا كنت تستخدم الحل أعلاه، فستحتاج أيضًا إلى إدراج معالج رسم لرؤوس الأعمدة، وإلا فلن يتم طلاءها.يبدو مستطيل العنصر المحدد مضحكًا أيضًا، لذا ستحتاج إلى التحقق من ذلك في وظيفة lv_DrawItem وتنفيذ حل مماثل.تذكر أنه يتم اختيار التمييز على مستوى النظام وليس في التطبيق الخاص بك.

عرض قائمة أفضل (و مجاني أفضل ليست فيو اكسبرس) يسمح بإعداد صورة الخلفية بإعدادات محاذاة متنوعة (في المنتصف، مبلَّطة، ممتدة، ملائمة، مثبتة على الحدود/الزاوية).يتم دعم شفافية ألفا أيضًا:

enter image description here

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top