1

かなり簡単な(そして基本的なことを望んでいます)質問があります。会社の Web サイト用にいくつかの C# コードを変更しています。このコードは、固定列にテーブルを描画します。そのデータはデータベースから取得されます。テーブルの各列の高さは (現在) 固定されており、文字列が特定の長さであるために折り返される場合、テキストの 2 行目が表示可能になるように変更する必要があります (次の行によって非表示になるのではなく)。 .

私の調査によると、(フォントと文字列を知っているので) MeasureString を使用して、文字列が設定されたテーブル列よりも長い/広いかどうかを確認し、そうであれば行の高さを変更できるようです。ただし、私は C# プログラミングに非常に慣れていない (そして、Web 以外のプログラミングを何年も行っていない) ため、これらすべてを実装する方法がわかりません。ロジックが整っており、高さを変更する方法を知っています。必要なのは、MeasureString メソッドを使用してロジックを使用できる実際の数値を取得する方法 (および、使用する必要がある可能性のある変数と関数をインスタンス化する方法) だけです。その方法)。

4

3 に答える 3

2

私はあなたがこの過負荷を使用する必要があると信じていますMeasureString(string,font,int)

widthパラメーターは、返されるSizeF構造体のwidthコンポーネントの最大値(Width)を指定します。widthパラメータが文字列の実際の幅よりも小さい場合、返されるWidthコンポーネントは、指定された幅内に収まる最大文字数を表す値に切り捨てられます。文字列全体に対応するために、返される高さコンポーネントは、文字列を文字で折り返して表示できる値に調整されます。

-上記のリンクされたMSDNページから(Emphasis mine)

// Measure string (you'll need to instansiate your own graphics object, 
// since you wont have PaintEventArgs)
SizeF stringSize = new SizeF();
stringSize = e.Graphics.MeasureString(measureString, stringFont, stringWidth);
int cellHeight = stringSize.Height;
于 2012-08-10T21:14:22.270 に答える
1

You can either use e.Graphics.MeasureString() or TextRenderer.MeasureText()

Differences and advantages of each of them are describe here:

TextRenderer.MeasureText and Graphics.MeasureString mismatch in size

There you will also find usage examples, which I would skip here to avoid duplication.

于 2012-08-10T21:20:42.887 に答える
1

MSDN では、コントロールの OnPaint メソッドにイベント ハンドラーを登録する (インスタンス化されたコントロールの場合)、または OnPaint メソッドをオーバーライドする (継承されたコントロールの場合)、またはフォームの OnPaint メソッドをオーバーライドすることによってこれを計算する例を示しています (最適ではありません)。フォームの再描画ごとにこれを実行したくない場合があるため、練習してください)。OnPaint メソッドを使用すると、グラフィックス オブジェクトにアクセスできるため、MeasureString メソッドを呼び出すことができます。

次の点を考慮してください。

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            label1.Paint += new PaintEventHandler(label1_Paint);
        }

        void label1_Paint(object sender, PaintEventArgs e)
        {
            SizeF size = e.Graphics.MeasureString(label1.Text, label1.Font);
            this.label1.Width = (int)size.Width;
            this.label1.Height = (int)size.Height;
        }
    }
于 2012-08-10T21:21:13.823 に答える