0

たとえば、次のように定義された独自のデータ クラスがあるとします。

public class MyData
{
    public string v1;
    public int v2;
    //etc.
}

これを独自の Form 派生クラスに渡し、それを使用してフォーム コントロールを初期化できます。

public partial class MyForm : Form
{
    private MyData dataIn;

    public MyForm(MyData data)
    {
        InitializeComponent();

        dataIn = data;
    }
}

private void MyForm_Load(object sender, EventArgs e)
{
    //Init controls in 'MyForm' from 'dataIn'
}

private void buttonSave_Click(object sender, EventArgs e)
{
    //Save button was clicked

    //Read data from 'MyForm', but
    //how to return it back in 'MyData' class?

    //Close form
    this.DialogResult = System.Windows.Forms.DialogResult.OK;
    this.Close();
}

そして、フォーム自体は次のように呼び出されます。

//Initial data for the form
MyData data = new MyData(){
    v1 = "test",
    v2 = 123
};

MyForm dlg = new MyForm(data);
if (dlg.ShowDialog() == DialogResult.OK)
{
    //User clicked Save -- how to get data back in 'MyData'?
}

問題はMyData、データを入力してから返す方法MyFormです。

4

2 に答える 2

1

フォームの外部で結果データにアクセスするためのメソッドを提供する必要があります。読み取り可能なプロパティか、他の場所から呼び出すことができるメソッドのいずれかです。

public partial class MyForm : Form
{
    private MyData dataIn;
    // Option 1: property that can be read from another class
    public MyData result { get; private set; }

    // Option 2: method you can call to get the result object
    public MyData GetResult()
    {
        return result;
    }

    public MyForm(MyData data)
    {
        InitializeComponent();

        dataIn = data;
    }

    private void buttonSave_Click(object sender, EventArgs e)
    {
        // set result object
        result = new MyData { v1 = "some string value", v2 = 123 }

        this.DialogResult = System.Windows.Forms.DialogResult.OK;
        this.Close();
    }
}

次に、呼び出し元は次のようなことを行います。

MyData dlgResult = null;
using (MyForm dlg = new MyForm(data))
{
    if (dlg.ShowDialog() == DialogResult.OK)
        dlgResult = dlg.GetResult();
}
if (dlgResult != null)
{
    // do something with the result
    //....
}

Form.Close()はフォームを破棄しないことに注意してください。破棄されるまで、引き続き操作を実行できます。このusing (MyForm...構文により、フォームの使用が終了すると、フォームが正しく破棄されることが保証されます。

于 2013-10-29T06:23:21.720 に答える
0

MyDataMyFormでタイプのプロパティを作成します。

public partial class MyForm : Form
{
    private MyData dataIn;
    public MyData dataOut {get; set;}

    public MyForm(MyData data)
    {
        InitializeComponent();

        dataIn = data;
        dataOut = new MyData { v1 = "hi!", v2 = 2013 }; 
    }
}

次に、それを読むことができます:

MyForm dlg = new MyForm(data);
if (dlg.ShowDialog() == DialogResult.OK)
{
    MyData dataFromForm = dlg.dataOut;
}
于 2013-10-29T06:22:56.743 に答える