2

ドキュメントを編集できる WinForms アプリケーションがあります。各ドキュメントは章で構成され、各章は RTF ブロックのコレクションを保持します。RTF ブロックはPanelControlusingにロードされDock = DockStyle.Topます。

問題は、チャプターの全体の高さが大きくなりすぎる (推定 > 32768 ピクセル) 場合、下のブロックが適切にドッキングされないことです: それらは互いの背後に表示されます。問題を切り分けようとしたとき、これはLabelControl.

私が試したのは、、、のような方法ですRefresh():Invalidate()それらPerformLayoutは問題を解決しません。

役立つのは、フォームのサイズを変更することです。その後、すべてのコントロールが正しく配置されます。

フォームのサイズを変更せずにこれを解決する方法について誰か助けてもらえますか?

問題を説明する簡単なデモ プロジェクトを添付します。

スクリーンショット

4

2 に答える 2

2

上記の私のコメントから(ここで本当に問題があるようです):

WinForms (および一般的な GDI) は、16 ビット範囲外の座標を使用しようとすると、予期しない動作をすることがよくあります。それを避けるようにしてください。考えられる問題の範囲には、まったく描画されないもの、予期しないコード位置での OverflowException などがあります。

于 2013-11-25T13:29:30.033 に答える
0

このレイアウトを変更する決定を下すことができる場合は、ドキュメントの章を何らかのページ付けで表示/編集するか、RTF ブロックをメニューに折りたたんで現在のもののみを表示する別のアプローチを取ることをお勧めします。

ほら..高さの値が整数の16ビット値であることは理にかなっています。画面はこれよりずっと小さいです。パネルの高さがこのように大きくなるにつれて。スクロールバーの使用が非常に賢明になることがわかります..そしてそれは良いことではありません.

サイズが 2x、3x、5x のコンテンツをスクロールして使用できます。しかし、高さ (~32768) が少なくとも (ウィンドウを最大化した高解像度モニターを使用して) コンテンツを最適なケースでウィンドウのサイズの 32 倍でスクロールするのは非常に不快です。

さらに、増加する「もの」のコレクションの中で「もの」を見つけることが脳で困難になるため、ユーザーの生産性が低下すると考えられます。

于 2013-11-07T12:07:46.133 に答える