2

いくつかのことを実行できるコントロールに 3D 画像が表示されています (回転、ズーム、描画など)。このコントロールは Dock でパネルに埋め込まれており、ツールバーを使用して画像操作を制御できます。

画像を動的に並べて表示することで、複数の画像を同時に表示できるようにしたいと考えています。そう :

  • ユーザーが 1 つの画像を開くと、スペースの 100% を占めます
  • ユーザーが 2 つの画像を選択すると、それらは並べて表示されます
  • ユーザーが 4 つの画像を選択すると、タイル表示されます。
  • 等...

基本的に、これは MDI フォームで簡単に実現できますが、このモジュールはアプリケーションにネストされているため、それは不可能です。サイズを計算してTableLayoutPanelを使用することで、これをすべて手動で行うことができますが、トリックを行う何かがそこにあるに違いないと思います

助言がありますか?

注:私はwinformにいて、DevExpress 11を持っています

4

1 に答える 1

1

タイリングだけが必要な場合は、TableLayoutPanel完全にそれを行うことができます:

    private void btnNewImage_Click(object sender, EventArgs e)
    {
        if (imgCount == 0)
            tlp.Controls.Add(new Button { Text = "Image " + ++imgCount, Dock = DockStyle.Fill }, 0, 0);
        else
        {
            // tlp is the TableLayoutPanel which is docked as Dock.Fill
            if (tlp.RowCount == tlp.ColumnCount)
            {
                tlp.ColumnCount++;
                for (int i = 0; i < tlp.RowCount; i++)
                    tlp.Controls.Add(new Button { Text = "Image " + ++imgCount, Dock = DockStyle.Fill }, tlp.ColumnCount - 1, i);
                tlp.ColumnStyles.Clear();
                for (int i = 0; i < tlp.ColumnCount; i++)
                    tlp.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, (float)100.0 / (float)tlp.ColumnCount));
            }
            else
            {
                tlp.RowCount++;
                for (int i = 0; i < tlp.ColumnCount; i++)
                    tlp.Controls.Add(new Button { Text = "Image " + ++imgCount, Dock = DockStyle.Fill }, i, tlp.RowCount - 1);
                tlp.RowStyles.Clear();
                for (int i = 0; i < tlp.RowCount; i++)
                    tlp.RowStyles.Add(new RowStyle(SizeType.Percent, (float)100.0 / (float)tlp.RowCount));
            }
        }

コントロール名に置き換えることができnew Buttonます。私はコントロールの例としてボタンを使用しました。このコードは、[新しい追加] ボタンを押すと、行または列がレイアウトに追加されることを前提としています。好きなようにカスタマイズできます。

お役に立てれば。

于 2012-12-06T17:42:56.777 に答える