在Windows窗体之间传递值c#

Tre*_*iel 6 c# winforms

我正在努力研究如何在表单之间传递值.我有四种形式,我想将由Login第四和最终形式检索到的信息传递给我.

这就是我到目前为止所拥有的.

在这个功能:

private void btnLogin_Click(object sender, EventArgs e)
Run Code Online (Sandbox Code Playgroud)

我已经反序列化了我想要的数据:

NewDataSet resultingMessage = (NewDataSet)serializer.Deserialize(rdr);
Run Code Online (Sandbox Code Playgroud)

然后,当我打电话给下一个表格时,我已经这样做了:

Form myFrm = new frmVoiceOver(resultingMessage);
myFrm.Show();
Run Code Online (Sandbox Code Playgroud)

然后,我的VoiceOver表单看起来像这样:

public frmVoiceOver(NewDataSet loginData)
{
    InitializeComponent();
}

private void btnVoiceOverNo_Click(object sender, EventArgs e)
{
    this.Close();
    Form myFrm = new frmClipInformation();
    myFrm.Show();
}
Run Code Online (Sandbox Code Playgroud)

当我调试时,我可以看到数据处于loginData第二种形式,但我似乎无法在btnVoiceOverNo_Click事件中访问它.我如何访问它以便将其传递给下一个表单?

Ada*_*rth 11

您需要loginDatafrmVoiceOver类中放入一个局部变量,以便能够从其他方法访问它.目前它的范围是构造函数:

class frmVoiceOver : Form
{
    private NewDataSet _loginData;

    public frmVoiceOver(NewDataSet loginData)
    {
        _loginData = loginData;

        InitializeComponent();
    }

    private void btnVoiceOverNo_Click(object sender, EventArgs e)
    {
        // Use _loginData here.
        this.Close();
        Form myFrm = new frmClipInformation();
        myFrm.Show();
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,如果两个表单在同一个进程中,您可能不需要序列化数据,只需将其作为表单构造函数的标准引用传递即可.

像" C#变量范围 " 这样的Google 可以在这个领域了解更多,因为你会一直遇到这个概念.我很感激你是自学成才所以我只是想加强那个:-)