第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何更改 ListView 的默認(rèn)選擇顏色?

如何更改 ListView 的默認(rèn)選擇顏色?

C#
慕田峪7331174 2022-11-22 16:44:07
我正在嘗試更改 ListView 中選擇欄的默認(rèn)(藍(lán)色)顏色。我拒絕使用 ObjectListView,因?yàn)槲冶仨毟乃写a。我搜索了這個(gè)主題并在這里找到了一些答案:Change background selection color of ListView?但這指向 ObjectListView。當(dāng)我以前使用 ListBox 時(shí),這可以根據(jù)我的喜好設(shè)置選擇欄顏色:將 DrawMode 設(shè)置為OwnerDrawFixed屬性下將 DrawItem 設(shè)置為L(zhǎng)istBox1_DrawItem事件下private void ListBox1_DrawItem(object sender, DrawItemEventArgs e){    if (e.Index < 0) return;    //if the item state is selected them change the back color     if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)        e = new DrawItemEventArgs(e.Graphics,                                  e.Font,                                  e.Bounds,                                  e.Index,                                  e.State ^ DrawItemState.Selected,                                  e.ForeColor,                                  Color.FromArgb(43, 144, 188));//Choose the color    // Draw the background of the ListBox control for each item.    e.DrawBackground();    // Draw the current item text    e.Graphics.DrawString(lb_result.Items[e.Index].ToString(), e.Font, Brushes.Black, e.Bounds, StringFormat.GenericDefault);    // If the ListBox has focus, draw a focus rectangle around the selected item.    e.DrawFocusRectangle();}但我現(xiàn)在正在使用 ListView。我設(shè)置OwnerDraw為真我將 DrawItem 設(shè)置為L(zhǎng)istView1_DrawItem...并使用上面的代碼。我希望它能按照說(shuō)明向我顯示不同的選擇顏色,但我卻遇到了一些錯(cuò)誤:我將如何為 ListView 正確使用此代碼?
查看完整描述

1 回答

?
慕運(yùn)維8079593

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊

所有者繪制 ListView 控件比 ListBox 控件更復(fù)雜:需要處理更多細(xì)節(jié)。這是一個(gè)考慮ListView 的四個(gè)視圖設(shè)置的示例
View.Details、View.List和。View.TileView.SmallIcon

此處僅繪制文本(這View.LargeIcon就是不包括在內(nèi)的原因),以將代碼包含在合適的范圍內(nèi)。此處
是繪制鏈接到 ListView 的 ImageList 中包含的位圖的示例。

設(shè)置 ListView
啟用您的 ListViewOwnerDraw模式,然后訂閱它的DrawItemDrawSubItemDrawColumnHeader事件,如示例代碼所示(強(qiáng)制,如果您希望 ListView 顯示任何內(nèi)容)。

使用默認(rèn)渲染(設(shè)置e.DrawDefault = true)繪制標(biāo)題。

常用操作說(shuō)明
使用TextRenderer.DrawText繪制 Item Text :這是 ListView 用于繪制其項(xiàng)目的原始方法。它允許完全匹配默認(rèn)呈現(xiàn),因此我們不會(huì)注意到文本的一些未對(duì)齊。

DrawItem事件用于在所有模式下繪制自定義背景,并將在除View.DetailsView之外的所有模式下繪制項(xiàng)目的文本,事件開始發(fā)揮作用:如果事件執(zhí)行相同的任務(wù),我們將繪制第一個(gè)項(xiàng)目的文本兩次.DrawSubItemsDrawItem

當(dāng)設(shè)置為時(shí),不會(huì)調(diào)用DrawSubItems事件。ViewTileList

此處提供的代碼的詳細(xì)信息
輔助方法GetTextAlignment負(fù)責(zé)設(shè)置項(xiàng)目的對(duì)齊方式,因?yàn)槊總€(gè)列都可以具有特定的文本對(duì)齊方式。

字段Color listViewSelectionColor用于設(shè)置/更改所選項(xiàng)目的顏色。要修改選擇顏色,請(qǐng)將此字段設(shè)置為任何值,Invalidate()然后 ListView: 將立即應(yīng)用新顏色。

結(jié)果樣本

https://i.stack.imgur.com/NTpWn.gif

bool lvEditMode = false;

Color listViewSelectionColor = Color.Orange;


protected void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)

{

    var lView = sender as ListView;


    if (lvEditMode || lView.View == View.Details) return;

    TextFormatFlags flags = GetTextAlignment(lView, 0);

    Color itemColor = e.Item.ForeColor;


    if (e.Item.Selected) {

        using (var bkBrush = new SolidBrush(listViewSelectionColor)) {

            e.Graphics.FillRectangle(bkBrush, e.Bounds);

        }

        itemColor = e.Item.BackColor;

    }

    else {

        e.DrawBackground();

    }


    TextRenderer.DrawText(e.Graphics, e.Item.Text, e.Item.Font, e.Bounds, itemColor, flags);


    if (lView.View == View.Tile && e.Item.SubItems.Count > 1) {

        var subItem = e.Item.SubItems[1];

        flags = GetTextAlignment(lView, 1);

        TextRenderer.DrawText(e.Graphics, subItem.Text, subItem.Font, e.Bounds, SystemColors.GrayText, flags);

    }

}


private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)

{

    var lView = sender as ListView;

    TextFormatFlags flags = GetTextAlignment(lView, e.ColumnIndex);

    Color itemColor = e.Item.ForeColor;


    if (e.Item.Selected && !lvEditMode) {

        if (e.ColumnIndex == 0 || lView.FullRowSelect) {

            using (var bkgrBrush = new SolidBrush(listViewSelectionColor)) {

                e.Graphics.FillRectangle(bkgrBrush, e.Bounds);

            }

            itemColor = e.Item.BackColor;

        }

    }

    else  {

        e.DrawBackground();

    }

    TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.SubItem.Font, e.Bounds, itemColor, flags);

}


protected void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)

    => e.DrawDefault = true;


private TextFormatFlags GetTextAlignment(ListView lstView, int colIndex)

{

    TextFormatFlags flags = (lstView.View == View.Tile)

        ? (colIndex == 0) ? TextFormatFlags.Default : TextFormatFlags.Bottom

        : TextFormatFlags.VerticalCenter;


    if (lstView.View == View.Details) flags |= TextFormatFlags.LeftAndRightPadding;


    if (lstView.Columns[colIndex].TextAlign != HorizontalAlignment.Left) {

        flags |= (TextFormatFlags)((int)lstView.Columns[colIndex].TextAlign ^ 3);

    }

    return flags;

}


private void listView1_BeforeLabelEdit(object sender, LabelEditEventArgs e) => lvEditMode = true;


private void listView1_AfterLabelEdit(object sender, LabelEditEventArgs e) => lvEditMode = false;  


查看完整回答
反對(duì) 回復(fù) 2022-11-22
  • 1 回答
  • 0 關(guān)注
  • 226 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)