1

空白に関しては、私はあまりにも混乱しています。私は弦をパドライトしようとしていますが、それは私と協力しません。

datagridviewを印刷したいので、列ヘッダーとその下に実際の行があります。文字列を埋めるために正確な長さまたは幅をどのように決定しようとしても、それは短すぎるか長すぎます。そのため、プリンターに送信する前に、値を列ヘッダーに揃えることができません。

たとえば、次のことを行うだけの場合:

thestring := '.NET is cool';
thestring := thestring.padright(100); //thestring = too short = '.NET is cool    '

私がこれを行う場合:

var tmpstr := '=';
tmpstr := tmpstr.PadRight(15); //total length of characters is 15
var swidth := int32(ev.Graphics.Measurestring(tmpstr,new Font('Arial',9)).Width);

thestring := '.NET is cool';
thestring := theString.padright(swidth); //thestring = too long = '.NET is cool   

                '

PadRightまたはPadLeftは、空白ではなく実際の文字を渡すと正しく機能するように見えますが、間違っている可能性があります。

任意の入力またはヘルプは大歓迎です。

4

1 に答える 1

1

プロポーショナルフォントを使用する場合、各文字幅に違いがあります。Arialは、私たちが通常使用するほとんどのフォントと同様に、プロポーショナルフォントです。

ウィキペディア:書体

プロポーショナル書体にはさまざまな幅のグリフが含まれますが、等幅(非プロポーショナルまたは固定幅)書体はフォント内のすべてのグリフに単一の標準幅を使用します。

つまり、すべての文字が異なる可能性があるということです。スペースには幅がありますが、文字「i」または文字「w」と同じである必要はありません。

実際には2つのオプションがあります。

  1. CourierNewのようなモノスペースフォントを使用できます。これにより、スペースを使用して、文字数に基づいて文字を並べることができます。
  2. ピクセル配置を使用します。その場合、テキストの幅を測定し、テキスト出力コマンドの開始位置を移動して、アイテムが互いに並ぶようにする必要があります。実際に必要な空白を計算してから、文字列をパディングする代わりにその場所に移動します。
于 2012-08-14T16:03:14.983 に答える