web-dev-qa-db-ja.com

ダイアログフォームからメインフォームに値を渡す

重複の可能性:
form1からform2にオブジェクトを渡し、form1に戻す方法はありますか?

変数をパラメーターとして渡すだけで、Windowsフォーム間で変数を渡すことに慣れています。これで、既に開いているフォーム(FormMainと呼びましょう)と、ダイアログ(FormTask)のように機能する別のフォームがあります。ユーザーは、FormTaskに関する情報を入力するまで、メインフォームを操作できません。 FormTaskには単純に1つのテキストボックスが含まれ、このテキストボックスの値はFormMainに返され、変数として追跡されます。 FormTaskにはパラメーターexerciseTypeが必要です。 FormTaskが開くと、このパラメーターの値がチェックされ、それに応じてテキストボックスのデフォルト値が設定されます。これはすでに機能しており、すでに開いているMainFormに文字列値を返す方法については、まったく無知です。これらのダイアログはDialogResultsを返すことができるだけのようですが、これは私が求めているものではありません。私もあまり経験がないので、自分のカスタムダイアログを作成するためにいじくり回すのは避けたいです。

FormMain:

FormTask formTask = new FormTask(exerciseType);
formOpgaveInvoker.ShowDialog();

FormTask:

private void button1_Click(object sender, EventArgs e)
{
    string opgave = textBoxOpgave.Text;
    // return string value to MainForm here
}
20
Jort

FormTaskでパブリックプロパティを作成する

public string Opgave { get {return textBoxOpgave.Text;}}

ShowDialog();の後で確認してください。

FormTask formTask = new FormTask(exerciseType);
formOpgaveInvoer.ShowDialog();
formOpgaveInvoer.Opgave;  // here it is
32
Stecya

これを行う最も簡単な方法は、フォームクラスにパブリックプロパティを追加して文字列を返すことです。

_public string opgave
{
    get;
    private set;
}
_

ダイアログが閉じるときにこのプロパティに割り当て、ShowDialog()を呼び出したコードからプロパティを読み取ります。

_private void button1_Click(object sender, EventArgs e)
{
    opgave = textBoxOpgave.Text;
}

...

FormTask formTask = new FormTask(exerciseType);
formOpgaveInvoker.ShowDialog();
DoSomething(formTask.opgave);
_
1
David Heffernan

フォームは単なる通常のクラスです。つまり、その中にプロパティを作成できます。
So:プロパティを作成し、それに値を割り当てます。

1
Daniel Hilgarth

プロパティをFormTaskに追加します。例:String1 like

public string String1 {get; set;}

たとえば、String1の値をbutton1_Clickに設定します。

あなたはMainFormでそのプロパティにアクセスできます

FormTask formTask = new FormTask(exerciseType);   
formOpgaveInvoer.ShowDialog(); 
string str = formTask.String1;
1
FIre Panda