سؤال

وأنا باستخدام ListView في C # لجعل شبكة. وأود أن تجد وسيلة لتكون قادرة على تسليط الضوء على خلية معينة، برمجيا. أنا بحاجة فقط لتسليط الضوء على خلية واحدة.

ولقد جربت المالك تعادل البنود الفرعية، ولكن باستخدام رمز أدناه، أحصل على أبرز الخلايا، ولكن أي نص! هل هناك أي أفكار حول كيفية الحصول على هذا العمل؟ شكرا لمساعدتكم.

//m_PC.Location is the X,Y coordinates of the highlighted cell.


void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
    if ((e.ItemIndex == m_PC.Location.Y) && (e.Item.SubItems.IndexOf(e.SubItem) == m_PC.Location.X))
        e.SubItem.BackColor = Color.Blue;
    else
        e.SubItem.BackColor = Color.White;
    e.DrawBackground();
    e.DrawText();
}
هل كانت مفيدة؟

المحلول

ويمكنك القيام بذلك من دون رسم مالك القائمة:

// create a new list item with a subitem that has white text on a blue background
ListViewItem lvi = new ListViewItem( "item text" );
lvi.UseItemStyleForSubItems = false;
lvi.SubItems.Add( new ListViewItem.ListViewSubItem( lvi,
    "subitem", Color.White, Color.Blue, lvi.Font ) );

والحجج اللون إلى منشئ ListViewSubItem تسيطر الأمامية والخلفية لون البند الفرعي. يتم تعيين شيء حاسم للقيام به هنا UseItemStyleForSubItems إلى خطأ في عنصر القائمة، وإلا سيتم تجاهل التغييرات لونك.

وأعتقد أن لديك حل مالك التعادل عملت كذلك، ولكن عليك أن تتذكر لتغيير لون النص (المقدمة) عند تغيير الخلفية إلى اللون الأزرق، وإلا فإن النص يكون من الصعب أن نرى.

نصائح أخرى

وترد عليها. وهنا رمز لتبديل تسليط الضوء على البند الفرعي محددة.

listView1.Items[1].UseItemStyleForSubItems = false;
if (listView1.Items[1].SubItems[10].BackColor == Color.DarkBlue)
{
    listView1.Items[1].SubItems[10].BackColor = Color.White;
    listView1.Items[1].SubItems[10].ForeColor = Color.Black;
}
else
{
    listView1.Items[1].SubItems[10].BackColor = Color.DarkBlue;
    listView1.Items[1].SubItems[10].ForeColor = Color.White;
}

في حالتي، كنت أرغب في تسليط الضوء على صفوف معينة، بما في ذلك جميع المجالات. لذلك كل صف في listview بلدي مع "ميديكير" في العمود الأول يحصل على تسليط الضوء على الصف بأكمله:

public void HighLightListViewRows(ListView xLst)
        {
            for (int i = 0; i < xLst.Items.Count; i++)
            {
                if (xLst.Items[i].SubItems[0].Text.ToString() == "Medicare")
                {
                    for (int x = 0; x < xLst.Items[i].SubItems.Count; x++)
                    {
                        xLst.Items[i].SubItems[x].BackColor = Color.Yellow;
                    }
                }
            }
        }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top