2016-04-28 161 views
0

我目前有以下,我认为这是非常繁琐。我通常在表单上创建不同的按钮,并通过传递一组按钮来完成它。每个按钮都有一组属性来即时设置按钮。多维枚举Array列表

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#中的枚举个案。你需要使用类而不是枚举。此外,你的循环迭代抛出值是完全错误的。用'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循环

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(); 

谢谢

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; 
    } 
} 

的创建UI按钮然后你可以创建SetButtons这将创建并添加按钮到UI为每个传递类型

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

Thanks @Maxim Kosov –