2

辞書の値を表示するテーブルレイアウトパネルを作成していますが、テーブルレイアウトパネルは、セルに配置したラベルコントロールを14文字で切り取り続けています。テーブルレイアウトパネルのColumnStylesをいじろうとしましたが、どのオプションもLabelコントロールを実際にセルに「適合」させることはできません。利用可能なすべての列スタイルSizeTypesを試しました。

自動サイズ設定(テキスト値のあるラベルは毎回14文字( "1234567890ABCD")でトリミングされますが、コントロールが存在しない列(スペーサー)はゼロに縮小されます)

パーセンテージ(影響はまったくありません。列の種類(値、キー、スペース)を異なるサイズに重み付けした場合でも、列が広くなることはありません)。

絶対(列の幅をxピクセルにしますが、セルの幅が1,000ピクセルの場合でも、ラベルは14文字で切り取られます)

ラベルのSizeプロパティもいじってみましたが、「変数ではないため、「System.Windows.Forms.Control.Size」の戻り値を変更できない」ため、編集できません。つまり)。

それでは、これらのオプションをすべて使い果たした後、14文字で切り取られることなく、完全なラベルをテーブルセルに表示するにはどうすればよいですか?

テーブルレイアウトパネルを生成するコードは次のとおりです。これは、コントロール、行番号、列番号、およびその他のいくつかのフィールドを含むオブジェクトのリスト(GridDisplayCell)を保持する私が作成したカスタムクラス(GridDisplay)を使用しています。このクラスでは、コントロールをリストに追加/削除/移動/挿入してから、Generate()関数を使用してテーブルレイアウトを一度に作成できます(事前にサイズを決定したり、アイテムを追加するときにサイズを変更したりするのではありません)。

       private void FillInCustomerData()
    {
        GridDisplay grid = new GridDisplay(tl_TopLeft);
        int rowMax = 8;
        int columnLabelIndex = 0;

        int curRow = 0;
        int curCol = 0;

        foreach (var item in DD.AllCustomerData["BasicInfo"]) //Dictionary<string, object>
        {
            if (curRow == rowMax)
            {
                curRow = 0;
                curCol = columnLabelIndex + 2; //1 for key column, 1 for value column
            }

            var keyLabel = new Label();
            keyLabel.Text = item.Key;

            var valueLabel = new Label();
            valueLabel.Text = (item.Value == null || item.Value.ToString() == "") ? "NA" :  "1234567890ABDCDEF"; //item.Value.ToString()

            var key = grid.AddItem(new GridDisplayCell(item.Key, keyLabel), item.Key, curRow, curCol);
            // Function Definition: GridDisplay.AddItem(GridDisplayCell(string cellName, Control control), string cellName, int rowNumber, int colNumber)                
            var value = grid.AddItem(new GridDisplayCell(item.Key + "Value", valueLabel), item.Key + "Value", curRow, curCol+1);

            curRow++;
        }

        grid.WrapMode = false;
        grid.AutoSize = true;

        grid.Generate();

        //experimenting with column sizes. NOT WORKING
        foreach (ColumnStyle cs in grid.Table.ColumnStyles)
        {
            cs.SizeType = SizeType.AutoSize;
        }            
    }

そして、これが実際にTableLayoutPanelにコントロールを追加する私の生成関数のチャンクです:( _ cellsはGridDisplayCellsのリストであり、この場合AutoSizeはGridDisplayのプロパティです(TableLayoutPanelのAutoSizeプロパティではありません))

 foreach (var cellItem in _cells)
            {
                if (AutoSize == false && ValidateSize(cellItem.Value.Column, cellItem.Value.Row, false) == false)
                {
                    continue; //the cell was outside the range of the control, so we don't add it.
                }

                _table.Controls.Add(cellItem.Value.CellControl, cellItem.Value.Column, cellItem.Value.Row);
            }

どんな助けでも大歓迎です。

4

1 に答える 1

15

問題を修正しました。LabelのAutoSizeプロパティをtrueに設定する必要がありました。

于 2012-09-26T22:56:34.067 に答える