本文介绍了如何在DataGridView中突出显示搜索文本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在 DataGridView 中突出显示给定的搜索文本。我已经尝试了cellFormatting事件来找到 searchtext 的界限并绘制 FillRectangle ,但是我无法确切地获得界限

I want to highlight the given search text in the DataGridView. I have tried cellFormatting event to find the bounds of the searchtext and draw FillRectangle, but i could not exactly get the bounds of the search text.

在添加的内容中图像,我尝试突出显示文本 o,但也突出显示其他字符。

In the added image, i have tried to highlight text "o" but it highlights other characters also.

有人可以分享我如何绘制完美的矩形以突出显示搜索到的文本。

Could anyone share me how to draw perfect rectangle to highlight the searched text.

关于,
阿马尔·拉吉(Amal Raj。)

Regards,Amal Raj.

推荐答案

使用CellPainiting事件。尝试以下代码:

You need to use the CellPainiting event. Try this code:

string keyValue = "Co"; //search text

    private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
        if (e.Value == null) return;

        StringFormat sf = StringFormat.GenericTypographic;
        sf.FormatFlags = sf.FormatFlags | StringFormatFlags.MeasureTrailingSpaces | StringFormatFlags.DisplayFormatControl;
        e.PaintBackground(e.CellBounds, true);

        SolidBrush br = new SolidBrush(Color.White);
        if (((int)e.State & (int)DataGridViewElementStates.Selected) == 0)
            br.Color = Color.Black;

        string text = e.Value.ToString();
        SizeF textSize = e.Graphics.MeasureString(text, Font, e.CellBounds.Width, sf);

        int keyPos = text.IndexOf(keyValue, StringComparison.OrdinalIgnoreCase);
        if (keyPos >= 0)
        {
            SizeF textMetricSize = new SizeF(0, 0);
            if (keyPos >= 1)
            {
                string textMetric = text.Substring(0, keyPos);
                textMetricSize = e.Graphics.MeasureString(textMetric, Font, e.CellBounds.Width, sf);
            }

            SizeF keySize = e.Graphics.MeasureString(text.Substring(keyPos, keyValue.Length), Font, e.CellBounds.Width, sf);
            float left = e.CellBounds.Left + (keyPos <= 0 ? 0 : textMetricSize.Width) + 2;
            RectangleF keyRect = new RectangleF(left, e.CellBounds.Top + 1, keySize.Width, e.CellBounds.Height - 2);

            var fillBrush = new SolidBrush(Color.Yellow);
            e.Graphics.FillRectangle(fillBrush, keyRect);
            fillBrush.Dispose();
        }
        e.Graphics.DrawString(text, Font, br, new PointF(e.CellBounds.Left + 2, e.CellBounds.Top + (e.CellBounds.Height - textSize.Height) / 2), sf);
        e.Handled = true;

        br.Dispose();
    }

这篇关于如何在DataGridView中突出显示搜索文本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-22 21:40