0

複数のTextBoxコントロールを含むフォームがあります。マルチラインがtrueに設定されているものもあれば、noに設定されているものもあります。大きなフォントを使用すると、テキストの配置が異なることが明らかになります。複数行がtrueの場合、テキストの周囲に何らかの追加の余白が表示されます。次のコードフラグメント

TextBox textBox = new TextBox();
textBox.Text = "Test";
textBox.Font = new Font("Segoe UI", 16);
Console.WriteLine("Single Line:" + textBox.GetPositionFromCharIndex(0));
textBox.Multiline = true;
Console.WriteLine("Multi Line:" + textBox.GetPositionFromCharIndex(0));

出力シングルライン:{X = 1、Y = 0}マルチライン:{X = 7、Y = 1}

私の質問は次のとおりです。マルチラインモードでこのマージンが追加されるのはなぜですか?これを回避/制御できますか?

マルチラインモードのテキストは次のように描画されることをすでに知っています

TextFormatFlags.TextBoxControl | TextFormatFlags.WordBreak | TextFormatFlags.NoClipping

シングルラインモード中

TextFormatFlags.TextBoxControl | TextFormatFlags.NoPadding | TextFormatFlags.SingleLine

使用されている。TextBoxで使用されるTextFormatFlagsを制御する方法はありますか?

私の質問に答えるためにあなたが尽力してくれてありがとう!

4

2 に答える 2

2

TextBoxから派生した独自のクラスを作成し、OnPaintをオーバーライドしてPaintイベントを処理する必要があります。

そこでは、必要に応じて適切なTextFormatFlagsを使用して、TextBoxのテキストのレンダリング方法を完全に制御できます。

乾杯

于 2012-10-23T12:53:43.887 に答える
0

何らかの理由で、SegoeUIが複数行のテキストボックス内の文字をオフセットするように思われるかどうかはわかりません。MicrosofSansSerifには同じ問題はありません。

私の提案:別のフォントを使用してみてください。

于 2012-10-23T12:59:43.603 に答える