2009-06-29 6 views
0

ファイル名を表示する一連のボタンがあります。ファイル名が利用可能なピクセル数よりも広いときにTextプロパティを設定すると、テキストは "ラップ"され、テキストがLeftMiddleと表示されている場合はLeftTopと表示されます。したがって、表示できる文字数だけを表示します(PathCompactPathEx()メソッドを使用)。System.Windows.Forms.ButtonのTextで使用できるピクセルを特定する方法

ただし、使用可能なピクセル数を確認するにはどうすればよいですか?現在のアプローチは次のとおりです。

button.Width - button.Image.Width - button.Padding.Horizontal 

これは必ずしも機能しない場合があり、テキストがまだラップすることがあります。

テキストのピクセル数を決定する正しい方法は何ですか?

答えて

2

最善のアプローチは、イベントをペイント(またはボタン子孫を作るとのOnPaintをオーバーライドする)、および文字列に以下の方法を描画するためにサブスクライブすることですもう一度ラッピングしてください。任意の幅測定値(MeasureStringを含む)は、内部のButtonペイント処理と異なる場合があり、その結果、折り返しが発生します。

+0

はい、利用可能なスペースがほぼわかっていることを考えればわかります(質問を参照)。私はまだTextRenderer.MeasureText()が内部のButtonペイント処理と異なるかもしれない理由として不思議です...もちろん、ボタン内のテキストに使用可能なピクセル数は計算できる必要がありますか? – JohnBarton

+0

ボタンはさまざまな方法でテキストをペイントできるためです。たとえば、FlatStyle == Systemの場合、システムはFlatStyle == Defaultの場合はテキストが描画され、UseCompatibleTextRenderingプロパティの場合はテキストペイントが使用されます。また、さまざまなペイントモードでボタンクラスで使用されるテキストマージンもわかりません。 – arbiter

+0

質問に答える時間をとってくれてありがとう、大変感謝しています。 – JohnBarton

0

はたぶん、あなたは、各文字のピクセルの幅を決定する場合は、宅配便としてmonospacedフォントを使用することができ、その後、あなたは自分のTextBoxの幅を超えない

の世話をする必要があり、これはあなたがすることができ

+0

質問は、テキストのボタンで利用可能なスペースを計算する方法でした。 FYI - 上記のコメントを参照してください。モノスペースのフォントを使用する必要はありません。メソッドを使用して、任意のフォントの文字列の幅を判断できます。 – JohnBarton

2

を役に立てば幸いGraphics.MeasureStringを使用して、特定のフォントを使用して特定のテキストが使用する実際のピクセル数を特定します。
Graphics.MeasureCharacterRangesもありますが、これはテキストの配置の方がより正確かもしれませんが、私は個人的に使っていません。これは決してあなたのことが保証しない唯一の方法である

private void OnPaint(object sender, PaintEventArgs) 
{ 
    Button SenderButton = (Button)sender; 
    Rectangle TextRect = SenderButton.ClientRectangle; 
    TextRect.Inflate(-10, -5); // You can use any rectangle you want 
    // To avoid internal Button text drawing, assign "" to Button.Text, and use Tag instead 
    string Text = (string)SenderButton.Tag; 
    e.Graphics.DrawText(e.Graphics, Text, SenderButton.Font, TextRect, SenderButton.ForeColor, 
     TextFormatFlags.PathEllipsis | TextFormatFlags.NoPrefix); 
} 

:あなたが得ることができる

+0

申し訳ありません - 私はすでに文字列が広いことを知っています - 私はボタンで利用可能なピクセルの数を決定する方法を探しています - それで、描画する文字数を決定できます。私の質問のコードコメントは、私が現在利用可能なスペースをどのように計算しているかを示していますが、テキストがまだ折り返しているので、これは必ずしも機能しません。 FYI - TextRenderer.MeasureText()は、DPI設定を考慮してGraphicsクラスのメソッドよりも優れています。 – JohnBarton

関連する問題