3

WinFormでいくつかのカレンダータイプのコントロールを開発する必要があります。これらのカレンダーはすべて垂直です。概念は、カレンダーに各日(月ビュー)、時間(日ビュー)、または週(年ビュー)の列が含まれることです。月のビューのサンプル(かなり粗い)画像を添付しました。

ここに画像の説明を入力してください

これまでのところ、多くのパネルとラベルを備えたテーブルレイアウトパネルを使用して、これにかなりの亀裂がありました。これは機能しますが、面倒で読み込みが非常に遅くなります。それはまた、私が克服しようとした多くの問題を伴います。現在の様子のスクリーンショットを添付しました。

ここに画像の説明を入力してください

レンダリングの問題(よく知られている吃音の問題)に直面しました。これは、グリッドの構築中にグリッドを非表示にし、完成したら表示することで解決しました。また、スクリーンショットでわかるように、テーブルのサイズを正しく変更するのに問題がありました(列の数は月の日数によって異なります)。下の行がすべてのスペースを占めています。ご想像のとおり、これはすべて非常に厄介で、私にはかなりハッキーなようです。

問題を克服できるかどうかを確認するためにWPFを少し試しましたが、少し良くなるかもしれませんが、列と行のサイズに関する問題は同じようです。これらの問題を回避するために私が取ることができる他のアプローチはありますか、それとも弾丸を噛んでWPFに切り替えるのが最善ですか?テーブルを使用してHTMLでこれを行うのは非常に簡単な作業であるため、これは2倍イライラします。

私が抱えている問題を繰り返すと、次のようになります。

  1. 予想どおり、列のサイズが自動的に変更されません(最後の列はスペースを埋めるだけで、奇妙なUIが作成されます)
  2. 行は似ていますが、一番下の行がすべての空きスペースを占めています。
  3. 遅いレンダリング
  4. コントロールのサイズを変更するときは、グリッドを非表示にする必要があります。そうしないと、多くの途切れが発生します。
  5. テーブルレイアウトパネルのハッキーな性質

問題への最善のアプローチ方法について、ユーザーからのフィードバックに感謝します。

4

2 に答える 2

1

私はテーブルレイアウトパネルの経験があまりありませんが、それをざっと見てみると、固定数の列/行(コードで変更する)とパーセントの固定サイズのオプションがあるようです各列のサイズ設定。たとえば、31日で月を読み込む場合、パーセント幅が約3.2258の31列を作成します。あなたはおそらくこのようなことをすることができます:

int numColumns = 31;
tableLayoutPanel1.ColumnCount = numColumns;
tableLayoutPanel1.ColumnStyles.Clear();

for (int i = 0; i < numColumns; i++)
{
    tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100f / numColumns));
}

これは、ウィンドウのサイズを変更しても、毎日同じサイズが維持され、コントロールの幅に合わせてすべてが拡張されることを意味します。そのサイズが小さすぎて、列を最小幅にする必要がある場合は、AutoScrollが有効になっているコントロール内にTableLayoutPanelを配置し、TableLayoutPanelの最小サイズを次のように設定できます。

int minColumnWidth = 20;
tableLayoutPanel1.MinimumSize = new Size(numColumns * minColumnWidth, 0);

WPFはこれをより適切に実行できますが、経験がない場合は、実行にかなり時間がかかる可能性があります。

Windowsフォームでは、カスタムコントロールでGraphicsクラスとOnPaintオーバーライドを使用して、いつでも手動でカレンダーを描画できます。これにより、子コントロールがもたらすちらつきや遅い問題を回避でき、WPFよりも習得しやすくなります。

于 2012-05-31T15:59:11.580 に答える
0

ほぼ1年が経ちましたが、あなたの質問に出くわしたので、CodeProjectで見つけた素晴らしいOutlookスタイルのWinformsカレンダーアジェンダを共有したいと思います。

于 2013-11-01T15:56:36.733 に答える