0

全て。

form1からform2にcheckbox1のデータを受け取りたいです。get メソッドと set メソッドを使用して、変数の意味を受け取りました。これにはこのコードを使用しました。しかし、うまくいきませんでした。なんで?問題はどこだ?

form1.cs

...
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 test = new Form2();
            test.checkBox1 = checkBox1.Checked;
            test.Show();
        }
    }
}

form2.cs

    ...
namespace WindowsFormsApplication1
    {
        public partial class Form2 : Form
        {
            private bool data7;

            public Form2()
            {
                InitializeComponent();
            }

            public bool checkBox1 
            {
                get { return data7; }
                set { value = data7; } 
            }

            private void Form2_Load(object sender, EventArgs e)
            {
                if (data7 == true)
                {
                    label1.Text = "true";
                }
                else
                {
                    label1.Text = "false";
                }
            }
        }
    }
4

4 に答える 4

9
set { value = data7; }  

する必要があります

set { data7 = value; }
于 2012-05-16T12:35:56.443 に答える
1

あなたのset方法は間違っています。そのはず

set { data7 = value; }

Form2どうやら変数data7に値を保存しますが、CheckBoxには保存しません。実際にCheckBoxに保存するには、このようなことをする必要があります

public bool checkBox1
{
    get { return myCheckBox.Checked; }
    set { myCheckBox.Checked = value; }
}

もう 1 つの問題は、ユーザー入力の結果を に返すことForm1です。Form2このステートメントの後にコードで呼び出すので、閉じるtest.Show();のを待たずにすぐに続きForm2ます。test.ShowDialog();代わりに電話してください。


ブロックせずに結果を返す別のオプションはForm1、イベントを使用することです。この定義の使用

public class Form2ResultEventArgs : EventArgs
{
    public Form2ResultEventArgs(bool checked)
    {
        this.Checked = checked;
    }

    public bool Checked { get; private set; }
}

ではForm2、このようなイベントを定義します。

public event EventHandler<Form2ResultEventArgs> Form2Result;

private OnForm2Result(bool checked)
{
    var handler = Form2Result;
    If (handler != null) {
        handler(this, new Form2ResultEventArgs(checked));
    }
}

// Assuming that you have a OK button on Form2
private OkButton_Click (...)
{
    OnForm2Result(myCheckBox.Checked);
    this.Close();
}

Form1 で

var test = new Form2();
test.Form2Result += ProcessResult;
test.Show();

...

private void ProcessResult(object sender, Form2ResultEventArgs e)
{
    bool result = e.Checked;
    ...
}

アップデート

ラベルのみを設定したい場合は、これを行ってみませんか

Form2 で

public void SetDisplay(bool value) {
    label1.Text = value.ToString();
}

Form1 で

var test = new Form2();
test.SetDisplay(checkBox1.Checked);
test.Show();

InitializeComponentのコンストラクタで が呼び出されるForm2ため、 の後にラベルが存在することに注意してくださいnew Form2()。でそれを行う必要はありませんForm2_Load

于 2012-05-16T12:44:23.227 に答える
0

false または true の値が設定された bool data7 が作成されたときに、ユーザーが CheckBox1 を設定していない場合、フォームが最初に読み込まれたときにフォームがクラッシュすることをお勧めします。はい、指定されたコードでOPが変数を設定したことを知っています。

private bool data7 = false;

以下の提案にFur Dworetzkys Answerを含めました

...
namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        //give the variable a default value
        private bool data7=false;

        public Form2()
        {
            InitializeComponent();
        }

        public bool checkBox1 
        {
            get { return data7; }
            //Here is Furs Correction
            set { data7 = value; } 
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            if (data7 == true)
            {
                label1.Text = "true";
            }
            else
            {
                label1.Text = "false";
            }
        }
    }
}
于 2012-05-16T12:46:39.357 に答える
0

get または set で data7 を使用して何も (検証など) 行っていない場合は、それらを削除してください。

  public partial class Form2 : Form
            {
                public Form2()
                {
                    InitializeComponent();
                }

                public bool checkBox1 { get; set; }

                private void Form2_Load(object sender, EventArgs e)
                {
                    if (checkBox1)
                    {
                        label1.Text = "true";
                    }
                    else
                    {
                        label1.Text = "false";
                    }
                }
            }
于 2012-05-16T12:53:17.560 に答える