文字列を印刷するときに、事前に定義されたキーワードに特別な書式を適用する関数を書いています。たとえば、文字列 - 「なぜこれが機能しないのですか?」「なぜ」という単語を下線付きで青字で印刷する必要があるかもしれません。
これを分割して実装し、文字列の各セグメントを個別の print 呼び出しで出力する必要がありました。このアプローチには 1 つの問題があります。文字列を印刷するときに正しい間隔を取得できません。キーワードが前のデフォルト テキストの上に印刷され、その後に印刷されるテキストと重ねて表示されます。
境界長方形を使用して、文字列を印刷ページに配置しています。
RectangleF rectKeywordBounds = new RectangleF( 60.0, 60.0, 550.0, 1200.0);
文字列のセグメントを印刷したら、四角形のサイズを描画した文字数だけ変更し、文字列の次のセグメントを印刷します。
EArgs.Graphics.DrawString(strFragment, fontBlueItalics, Brushes.Blue, rectKeywordBounds );
iLastPrintIndex = strFragment.Length + iLastPrintIndex;
このメソッドを使用して、新しい文字列セグメントの印刷位置を変更しました。
rectKeywordBounds = new Rectangle(rectKeywordBounds .X + iLastPrintIndex, rectKeywordBounds .Y, rectKeywordBounds .Width, rectKeywordBounds .Height);
そして、私はこれを使用しました:
properSpacing = new SizeF(-((float)iLastPrintIndex), 0.0f);
rectKeywordBounds .Inflate(properSpacing);
どちらの方法でも、同じようにセグメントが重複します。次のコードは、私が期待する方法で外接する四角形を進めますが、四角形内にテキストを印刷するときに概念が機能しないのはなぜですか?
Rectangle rectKeywordBounds = new Rectangle(90, 90, 800, 100);
for (int x = 0; x < 6; x++)
{
EventArgs.Graphics.DrawRectangle(Pens.BlueViolet, rectKeywordBounds );
rectKeywordBounds = new Rectangle(rectKeywordBounds .X + 15, rectKeywordBounds .Y + 200, rectKeywordBounds .Width, rectKeywordBounds .Height);
}