1

私のアプリケーションの1つは、MSWordとドキュメントの作成/編集/フォーマットを扱っています。私はOffice2007w / VS 2008を使用しており、2003または2008のいずれかで動作するように見えるMicrosoft.Office.Interop.Wordライブラリに対してコーディングしています。

Document.Shapes.AddTextboxメソッドを使用してドキュメントにテキストボックスを作成し、テキストを入力します。テキストがテキストボックス内に収まるかどうかをプログラムで判断できるようにしたいのですが、収まらない場合は、収まるまでフォントサイズを小さくします。

私はいくつかの異なる方法を試しました:

1)boolShape.TextFrame.Overflowingプロパティを使用する

while (textbox.TextFrame.Overflowing) // adjust font size

ただし、ドキュメントを開くと、テキストがボックスに収まっていることがわかりますが、これはTRUEを返します。

2)テキストの最後の文字のX / Y位置をチェックし、その座標がテキストボックスの境界内にあるかどうかを確認します

lastCharX = System.Convert.ToSingle (tb.TextFrame.TextRange.Characters.Last.get_Information (WdInformation.wdHorizontalPositionRelativeToPage));
lastCharY = System.Convert.ToSingle (tb.TextFrame.TextRange.Characters.Last.get_Information (WdInformation.wdVerticalPositionRelativeToPage));
bool outsideFrameBoundaries = lastCharX + lastCharWidth > frameBoundaryX || lastCharY + lastCharHeight > frameBoundaryY;

ただし、これはほとんどの場合ボックス内にあるX / Yを返しますが、ドキュメントを開くと、ボックスに収まらないために文字が表示されません。

だから私はここでアイデアが不足しています、そして私は他の誰かがこれを以前に経験したことがあるかどうか、そして彼らが相互運用という言葉である不正確な混乱に対処するための提案を持っているかどうか尋ねていますか?

4

1 に答える 1

1

私は解決策を思いつきました。

それは、私が Word の狂気に対処する方法を見つけたときに始まりました。文字の X/Y 座標を取得し、その文字がテキスト ボックス領域の外に存在する場合、Word は実際には正しい X 値を返しますが、Y 値はテキスト ボックスの最後の表示行の Y 値です。

したがって、最後からすべての文字をスキャンし、重複する座標が見つかった場合は、オーバーフローがあることがわかります。Y 値 + フォント サイズがテキスト ボックスの下限より大きいかどうかも確認する必要があります。しかし、これは、テキストボックスがオーバーフローしているかどうかを検出するために(ゆっくりではあるが)かなり確実に機能するようです。オーバーフローしているかどうかを判断したら、オーバーフローしないまでフォント サイズを小さくし続けます。

于 2009-01-08T21:50:47.517 に答える