0

ボタンのクリックで複数のテキスト ボックスForm1のデータをからに渡すことができません。Form2以下の方法を試してみましたが、うまくいきません。

私はそれを間違っていましたか?もしそうなら、どうすればそれを行うことができますか?

Form1 コード:

public partial class Form1: Form {
    Form2 frm2;

    public Form1() {
        InitializeComponent();
    }

    private void btnInvoice_Click_1(object sender, EventArgs e) {
        this.Hide();

        if(frm2==null)
            frm2=new Form2();

        frm2.ValueFromForm1(txtFirstName.Text);
        frm2.ValueFromForm1(txtLastName.Text);
        frm2.ValueFromForm1(txtCellNo.Text);
        frm2.ValueFromForm1(txtDate.Text);
        frm2.ValueFromForm1(txtDueDate.Text);

        frm2.Show();
    }
}

Form2 コード:

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

    public void ValueFromForm1(string value) {
        txtFirstName.Text=value;
        txtLastName.Text=value;
        txtCellNo.Text=value;
        txtMaskDueDate.Text=value;
        txtMaskDate.Text=value;
    }
}
4

3 に答える 3

7

すべてのテキストボックスに同じ値を割り当てています。結果は、割り当てている最後の値(txtDueDateテキスト)になります。さまざまなメソッドを作成して、各テキストボックスに値を割り当てるか、値を配列またはカスタムオブジェクトとして渡します。

public class Invoice
{
   public string FirstName { get; set; }
   public string LastName { get; set; }
   public string CellNo { get; set; }
   // etc
}

Form1で

private void btnInvoice_Click_1(object sender, EventArgs e)
{
    this.Hide();
    if (frm2 == null)
        frm2 = new Form2();

    Invoice invoice = new Invoice();
    invoice.FirstName = txtFirstName.Text;
    invoice.LastName = txtLastName.Text;
    invoice.CellNo = txtCellNo.Text;
    // etc
    frm2.Invoice = invoice;
    frm2.Show();
}

Form2で

public Invoice Invoice
{
   set
   {
        txtFirstName.Text = value.FirstName;
        txtLastName.Text = value.LastName;
        txtCellNo.Text = value.CellNo;
        // etc
   }
}
于 2013-02-08T22:19:16.260 に答える
1

で作成するのPropertiesForm2どうですか?を作成することclassは解決策の 1 つですが、簡単に作成Propertiesしてgetset

フォーム1

private void btnInvoice_Click_1(object sender, EventArgs e)
{
    this.Hide();
    using(var f = new Form2())
    {
      f.FirstName = txtFirstName.Text;
      f.LastName = txtLastName.Text;
      f.CellNo = txtCellNo.Text;
      f.ShowDialog();
    }
}

フォーム2

public string FirstName { get; set; }
public string LastName { get; set; }
public string CellNo { get; set; }

private void Form2_Load(object sender, EventArgs e)
{
    txtFirstName.Text = FirstName;
    txtLastName.Text = LastName;
    txtCellNo.Text = CellNo;
}
于 2013-02-09T02:14:48.753 に答える
-1

メソッドの実装は非常に間違っているか、少なくともあなたが考えているロジックです!すべてのテキストボックスに同じ値を割り当てています。

この問題は2つの方法で解決できます。

簡単な方法は、Form2のコントロールの修飾子をprivateからinternalまたはに変更することpublicです。修飾子を変更した後、uはそれを次のように呼び出すことができます

private void btnInvoice_Click_1(object sender, EventArgs e)
    {
        this.Hide();
        if (frm2 == null)
            frm2 = new Form2();

        frm2.txtFirstName.Text = txtFirstName.Text;
        frm2.txtLastName.Text = txtLastName.Text;
        frm2.txtCellNo.Text = txtCellNo.Text;
        frm2.txtDate.Text = txtDate.Text;
        frm2.txtDueDate.Text = txtDueDate.Text;

        frm2.Show();
    }

修飾子を変更する方法は?

修飾子の変更


またはのような複数のメソッドを作成することによる複雑な方法

public void ValueForFirstName(string value)
{
    txtFirstName.Text = value;
}


public void ValuForLastName(string value)
{
    txtLastName.Text = value;
}
于 2013-02-08T22:19:25.283 に答える