2013-06-04 36 views
16

DrawString関数が、文字や単語全体を直感的に直感的に切り捨てる方法を見つけました。テキストの一部を示すことは、何かが欠落していることを明確に伝えています。ここでトリミングを使わずにDrawStringを使用するにはどうすればよいですか?

は、いくつかの例は以下のとおりです。

StringTrimming.None:enter image description here

StringTrimming.Character:enter image description here

私が欲しいもの:enter image description here (GIMPのモックアップ)

がStringTrimming.NoneインクルードですStringTrimming.Characterと同じ?私の場合、彼らはまったく同じように行動するようです。見過ごしてしまったことがあるのでしょうか、これは既知の「機能」ですか?

による。docs StringTrimming.None "トリミングを指定しません。"

This site Javaで作成したサンプルでは、​​「文字」以外の文字をトリミングする場合でも「なし」と表示されます。

この効果を得るための他のトリックはありますか?

注:「...」などの表示はしたくありません。これはスペースの無駄だと私は思っていますが、それはおそらくUXの議論です。

+0

申し訳ありません...ただ知りたい...何あなたがこのに適用されますでしょうか? – matzone

+0

@Rotem良いアイデアだけど、縦のスペースがたくさんある場合はラッピングがうまくいかない。それでも答えとして追加する必要があります。それは単線のために素晴らしい作品です! – Sarien

+0

@matzone DataGridView(Windows Formsに精通していないテーブル)。 – Sarien

答えて

9

実際には見えないように次の行に折り返して表示されるため、テキストがトリミングされているように見えることがあります。 Graphics.DrawStringへの呼び出しでは、そのFormatFlagsプロパティNoWrapに設定されているStringFormatオブジェクトを渡すことで、折り返しを無効にします。

StringFormat format = 
    new StringFormat 
    { 
     FormatFlags = StringFormatFlags.NoWrap, 
     Trimming = StringTrimming.None 
    }; 
g.DrawString(s, font, brush, rect, format); 
+1

+1私はこれが起こっていると確信しています。 –

+1

ラッピングを保持して、別の行に十分なスペースがない場合にのみ、ラッピングを無効にすることはできますか?(私はそれをするためにすべてを測定することができますが、それを避けたいです) – Sarien

+1

@サリエン:それのためのフラグではないようです。 'if'ステートメントや'? '演算子を使い、描画矩形の高さが行の高さの2倍よりも小さい場合にだけ' NoWrap'フラグを渡す必要があります。 –

4

回避策として、あなたはRectangleF大きなあなたが本当にしたいよりもDrawString方法を与えることができ、あなたが内の文字列を描きたいRectangleF実際にあなたのGraphicsオブジェクトのクリッピング領域を設定する。

RectangleF rect = new RectangleF(10, 10, 30, 15); 
e.Graphics.DrawRectangle(Pens.Red, Rectangle.Truncate(rect)); 

RectangleF fakeRect = new RectangleF(rect.Location, new SizeF(short.MaxValue, short.MaxValue)); 

Region r = e.Graphics.Clip; 
e.Graphics.SetClip(rect);    
e.Graphics.DrawString("1 Default", this.Font, SystemBrushes.ControlText, fakeRect); 
e.Graphics.Clip = r; 

このコードでは、テキストを四角形の左上隅に固定することを前提としています。それ以外の場合は、意図したレイアウト矩形と同じアンカーポイントを維持するメソッドで擬似矩形を生成する必要があります。

+0

これはおそらく最良のアプローチです。 'DrawString()'トリムオプションは、表示する前に文字列を操作することに関するものです。しかし、あなたが望むのは、それをすべて表示してクリップすることです。 – DonBoitnott

関連する問題