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ときに null になります。cmb[i] = new ComboBox()

これが発生する理由の説明については、http://blog.adamjcooper.com/2011/05/why-is-my-exception-being-swallowed-in.htmlを参照してください。ただし、満たさなければならない条件は次のとおりです (引用):

  1. 64 ビット バージョンの Windows を実行している (アプリケーションが 32 ビットまたは 64 ビット用にビルドされているかどうかは問題ではなく、OS のビット深度のみ)
  2. WinForms アプリを構築しています
  3. Visual Studio でアプリケーションをデバッグしている (例外キャッチのデフォルト オプションを使用)
  4. メイン フォームに Load イベント ハンドラがある
  5. Load ハンドラの実行中に例外が発生します
于 2013-03-08T13:27:58.347 に答える
1

null 参照例外が発生しない限り、テスト済みで、コードは正常に動作します。配列をインスタンス化する必要があります。

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 = 新しいサイズ(90, 00);

回答には正確な回答は含まれていません。問題は、高さが 0 であることです。例を試してください:

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