-2

このコードの新しいForm1()部分(このコードは私のMain.csにあります)はこのエラーを出し続けます-HomeInventory2.Form1には、0個の引数を取るコンストラクターが含まれていません。

private void cDsToolStripMenuItem_Click(object sender, EventArgs e)
{
    var form = new Form1();
    // show the form
    form.Show();
}

Form1コードは次のとおりです

namespace HomeInventory2
{
    public partial class Form1 : Form
    {

        public Form1(IEnumerable<string> prepopulated)
        {
            InitializeComponent();
            IEnumerable<String> lines = prepopulated;
            textBoxAmount.Text = lines.ElementAtOrDefault(0);
            textBoxCategories.Text = lines.ElementAtOrDefault(1);
            textBoxProperties.Text = lines.ElementAtOrDefault(2);
            textBoxValue.Text = lines.ElementAtOrDefault(3);
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void submitButton_Click(object sender, EventArgs e)
        {
            CreateInventory create = new CreateInventory();
            create.ItemAmount = textBoxAmount.Text;
            create.ItemCategory = textBoxCategories.Text;
            create.ItemProperties = textBoxValue.Text;
            create.ItemValue = textBoxValue.Text;

            InventoryMngr invtryMngr = new InventoryMngr();
            invtryMngr.Create(create);

        }
    }
}

そこに空白のコンストラクターを入れてみましたが、もちろん、そのボタンまたはメニュー項目が呼び出されると、空白の画面が表示されます。

4

5 に答える 5

4

.netのすべてのクラスには、引数をとらないデフォルトのコンストラクターがあります。独自のコンストラクターを実装している場合、フレームワークはクラスの空のコンストラクターを生成しません。ここでも同じことが起こっています。メソッドでは、パラメーターcDsToolStripMenuItem_Clickを渡す必要がありIEnumerable<string>ます。

于 2012-10-19T22:04:50.917 に答える
2

このような引数をとらないコンストラクターを追加してみてください

namespace HomeInventory2
{
    public partial class Form1 : Form
    {

        public Form1(IEnumerable<string> prepopulated)
        {
            InitializeComponent();
            IEnumerable<String> lines = prepopulated;
            textBoxAmount.Text = lines.ElementAtOrDefault(0);
            textBoxCategories.Text = lines.ElementAtOrDefault(1);
            textBoxProperties.Text = lines.ElementAtOrDefault(2);
            textBoxValue.Text = lines.ElementAtOrDefault(3);
        }

        public Form1()
        {
            InitializeComponent();
            IEnumerable<String> lines = null;
            textBoxAmount.Text = lines.ElementAtOrDefault(0);
            textBoxCategories.Text = lines.ElementAtOrDefault(1);
            textBoxProperties.Text = lines.ElementAtOrDefault(2);
            textBoxValue.Text = lines.ElementAtOrDefault(3);
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void submitButton_Click(object sender, EventArgs e)
        {
            CreateInventory create = new CreateInventory();
            create.ItemAmount = textBoxAmount.Text;
            create.ItemCategory = textBoxCategories.Text;
            create.ItemProperties = textBoxValue.Text;
            create.ItemValue = textBoxValue.Text;

            InventoryMngr invtryMngr = new InventoryMngr();
            invtryMngr.Create(create);

        }
    }
}
于 2012-10-19T22:04:34.677 に答える
1

Form1のコンストラクターを見てください。

public Form1(IEnumerable<string> prepopulated)

IEnumerable<string>それはあなたがフォームを主張するときにあなたが提供しなければならないタイプの値を求めています。このような

IEnumerable<string> someValue;
.
.
// Actually assign a value to someValue
.
.
var form = new Form1(someValue);

paremeterlessコンストラクターを追加することもできます。

public Form1()
        {
            InitializeComponent();            
        }

toの呼び出しInitializeComponent()は、基本的にすべてのコントロールとハンドラーをフォームに入力するために使用されます。

于 2012-10-19T22:04:12.623 に答える
0

コードをサプライヤパラメータに変更する必要があります。

private void cDsToolStripMenuItem_Click(object sender, EventArgs e)
{
    string[] prepopulated= ...;
    var form = new Form1(prepopulated);
    // show the form
    form.Show();
}

それか、パラメーターなしでコンストラクターを作成します。

public Form1()
{
    InitializeComponent();
}
于 2012-10-19T22:04:17.080 に答える
0

入力を提供する必要がありIEnumerable<string> prepopulatedます:

make new Form1(null) or new From1(new List{"a","b"})

于 2012-10-19T22:04:22.510 に答える