0

さらにブール、テキストボックス、コンボボックスなどのコンポーネントを追加してみました。コードの下部のとおりです。しかしレイアウトが悪い。ユーザーが値をすばやく簡単に更新できるように、これをきちんとした方法で表示したいと考えています。そのため、各タイプがどこに分類されるかを指定できると役立ちます。上部の列挙型、下の束のテキストボックスなど..

これを達成する方法は?フォーム デザイナーではなく、動的に。

私の小道具リストに列挙型、列挙型、ブール、ブール、テキスト、int、ブールがある場合、ユーザーコントロールの長方形を想像してください。enums on top、textboxes middle、bools のようなフレンドリーなマンガーで表示したい。等

        private void updateIcons(List<Props> prop) {
        countControls++;
        locationY = 10;
        int gbHeight;
        foreach (var p in prop) {
        radioButtonY = 10;
        IType pType = p.Type;
        if (pType is Enum) {
        var myP = new MyProp(p, this);
        GroupBox gb = new GroupBox();
        gb.Location = new Point(nextLocationX,locationY);
        nextLocationX += rbWidth+10;
        gb.Name = "groupBox" + countControls;
        gb.Text = "smthn";
        var TypesArray = set here;

        gbHeight = TypesArray.Length;
        foreach (var type in TypesArray) {
        getimagesPath(TypesArray);
        RadioButton rb = new RadioButton();
        rb.Appearance = Appearance.Button;
        rb.Width = rbWidth;
        rb.Height = rbHeight;
        rb.Name = type.Name + countControls;
        rb.Text = type.Name;
        string path = imagePaths[type.Name];
        Bitmap rbImage = new Bitmap(path);
        rb.BackgroundImage = rbImage;
        countControls++;
        rb.Location = new Point(radioButtonX, radioButtonY);

        if (myP.Value != null && type.Name.SafeEquals(myP.Value.ToString())) {
        rb.Checked = true;

        }
        radioButtonY += rbHeight;
        gb.Controls.Add(rb);
        rb.CheckedChanged += rb_CheckedChanged;

        }
        gb.Height = rbHeight * gbHeight + 20;
        gb.Width = rbWidth + 10;

        Controls.Add(gb);
        }
        }
        }

        if(pType is string){
         TextBox tb = new TextBox();
          tb.Text = pType.ToString();
        }
4

1 に答える 1

1

型に列挙型プロパティを追加し、リスト内の要素を列挙型の整数値で並べ替えることができます。

class Props
{
    public PropType PropertyType { get; private set; }

    public Props(PropType propType)
    {
        PropertyType = propType;
    }
}

enum PropType
{
    Int32 = 1,
    Int64 = 2,
    Bool = 3 //etc. etc.
}

次に、プロパティPropsの整数値でリストを並べ替えることができます。PropertyType

prop.OrderBy(p => (int)p.PropertyType);

foreach (var p in prop)
{
    //the rest of your code
}

次に、すべてboolの s を s の前に表示したいとしintます。列挙型の整数値を変更するだけです。

enum PropType
{
    Int32 = 2,
    Int64 = 3,
    Bool = 1 //etc. etc.
}
于 2013-05-24T13:33:27.547 に答える