2

リストビュー内に図形を描画している所有者描画リストビューを作成しています。Listview_DrawItemイベントを使用してこれを行いました。私の問題は、アプリケーションを実行すると、リストビューに描画された図形を選択できないことです。

private void AddItem(ListView lvw, string Shape_name, Color Shape_color)
    {
        // Make the item.
        ListViewItem item = new ListViewItem(Shape_name);

        // Save the Shape object  in the Tag property.
        Shapes myShape = new Shapes(Shape_name,Shape_color);

        item.Tag = myShape;
        item.SubItems[0].Name ="ShapeName";

        // Add subitems so they can draw.
        item.SubItems.Add("ShapeColor");

        // Add the item to the ListView.
        lvw.Items.Add(item);
    }


    // Draw the item. In this case, the Shape_name's logo.
    private void lvwServers_DrawItem(object sender, DrawListViewItemEventArgs e)
    {

        // Get the ListView item and the Shapes object.
        ListViewItem item = e.Item;

        Shapes myShape = item.Tag as Shapes;

        // Clear.
        e.DrawBackground();

        // Smoothing mode for blur free drawing
        e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

        Rectangle rect = new Rectangle(e.Bounds.Left + 10, e.Bounds.Top + 10, 41, 41);


        using (SolidBrush br = new SolidBrush(myShape.ShapeColor))
        {

            e.Graphics.FillRectangle(br, rect);
        }

        e.Graphics.DrawRectangle(Pens.Black, rect);

        e.Graphics.ResetTransform();
        e.DrawFocusRectangle();

また、e.boundプロパティの値を変更することはできません。

4

1 に答える 1

2

DrawItemイベントハンドラーの描画コードは、DrawListViewItemEventArgsパラメーターで使用可能なe.Stateの値に基づいて作成できます。

bool isSelected = e.State == ListViewItemStates.Selected;

これにより、アイテムが選択されたときに、描画されたアイテムのどの要素を変更するかを決定できます。

于 2012-09-12T05:40:50.470 に答える