如何创建按钮的C#数组?

如何创建按钮的C#数组?,c#,arrays,winforms,generics,button,C#,Arrays,Winforms,Generics,Button,如何在Winforms应用程序中构建按钮数组 我想做的是:我有很多类似日历安排的按钮,它们指示时间段。IE:Monday0700按钮、Monday0730按钮、Monday0800按钮等,间隔30分钟 我有一个xml数据库,其中当持续时间=0.5小时时,约会的一个字段是,而字段等于“07:00am”,为“Monday0700Button”着色。当持续时间为1.0小时时,我希望它填充“Monday0700Button”以及“Monday0730Button”的以下时间段按钮 有什么想法吗? 谢谢。

如何在Winforms应用程序中构建按钮数组

我想做的是:我有很多类似日历安排的按钮,它们指示时间段。IE:Monday0700按钮、Monday0730按钮、Monday0800按钮等,间隔30分钟

我有一个xml数据库,其中当持续时间=0.5小时时,约会的一个字段是
,而
字段等于“07:00am”,为“Monday0700Button”着色。当持续时间为1.0小时时,我希望它填充“Monday0700Button”以及“Monday0730Button”的以下时间段按钮

有什么想法吗?
谢谢。

是的,您可以创建如下按钮列表

List<Button> listOfButtons = new List<Button>();
listOfButtons.Add(yourButton);
List listOfButtons=new List();
按钮列表。添加(您的按钮);

是的,构建按钮数组或任何对象都没有问题。 您将无法在VisualStudio设计器中看到它们,但它们可以正常工作

很久以前,我使用一个2-D按钮数组为计算器应用程序构建UI。我已经用了很长时间的HP-15C,但错过了它

数组方法工作得很好

  Button[] numberButtons=new Button[] { btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btnDecimalPt};
  Button[] operationButtons=new Button[] { btnDiv, btnMult, btnSubtract, btnAdd };

  foreach (var b in numberButtons)
       b.Click += new System.EventHandler(this.Number_Click);

  foreach (var b in operationButtons)
      b.Click += new System.EventHandler(this.Operation_Click);

  // etc

  Button[][] allButtons=
  {
      new Button[] {btnSqrt, btnExp, btn10x, btnPow,btnMultInverse, btnCHS, null, null, null, null}, 
      new Button[] {btnN, btnInterest, btnPMT, btnPV, btnFV, null, btn7, btn8, btn9, btnDiv}, 
      new Button[] {btnLn, btnLog, btnSine, btnCosine, btnTangent, btnPi, btn4, btn5, btn6, btnMult}, 
      new Button[] {btnRoll, btnSwap, btnCLRfin, btnCLX, btnCLR, btnEnter, btn1, btn2, btn3, btnSubtract}, 
      new Button[] {btnInt, btnFrac, btnFix, btnStore, btnRecall, null, btn0, btnDecimalPt, btnNotUsed, btnAdd}
  };

  // programmatically set the location
  int col,row;
  for(row=0; row < allButtons.Length; row++)
  {
      Button[] ButtonCol= allButtons[row];
      for (col=0; col < ButtonCol.Length; col++)
      {
          if (ButtonCol[col]!=null)
          {
              ButtonCol[col].TabIndex = col + (row * allButtons.Length) +1;
              ButtonCol[col].Font = font1; 
              ButtonCol[col].BackColor = System.Drawing.SystemColors.ControlDark;
              ButtonCol[col].Size=new System.Drawing.Size(stdButtonWidth, stdButtonHeight);
              ButtonCol[col].Location=new Point(startX + (col * stdButtonWidth), 
                                                startY + (row * stdButtonHeight) ) ;
          }
      }
  }
Button[]numberButtons=新建按钮[]{btn0、btn1、btn2、btn3、btn4、btn5、btn6、btn7、btn8、btn9、btnDecimalPt};
按钮[]操作按钮=新按钮[]{btnDiv,btnMult,btnSubtract,btnAdd};
foreach(数值按钮中的变量b)
b、 单击+=新建System.EventHandler(此.Number\u单击);
foreach(操作按钮中的变量b)
b、 单击+=新建System.EventHandler(此.Operation\u单击);
//等
按钮[][]所有按钮=
{
新建按钮[]{btnSqrt,btnExp,btn10x,btnPow,btnMultInverse,btnCHS,null,null,null},
新按钮[]{btnN,btnInterest,btnPMT,btnPV,btnFV,null,btn7,btn8,btn9,btnDiv},
新按钮[]{btnLn、btnLog、btnSine、btnCosine、btnTangent、btnPi、btn4、btn5、btn6、btnMult},
新按钮[]{btnRoll、btnSwap、btnCLRfin、btnCLX、btnCLR、BTENTER、btn1、btn2、btn3、btnSubtract},
新按钮[]{btnInt,btnFrac,btnFix,btnStore,BTNREREAL,null,btn0,btnDecimalPt,btnNotUsed,btnAdd}
};
//以编程方式设置位置
int col,世界其他地区;
对于(行=0;行
按钮与所有GUI元素一样,都是与任何其他元素一样的对象(碰巧也可以显示)。所以是的,你可以有数组,列表,字典-任何你想要包含按钮的东西。Taylor L’s有一些示例代码。

是的,正如Taylor L所演示的,这是可能的。唯一的问题是,通过复制和粘贴控件创建的VB6样式控件数组不能再在表单编辑器中执行。

是的,当然可能,但可能没有必要

如果我理解正确,您应该能够在表单中添加一个按钮,然后在XML中循环,根据需要实例化一个新按钮。连接Click事件的事件处理程序,然后通过调用FlowLayoutPanel上Controls属性的add()方法将按钮添加到FlowLayoutPanel

while (reader.Reader())
{
    // Parse XML here

    // Instantiate a new button that will be added to your FlowLayoutPanel
    Button btn = new Button();

    // Set button properties, as necessary
    btn.Text = "Foo";
    btn.Click += new EventHandler(SomeButton_Click);

    // Add the button to the FlowLayoutPanel
    flowLayoutPanel.Controls.Add(btn);
}
虽然FlowLayoutPanel可以轻松地为按钮进行布局,但它可能不适合您。如果是这种情况,那么在循环遍历XML时,必须计算出按钮的X和Y坐标


使用上述方法会遇到的一个问题是,它总是调用完全相同的事件处理程序。因此,您必须想出一种方法来确定单击了哪个按钮。一种方法可能是扩展按钮控件,以提供可用于确认时间段的其他属性。

我认为您的答案可能不完整。按钮对象列表是无用的,除非按钮可以在窗体上显示和使用。如何将事件连接到每个按钮?@Robert Harvey:在本例中,您必须以编程方式添加事件处理程序。这与问题不完全相关,但只是向前看一点,您可能想看看,将其用作日历规划器,而不是编写自己的日历,你将以更少的努力从中获得更多+1跟踪者:我们使用这个控件(整个企业套件),我在其中工作并取得了一些很好的结果。无法充分推荐它。当我这样做时,当它击中foreach(numberButtons中的var b)b时,我会得到一个运行时错误。单击+=新建系统.EventHandler(this.Number\u单击);