0

私はそのようなコードを持っており、その中に通常のテキストとURLを描画するために使用しようとしています。まず、テキストから URL を抽出し、各部分の範囲を作成します。

private static readonly Font TextFont = new Font("Verdana", 10);

        private readonly Regex RgUrl = new Regex(@"((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)",
    RegexOptions.Multiline | RegexOptions.Compiled);


        private void PaintComplexString(Graphics g)
        {
            List<CharacterRange> ranges = new List<CharacterRange>();
            int start = 0;

            // create separate ranges for URLs
            foreach (Match match in RgUrl.Matches(_text))
            {
                if (start != match.Index)
                    ranges.Add(new CharacterRange(start, match.Index - start));
                ranges.Add(new CharacterRange(match.Index, match.Length));
                start = match.Index + match.Length;
            }

            if (start != _text.Length)
                ranges.Add(new CharacterRange(start, _text.Length - start));

            StringFormat format = new StringFormat(StringFormat.GenericTypographic);
            format.FormatFlags = StringFormatFlags.MeasureTrailingSpaces | StringFormatFlags.NoClip;
            format.SetMeasurableCharacterRanges(ranges.ToArray());
            Region[] regions = g.MeasureCharacterRanges(_text, TextFont, ClientRectangle, format);

            int index = 0;
            foreach (Region region in regions)
            {
                string txt = _text.Substring(ranges[index].First, ranges[index].Length);
                Debug.WriteLine(index + "*" + txt + "*");
                Rectangle rc = Rectangle.Round(region.GetBounds(g));
                g.DrawString(txt, TextFont, Brushes.Chocolate, rc, format);
                g.DrawRectangle(Pens.BlueViolet, rc);
                index++;
            }
        }

ClientRect の幅がテキスト全体を収容するのに十分な大きさである場合、すべてが正常に描画されます。フォームを細くしようとして、テキストが垂直方向に伸びることを期待すると、すべてがうまく機能しません。

ここで何が問題なのですか?どうも

4

0 に答える 0