2016-04-28 4 views
0

У меня есть следующий, и я думаю, что это очень громоздко. Я в общем создаю разные кнопки на форме и выполняю ее, передавая массив кнопок. Каждая кнопка имеет набор свойств для установки кнопки «на лету».Многомерный список перечислений Список массивов

public enum BtnType { bOK , bCancel, bYes, bNo }; 

public enum bOk { Name = "OKBtn", Text = "OK" } 
public enum bCancel { Name = "CancelBtn", Text = "Cancel" } 
public enum bYes { Name = "YesBtn", Text = "Cancel" } 

public static void SetButtons(BtnType[] _btnType, string onClick) 
     { 
      foreach (int i in _btnType) 
      { 
       switch (_btnType[i]) 
       { 
        case BtnType.bOK: 
         { 
          btnp.Name = bOk.Name; 
          btnp.Text = bOk.Text; 
         } 
         break; 
        case BtnType.bCancel: 
         { 
          btnp.Name = bCancel.Name; 
          btnp.Text = bCancel.Text; 
         } 
         break; 
        case BtnType.bYes: 
         { 
          btnp.Name = bYes.Name; 
          btnp.Text = bYes.Text; 
         } 
         break; 
       } 

      } 

Тогда я называю это так, и он создаст для меня 2 кнопки.

SetButtons(new BtnType[] { BtnType.bYes, BtnType.bNo }); 

Что я хотел бы сделать, это следующее, и я не могу найти решение.

public enum BtnType { bOK = { Name = "OKBtn", Text = "OK" }, 
         bCancel = {}, 
         bYes = {}, 
         bNo = {} }; 

public static void SetButtons(BtnType[] _btnType, string onClick) 
     {    
      foreach (int i in _btnType) 
      { 
       btnp.Name = _btnType[i].Name; 
       btnp.Text = _btnType[i].Text;     
      } 
     } 

спасибо.

+0

Это не похоже на C#. Он даже компилирует? –

+0

Вы не можете назначать значения для перечислений в C#.Вам нужно использовать класс вместо enum. Кроме того, ваш цикл для итерации значений броска совершенно неверен. С 'foreach' вы не получите индекс, а объект' BtnType'. –

+0

словарь может быть приятным. –

ответ

0

Спасибо за ваши ответы добавить. Он работает очень хорошо, и я использую немного от каждого ответа, чтобы получить мое требование.

Это то, что я сделал:

public enum ButtonType { mbOK, mbCancel, mbYes, mbNo }; 

class ButtonConfig 
    { 
     public string Name { get; set; } 
     public string Text { get; set; } 
     public string ModelResult { get; set; } 
    } 

private static Dictionary<ButtonType, ButtonConfig> ButtonsSettings = new Dictionary<ButtonType, ButtonConfig>() 
     { 
      {ButtonType.mbOK, new ButtonConfig { Name = "btnOK", Text = "OK", ModelResult = "mrOk"}}, 
      {ButtonType.mbCancel, new ButtonConfig { Name = "btnCancelBtn", Text = "Cancel", ModelResult = "mrCancel" }}, 
      {ButtonType.mbYes, new ButtonConfig { Name = "btnYes", Text = "Yes", ModelResult = "mrYes" }}, 
      {ButtonType.mbNo, new ButtonConfig { Name = "btnNo", Text = "No", ModelResult = "mrNo"}}, 

Я тогда мой метод

public static XXX XXX(ButtonType[] _ButtonType, string onClick) 

С Я называю так:

XXX(new ButtonType[] { ButtonType.mbYes, ButtonType.mbNo },"onCLink"); 

, а затем я использую цикл Еогеасп

foreach (ButtonType button in _ButtonType) 
{ 
    var Button = ButtonsSettings[button]; 
    htmlHelper.DevExpress().Button(buttonSettings => 
    { 
     buttonSettings.Name = Button.Name; 
     buttonSettings.ControlStyle.CssClass = "button"; 
     buttonSettings.Width = 80; 
     buttonSettings.Text = Button.Text; 
     buttonSettings.ClientSideEvents.Click = String.Format("function(s, e) {{" + onClick + "(\"{0}\"); pcMessage.Hide();}}", Button.ModelResult); 
}).Render(); 

Thanks

1

Что вам нужно, это не перечисление, вам нужны реальные классы поставить конфигурацию кнопки в:

class ButtonConfig 
{ 
    public string Name { get; set; } 
    public string Text { get; set; } 
} 

var myButtons = new [ 
    new ButtonConfig { Name = "OKBtn", Text = "OK" }, 
    new ButtonConfig { Name = "CancelBtn", Text = "Cancel" }, 
    // ... 
] 

Вам не нужно SetButtons, как вы его в этом вопросе, потому что кнопки уже завершены ,

Я не знаю, помогает ли это решить вашу проблему, потому что у вас нет ничего о том, что вы на самом деле хотите сделать с этой информацией в вопросе.

Для перехода от типа кнопки к конфигурации кнопок, вы можете использовать словарь

enum ButtonType 
{ 
    Ok, 
    Cancel, 
    Whatever 
} 

Dictionary<ButtonType, ButtonConfig> buttons = new Dictionary<ButtonType, ButtonConfig>() 
{ 
    {ButtonType.Ok, new ButtonConfig { Name = "OKBtn", Text = "OK" }}, 
    {ButtonType.Cancel, new ButtonConfig { Name = "CancelBtn", Text = "Cancel" }}, 
    {ButtonType.Whatever, new ButtonConfig { Name = "WhateverBtn", Text = "Whatever" }}, 
}; 

Доступ:

var okButton = buttons[ButtonType.Ok]; 
+0

Спасибо @StefanSteinegger –

2

C# не имеет каких-либо связанных значений со случаями перечислений. Таким образом, чтобы ограничить виды кнопок, создается вы можете создать обычный C# перечисления

enum ButtonType { OK, Cancel, Yes, No } 

Когда это было бы удобно, чтобы создать какой-то завод, который будет создавать кнопки пользовательского интерфейса для каждого значения перечислимого

static class ButtonFactory 
{ 
    public static Button CreateButton(ButtonType buttonType) 
    { 
     switch (buttonType) 
     { 
      case ButtonType.OK: 
       return CreateButton("OKBtn", "OK"); 

      // process other button types 
     } 
    } 

    private static Button CreateButton(string name, string text) 
    { 
     var button = new Button(); 
     button.Name = name; 
     button.Text = text; 
     return button; 
    } 
} 

и тогда вы можете создать SetButtons, который будет создавать и кнопку UI для каждого из пропускаемого типа

public static void SetButtons(params ButtonType[] buttonTypes) 
{ 
    var buttons = buttonTypes.Select(ButtonFactory.CreateButton); 
    // add buttons to UI 
} 
+0

Спасибо @Maxim Kosov –

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