1

特定の数値の絶対値を計算しようとするプログラムに取り組んでいました。私のコードにはいくつかの部分があります。最初の部分では、数値アップダウン ボックスを監視することによって、方程式が 1 項か 2 項かを確認します。1 項の場合は入力ボックスが 1 つだけ表示され、p.choice というパブリック変数に 1 が設定されます。ただし、2 項の場合は入力ボックスが 2 つ表示され、p.choice は 2 に設定されます。 go ボタンを押すと、プログラムは p.choice が 1 または 2 に等しいかどうかをチェックします (後で 0 の例外を追加します)。私はまだ2の機能を持っていません。しかし、p.choice が 1 の場合は、calculate1() という関数が実行されます。この関数は、最初のテキスト ボックスから取得したパブリック変数に基づいて、その変数が正か負かをチェックします。マイナスならプラスにします。次に、その変数を返します。クラス全体の私のコードは次のとおりです(別のクラスからは何も呼び出されません)

public partial class Form1 : Form
{

    private int calculate1()
    {

        Form1 p = new Form1();
        if (p.box1 < 0)
        {
            p.box1 = p.box1 * -1;
        }
        return p.box1;
    }
    public int choice;
    public int box1;
    public int box2;
    public Form1()
    {
        InitializeComponent();


    }

    private void numericUpDown1_ValueChanged(object sender, EventArgs e)
    {
        Form1 p = new Form1();
        decimal changeValue = numericUpDown1.Value;
        changeValue = Convert.ToInt32(changeValue);
        if (changeValue == 1)
        {
            textBox1.Visible = true;
            textBox2.Visible = false;
            p.choice = 1;
        }
        else if (changeValue == 2)
        {
            textBox1.Visible = true;
            textBox2.Visible = true;
            p.choice = 2;
        }
        else
        {
            textBox1.Visible = false;
            textBox2.Visible = false;
            p.choice = 0;
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 p = new Form1();
        if (p.choice == 1)
        {
            //p.box1 = Convert.ToInt32(textBox1.Text);
            //p.box1 = calculate1();
            //string result = "The Answer Is " + p.box1;
            //label2.Text = "5";
            //MessageBox.Show("Answer!", result, MessageBoxButtons.OK);
            label2.Text = "Hello World";

        }
        else if (p.choice == 2)
        {
            p.box1 = Convert.ToInt32(textBox1.Text);
            p.box2 = Convert.ToInt32(textBox2.Text);
        }
    }
}

私の問題は、ボタンのクリックで発生します。これは、else 句がまだないため、p.choice が何にも等しく設定されていないことを意味します。ただし、数値ボックスで 1 を選択して値を入力すると、p.choice が 1 に設定されない理由がわかりません。以前の編集で、label2.text = を p.choice から int32 への変換に設定しようとしました。ボックス番号を変更すると、ラベルがボックス番号で正しく変更されました。したがって、コードのこの部分で番号が登録されていることがわかります。次の部分で機能しない理由がわかりません。誰かがこれで私を助けることができれば、本当に感謝しています.

4

1 に答える 1

3

p.choiceForm1各関数で新しいオブジェクトをインスタンス化し続けるため、常にゼロです。

この行:

Form1 p = new Form1();

クラスのコンストラクターを呼び出し、Form1フィールドchoice(an int) をデフォルト値のゼロに設定します。

したがってp.choice、条件付きロジックで の値を確認すると、ifまたはのどちらelse ifも真ではありません。

// This is false, because p.choice is zero
if (p.choice == 1)

// This is false, because p.choice is zero
else if (p.choice == 2)

クラスの新しいインスタンスを作成する必要はありません。既にクラスに参加しているためです。

次の行を削除します。

Form1 p = new Form1();

代わりにthis、次のように、クラス インスタンスへの参照である を使用します。

private void button1_Click(object sender, EventArgs e)
{
    if (this.choice == 1)
    {
        //this.box1 = Convert.ToInt32(textBox1.Text);
        //this.box1 = calculate1();
        //string result = "The Answer Is " + this.box1;
        //label2.Text = "5";
        //MessageBox.Show("Answer!", result, MessageBoxButtons.OK);
        label2.Text = "Hello World";

    }
    else if (this.choice == 2)
    {
        this.box1 = Convert.ToInt32(textBox1.Text);
        this.box2 = Convert.ToInt32(textBox2.Text);
    }
}
于 2013-09-26T03:00:40.580 に答える