0

我正在尝试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]);
            }

        }
    }

界面只显示面板:

在此处输入图像描述

4

3 回答 3

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. 您正在构建一个 WinForms 应用程序
  3. 您正在使用 Visual Studio 调试应用程序(使用异常捕获的默认选项)
  4. 您的主窗体有一个 Load 事件处理程序
  5. 在您的 Load 处理程序执行期间,发生异常
于 2013-03-08T13:27:58.347 回答
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);
     }
}
于 2013-03-08T13:37:24.463 回答
0

问题是高度:

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

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

cmb[i].Size = new Size(90, 90);
于 2013-03-08T13:33:49.230 回答