在动态面板上创建动态组合框

时间:2013-03-08 13:25:36

标签: c# winforms visual-studio-2010

我正在尝试在动态创建的comboboxes上创建4 panel,但没有显示任何内容。我在这里缺少什么,这是我的代码:

public partial class Form1 : Form
    {
        ComboBox[] cmb;
        public Form1()
        {
            InitializeComponent();

        }

        Panel pnl;


        private void Form1_Load(object sender, EventArgs e)
        {
            panel();
            createCombo();
        }

        private void panel()
        {
            pnl= new Panel();
            pnl.Location = new Point(10, 10);
            pnl.BorderStyle = BorderStyle.FixedSingle;
            pnl.Size = new Size(200, 150);

            this.Controls.Add(pnl);
            createCombo();
        }

        private void createCombo()
        {

            for (int i = 0; i <= 3; ++i)
            {
                cmb[i] = new ComboBox();
                cmb[i].Text = "CodeCall!";
                cmb[i].Size = new Size(90, 00);
                cmb[i].Location = new Point(i+5, 0);
                pnl.Controls.Add(cmb[i]);
            }

        }
    }

界面仅显示面板:

enter image description here

3 个答案:

答案 0 :(得分:4)

我最初认为问题是身高:

cmb[i].Size = new Size(90, 00);

然而,事实证明你实际上无法设置ComboBox的高度。


真正的问题是被吞下的NullReferenceException(您必须在64位系统上)。您永远不会初始化cmb,因此在调用cmb[i] = new ComboBox()时它为空。

请参阅http://blog.adamjcooper.com/2011/05/why-is-my-exception-being-swallowed-in.html,了解为何会发生这种情况,但必须满足的条件是(引用):

  
      
  1. 您运行的是64位版本的Windows(无论您的应用程序是针对32位还是64位构建都无关紧要;只是操作系统的位深度)
  2.   
  3. 您正在构建WinForms应用
  4.   
  5. 您正在使用Visual Studio调试应用程序(使用默认选项进行异常捕获)
  6.   
  7. 您的主窗体有一个Load事件处理程序
  8.   
  9. 在执行Load处理程序期间,会发生异常
  10.   

答案 1 :(得分:1)

测试并且代码工作正常,前提是您没有获得空引用异常。您需要实例化您的数组:

private void createCombo()
{
    cmb = new ComboBox[5];
    for (int i = 0; i <= 3; ++i)
    {
        cmb[i] = new ComboBox();
        cmb[i].Text = "CodeCall!";
        cmb[i].Size = new Size(90, 00);
        cmb[i].Location = new Point(i+5, 0);
        pnl.Controls.Add(cmb[i]);
     }
}

对我来说,组合框出现没有问题。然而它们几乎都出现在彼此之上,你需要设置cmb [i] .Location不同。另外,我个人会推荐这个,而不是你在做什么:

private void createCombo()
{
    cmb = new ComboBox[5];
    int width = 90;
    int height = 25;
    int spacing = 5;
    for (int i = 0; i <= 3; ++i)
    {
        ComboBox newBox = new ComboBox();
        newBox.Text = "CodeCall!";
        newBox.Size = new Size(width, height);
        newBox.Location = new Point((i*width)+spacing, 0);
        cmb[i] = newBox;
        pnl.Controls.Add(newBox);
     }
}

答案 2 :(得分:0)

  

问题是身高:

     

cmb [i] .Size = new Size(90,00);

答案不包括确切的答案。 问题是你的身高是0。试试例如:

cmb[i].Size = new Size(90, 90);