none
エラー:'MyHousekeepingBook.ItemForm' に、引数を '1' 個指定できるコンストラクタがありません。 RRS feed

  • 質問

  • 「Form1.cs」のcategoryDataSet1に赤い波線がついて、コンパイルができません。

    Visual Studio 2008 Exprees Edition C#でプログラミングしています。

    初心者なので、「作って覚えるVisual C# 2008 Express Edition入門」(秀和システム)の

    6章のソースを打ち込んでいます。途中でコンパイルエラーになって、後に進めません。

    どなか、このエラーの意味を教えてください。

    // Form1.cs

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace MyHousekeepingBook
    {
        public partial class formView : Form
        {
            public formView()
            {
                InitializeComponent();
            }

            private void buttonAdd_Click(object sender, EventArgs e)
            {
                AddData();
            }
                           
            private void 編集EToolStripMenuItem_Click(object sender, EventArgs e)
            {
                AddData();
            }
            
            private void AddData()
            {
                ItemForm frmItem = new ItemForm(categoryDataSet1);
                          // new ItemForm(categoryDataSet1)に赤い波線がつく

                DialogResult drRet = frmItem.ShowDialog();
                if (drRet == DialogResult.OK)
                {
                    moneyDataSet.moneyDataTable.AddmoneyDataTableRow(
                        frmItem.monCalendar.SelectionRange.Start,
                        frmItem.cmbCategory.Text,
                        frmItem.txtItem.Text,
                        int.Parse(frmItem.mtxtMoney.Text),
                        frmItem.txtRemarks.Text);
                }
            }    

        }
    }

    // ItemForm.cs

    namespace MyHousekeepingBook
    {
        public partial class ItemForm : Form
        {
            public ItemForm(CategoryDataSet dsCategory,
                DateTime nowDate,
                string category,
                string item,
                int money,
                string remarks)
            {
                InitializeComponent();
                categoryDataSet.Merge(dsCategory);
                monCalendar.SetDate(nowDate);
                cmbCategory.Text = category;
                txtItem.Text = item;
                mtxtMoney.Text = money.ToString();
                txtRemarks.Text = remarks;
             }
        }
    }

     

    2010年11月8日 7:22

回答

  • 本を持ってませんが、サンプルソースをダウンロードして確認してみました(サイトにはダメと書かれていないようですので)。

    秀和システムのサポートページ
    http://www.shuwasystem.co.jp/support/7980html/2109.html#2

    すると、ItemForm には、引数が1つのコンストラクタも定義されていました。

    本に印刷されたコードの
    public partial class ItemForm : Form
    のすぐ下に、もうひとつ書いてないでしょうか?

    もし書かれていないのでしたら、上記サイトからダウンロードして確認してみてください。

    • 回答としてマーク hiro_pen2001 2010年11月8日 9:15
    2010年11月8日 7:36

すべての返信

  • 本を持ってませんが、サンプルソースをダウンロードして確認してみました(サイトにはダメと書かれていないようですので)。

    秀和システムのサポートページ
    http://www.shuwasystem.co.jp/support/7980html/2109.html#2

    すると、ItemForm には、引数が1つのコンストラクタも定義されていました。

    本に印刷されたコードの
    public partial class ItemForm : Form
    のすぐ下に、もうひとつ書いてないでしょうか?

    もし書かれていないのでしたら、上記サイトからダウンロードして確認してみてください。

    • 回答としてマーク hiro_pen2001 2010年11月8日 9:15
    2010年11月8日 7:36
  • ItemForm クラスには、6個の引数を受け取るものだけが定義されています。1個だけを受け取るコンストラクタは、見たところ定義されていませんね。

    ItemForm クラスのコンストラクタにきちんと6個引数を渡すか、ItemForm に引数を1個受け取るコンストラクタを追加する、などの対応が必要です。

    追記:

    TH01 さんによると、サポートページからダウンロードできるサンプルコードには、引数1個のコンストラクタが定義されているようですね。本にはちゃんと掲載されていて、それを打ち込み忘れている可能性があるので、確認してみてください。


    なかむら(http://d.hatena.ne.jp/griefworker)
    2010年11月8日 7:39
  • > TH01さん

    秀和システムのサポートページからサンプル・プログラムをダウンロードしてみました。

    public ItemForm(CategoryDataSet dsCategory)
            {
                InitializeComponent();
                categoryDataSet.Merge(dsCategory);
            }

    の部分を本から、写しそんじていました。

    エラー 1 'MyHousekeepingBook.ItemForm' に 'ItemForm_Load' の定義が含まれておらず、型 'MyHousekeepingBook.ItemForm' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。

    今度は、上記のエラーメッセージが出てしまいました。

     

    2010年11月8日 9:20
  • >なかむらさん。

    ありがとうございました。

    打ち忘れでした。

    2010年11月8日 9:29
  • > 今度は、上記のエラーメッセージが出てしまいました。

    エラー一覧上のそのエラーのところをダブルクリックしてください。
    すると、ItemForm.Designer.cs というファイルが開き、エラー箇所が選択状態になります。
    その行は
    this.Load += new System.EventHandler(this.ItemForm_Load);
    になっていると思いますが、この行を削除してください。

    これでエラーが消えるはずです。

    「イベントハンドラ」は、イベントを結びつけるコード(上記 += の行)と、イベントで呼び出されるメソッドの定義のペアで成り立ちます。
    今回のエラーは、フォームのダブルクリック等で上記ペアが自動的に作成された後に、hiro_pen2001 さんが手動で片方を削除された為に発生しました。

    2010年11月8日 9:49