1

在(Form1)我有一个设置按钮,当我点击它时,会显示一个新表单(Form2),使用这些代码行:

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

}

在 form3 中,我有 6 个文本框和两个按钮,保存和取消。

在此处输入图像描述

我要做的是向用户提供此表单,以便他在表单中键入必要的数据,然后单击“保存设置”按钮。在 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

在此处输入图像描述

我如何从 Form1 调用 Form3 的当前值(使用保存设置按钮保存)以便在其余代码中使用它们。

有什么帮助请让这个工作?

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 关闭后(但在处置之前),您可以通过属性访问文本值。正如另一个答案中所指出的,使用 ShowDialog 而不是 Show 并在其自己的代码中关闭 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

您可以尝试使用ShowDialog它将创建您Form的模型对话框,然后您可以检查DialogResult以了解数据是否已保存或Form已取消。

IE

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

表格3

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; 
}

注意:使用ShowDialogand not很重要Show,因为Show不会等待其他表单关闭。此外,当点击“保存设置”时Form3,设置对话框结果

DialogResult = DialogResult.OK;
Close();

这样您就可以Form1如上所示将其签入。

于 2012-04-14T23:52:04.123 回答
3

您应该创建一个公共字段,以提供您希望从表单中获取的值。如果你去 Form1 的源代码,你应该添加这样的东西:

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

现在,您可以使用 Form1.TextBox1 从您的文本框中检索字符串值。

于 2012-04-14T23:07:35.400 回答
3

你需要这样做:

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