2013-05-24 6 views
0

Я пробовал добавлять такие компоненты, как больше bools, текстовые поля и comboboxes. как в нижней части кода. но макет плохой. Я хочу, чтобы это было представлено красивым образом, чтобы пользователь мог быстро и легко обновлять значения. так что это помогает, если я могу указать, где должен упасть каждый тип. Перечисления сверху, текстовые поля ниже в связке и т. Д.добавление нескольких элементов в usercontrol?

Как достичь этого? Динамически, как в не в дизайнере форм.

так представьте себе прямоугольник usercontrol, если в моем списке прокрутки перечислены enum, bool, bool, text, int, bool. Я хочу, чтобы он отображался в дружественном mannger, например enums сверху, 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(); 
     } 
+0

Каков ваш вопрос в точности? Вам не нравится, как получилось ваше оформление? Ваш вопрос * чрезвычайно * неопределенный, я действительно не знаю, что именно вы ищете. – tnw

+0

Пробовал объяснять, так как я не могу отправлять изображения из-за моей репутации. – justanidiot

+0

, представьте себе прямоугольник usercontrol, если в моем списке прокрутки перечислены enum, enum, bool, bool, text, int, bool. Я хочу, чтобы он отображался в дружественном mannger, например enums сверху, textboxes middle, bools. и т. д. – justanidiot

ответ

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 с, чтобы предстать перед int с, вы могли бы просто измените целочисленное значение в перечислении:

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

спасибо, так что нет обычной поддержки из окон или чего-нибудь еще? Я должен использовать ваш метод? умный подход, вы сделали это раньше или просто придумали это? – justanidiot

+0

Я не уверен на 100%, но я бы рискнул предположить, что это не то, что они не добавили в рамки. Вы можете * использовать рефлексию, чтобы получить список полей и свойств, сгруппированных по типу, но у меня нет опыта с отражением. И да, я просто придумал это, никогда не делал этого раньше, но нет причин, по которым он не должен работать =] – Sean

Смежные вопросы