Рисование в C # winform довольно медленное - PullRequest
2 голосов
/ 28 марта 2012

Я создаю пользовательский DataGridView, в котором CheckBox показывает границу при поднятии MouseHover.

Вот что я сделал до сих пор.

    void checkBox_MouseLeave(object sender, EventArgs e)
    {
        //showBorder defines whether the border is drawn.
        this.showBorder = false;
        this.DataGridView.InvalidateCell(this);
    }

    void CheckBoxMouseHover(object sender, EventArgs e)
    {
        this.showBorder = true;
        this.CheckBox.BringToFront();
        this.DataGridView.InvalidateCell(this);
    }

    protected override void Paint(...........)
    {
        ..........
        if (showBorder)
        {
            GraphicsPath border=new GraphicsPath();
            border.AddRectangle(new Rectangle(checkBoxPosition.X-1,checkBoxPosition.Y-1,checkBoxSize.Width+1,checkBoxSize.Height+1));
            graphics.DrawPath(new Pen(borderColor,1),border);
        }
    }

Но все идет так медленно, что мне нужно подождать около полсекунды, чтобы увидеть, как проходит граничное шоу. Во всяком случае, MouseLeave работает отлично. Так как я могу улучшить производительность здесь?

Кроме того, как я могу настроить флажок? например, цвет фона и т. д.

1 Ответ

4 голосов
/ 28 марта 2012

Вы используете событие MouseHover для мыши, проходящей через элемент управления. Попробуйте MouseEnter вместо этого. MouseHover срабатывает после того, как мышь некоторое время остается над элементом управления. MouseEnter мгновенно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...