0

私のプログラムには、2 つのウィンドウ フォーム ウィンドウがあります。1 つはデフォルトで開き、もう 1 つは最初からボタンをクリックすると開きます。彼らはいくつかのデータを交換し、いくつかのテキストを変更します。ほとんどの場合、すべて非常に単純なものです。今、私はこのエラー'charactertest.CharStats.CharStats(charactertest.MainForm)' は、abstract、extern、または partial とマークされていないため、ボディを宣言する必要があります。これpublic CharStats(MainForm callingForm)は、2 番目の Windows フォームの行を示しています。

私は正直なところ、それが何を意味するのかほとんどわかりません。私は部分的に精通しており、一般的に体についてはちょっと曖昧です(しかし、私は今読んでいます)。とにかく、ここに私のコードがあります。誰かが解決策について教えてくれ、少しでも記入してくれることを願っています。:)

public partial class MainForm : Form
    {
        public static string VariableLabel1;
        public static string Variable2;

        Random _r = new Random();

        public MainForm()
        {
            InitializeComponent();          
        }

        void CLoop()
        {
            while(true)
            {
                SetInfo();
            }
        }

        public void SetInfo(string newText)
        {
            this.pcNameLabel.Text = newText;
        }

        void ChClassButtClick(object sender, EventArgs e)
        {
            CharStats form = new CharStats(this);
            form.Show();
        }
    }

そして私の2番目のウィンドウフォーム

public partial class CharStats : Form
    {
        private MainForm _callingForm;
        public CharStats(MainForm callingForm)

        public CharStats()
        {
            InitializeComponent();
            _callingForm = callingForm;
        }

        void StatTransfer()
        {
            callingForm.SetInfo("Bob");
        }

        void FighterButtonClick(object sender, EventArgs e)
        {
            Fighter();
            StatTransfer();
        }
    }
4

3 に答える 3

3

あなたが持っている:

public partial class CharStats : Form
    {
        private MainForm _callingForm;
        public CharStats(MainForm callingForm)

        public CharStats()
        {
            InitializeComponent();
            _callingForm = callingForm;
        }

あなたはおそらく探しているでしょう:

public partial class CharStats : Form
    {
        private MainForm _callingForm;
        public CharStats(MainForm callingForm)
        {
            InitializeComponent();
            _callingForm = callingForm;
        }

1 つ目は、2 つのコンストラクターを宣言しようとします。1MainFormつは引数付きで、もう 1 つは引数なしです。ただし、2 番目のコンストラクターの本体ではcallingForm変数が使用されますが、これは引数のないコンストラクターでは使用できません。{}(最初のコンストラクターの後に追加しただけでは、おそらくコンパイラ エラーがスローされます。)

MainFormと呼ばれる引数を受け入れるコンストラクターが 1 つだけ必要callingFormであり、それを に格納し_callingFormます。したがって、ゼロ引数のコンストラクターを廃止する必要があります。

于 2013-09-05T21:36:22.943 に答える
2

2番目のクラスでは、書いただけです

public CharStats(MainForm callingForm)

メソッド(コンストラクター)であり、開始と終了が必要です{}

public CharStats(MainForm callingForm)
{
  //your work
}
于 2013-09-05T21:35:01.160 に答える
1

CharStats クラスに 2 つのコンストラクターが定義されています。1 つはメソッド本体がなく、もう 1 つはそのスコープに存在しないパラメーターを参照しています。

これはあなたが望んでいたものでしたか?

public partial class CharStats : Form
{
    private MainForm _callingForm;

    public CharStats(MainForm callingForm)
    {
        InitializeComponent();
        _callingForm = callingForm;
    }

    private CharStats() : this (null)
    {
        // For designer use only.
    }

    void StatTransfer()
    {
        callingForm.SetInfo("Bob");
    }

    void FighterButtonClick(object sender, EventArgs e)
    {
        Fighter();
        StatTransfer();
    }
}
于 2013-09-05T21:41:17.813 に答える