1

(Form1)には設定ボタンがあり、それをクリックすると、次のコード行を使用して新しいフォーム(Form2)が表示されます。

private void b7_Click(object sender, EventArgs e)
{
    Form3 frm = new Form3();
    frm.Show();

}

form3には、6つのテキストボックスと2つのボタン、[保存]と[キャンセル]があります。

ここに画像の説明を入力してください

私がやろうとしているのは、このフォームをユーザーに提供して、必要なデータをフォームに入力してから、[設定の保存]ボタンをクリックすることです。Form1で、これらのテキストボックスにアクセスして、現在の値を取得したいと思います(ユーザーが[設定の保存]をクリックしたとき)。Form4を追加して(MiddleForm)という名前を付け、6つのテキストボックスを追加し、Form3(上の画像のフォーム)に次の行を書きました。

private void button2_Click(object sender, EventArgs e)
{
    MiddleForm mf = new MiddleForm();
    mf.textBox1.Text = keywrd1.Text;
    mf.textBox2.Text = keywrd2.Text;
    mf.textBox3.Text = keywrd3.Text;
    mf.textBox4.Text = keywrd4.Text;
    mf.textBox5.Text = keywrd5.Text;

    mf.textBox1.Text = thelink.Text;

    Close();


}

次に、Form1(テキストボックスの値を使用する必要があるフォーム)からMiddleFormに渡された値にアクセスしようとしました。Form1では、これらの行を記述しました(デバッグ目的のみ)。

MiddleForm mf = new MiddleForm();

MessageBox.Show(mf.textBox1.Text); // to see whether there is something 

残念ながら、mf.TextBox1には何も渡されていないようです。

ここに画像の説明を入力してください

Form3の現在の値([設定の保存]ボタンを使用して保存)をForm1から呼び出して、残りのコードで使用するにはどうすればよいですか。

これを機能させるために何か助けがありますか?

4

5 に答える 5

5

次のように、Form3に6つのパブリックプロパティを作成します。

public partial class Form3 : Form
{
    public string Value1
    {
        get { return this.keywrd1.Text; }
    }

    public string Value2
    {
        get { return this.keywrd2.Text; }
    }

    ...
}

Form3を閉じた後(ただし破棄する前)、プロパティを介してテキスト値にアクセスできます。別の回答で指摘されているように、Showの代わりにShowDialogを使用して、独自のコード内でForm3を閉じます。

private void b7_Click(object sender, EventArgs e)
{
    Form3 frm = new Form3();
    frm.ShowDialog();
    string value1 = frm.Value1;
    ...
}
于 2012-04-14T23:06:19.290 に答える
3

これを行う必要があります:

var form = Form.ActiveForm as Form3;
String myText = form.txtBoxName.Text;
于 2012-04-14T23:05:44.997 に答える
3

フォームから取得したい値を提供するパブリックフィールドを作成する必要があります。Form1のソースに移動する場合は、次のようなものを追加する必要があります。

public string TextValue1 {
    get {return TextBox1.Text;}
}

これで、Form1.TextBox1を使用して、テキストボックスから文字列値を取得できます。

于 2012-04-14T23:07:35.400 に答える
3

これを使用してモデルダイアログボックスとしてShowDialog作成してみてください。次に、データが保存されたか、キャンセルされたかを確認できます。FormDialogResultForm

すなわち

private void button2_Click(object sender, EventArgs e)
{
    Form3 frm = new Form3();
    if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        savedSettings = frm.getTextBoxValues();
    }
}

Form3

public partial class Form3 : Form
{
    string[] textValues = new string[6];

    public Form3()
    {
        InitializeComponent();
    }
    public string[] getTextBoxValues()
    {
        return textValues;
    }

    private void saveSettings_Click(object sender, EventArgs e)
    {
        DialogResult = System.Windows.Forms.DialogResult.OK;
        textValues[0] = textBox1.Text;
        textValues[1] = textBox2.Text;
        textValues[2] = textBox3.Text;
        textValues[3] = textBox4.Text;
        textValues[4] = textBox5.Text;
        textValues[5] = textBox6.Text;
        this.Close();
    }

    private void cancelSettings_Click(object sender, EventArgs e)
    {
        DialogResult = System.Windows.Forms.DialogResult.Cancel;
        this.Close();
    }
}
于 2012-04-14T23:40:26.580 に答える
3

Form3このように公共の財産を作る

public string[] Keys
{
    get
    {
        return new string[] { tbKey1.Text, tbKey2.Text, tbKey3.Text,
                              tbKey4.Text, tbKey5.Text};
    }
}

public string Link { get { return tbLink.Text; } }

このForm1ようにこれらのプロパティにアクセスできます

Form3 frm = new Form3();
if (frm.ShowDialog() == DialogResult.OK) {
    string[] keys = frm.Keys; 
    string link = frm.Link; 
}

注:他のフォームが閉じるのを待たないため、ではなくをShowDialog使用することが重要です。また、「設定を保存」をクリックした場合、ダイアログ結果を設定しますShowShowForm3

DialogResult = DialogResult.OK;
Close();

上記のようにチェックインできるようにしますForm1

于 2012-04-14T23:52:04.123 に答える