C#-使用两种形式,从第一种形式访问变量

C#-使用两种形式,从第一种形式访问变量,c#,winforms,visual-studio-2010,C#,Winforms,Visual Studio 2010,我已经为此挣扎了一个星期了,我看不到任何其他问题。我需要做一些事情,比如at,但是我需要从第二个表单访问第一个表单代码中的变量,并且click事件在第二个表单中发生 以下是第一个表单(mainForm)的一些代码: 下面是第二种形式(困难形式)的一些代码: 另外,我是C#的noob,所以如果你有其他建议,那就太好了,谢谢 注意:我使用字符串来表示困难,因为代码中有更深层的内容,所以请不要告诉我使用整数,谢谢。如果我正确理解了您的困难,您可能需要了解事件处理 定义一个自定义事件args类(例如:艰

我已经为此挣扎了一个星期了,我看不到任何其他问题。我需要做一些事情,比如at,但是我需要从第二个表单访问第一个表单代码中的变量,并且click事件在第二个表单中发生

以下是第一个表单(mainForm)的一些代码:

下面是第二种形式(困难形式)的一些代码:

另外,我是C#的noob,所以如果你有其他建议,那就太好了,谢谢


注意:我使用字符串来表示困难,因为代码中有更深层的内容,所以请不要告诉我使用整数,谢谢。

如果我正确理解了您的困难,您可能需要了解事件处理

定义一个自定义事件args类(例如:艰难事件args或其他)。定义一个带有一个参数的委托作为事件参数

用类中的委托声明事件

在要观察的属性的setter方法中调用委托

在另一种形式中,您可以订阅此事件,以监视对其所做的任何更改。这只是一种方式


此外,对于困难级别,最好使用枚举,而不是字符串。

要将信息从第二个窗体推送到主窗体,应该使用事件。在第二个窗体上创建事件,并在单击按钮时激发它:

public partial class difficultyForm : Form
{
    string difficulty = "";

    public difficultyForm()
    {
        InitializeComponent();
    }

    public event Action<string> DifficultySubmitted;

    private void enterButton_Click(object sender, EventArgs e)
    {
        difficulty = difficultyTextBox.Text;

        if (DifficultySubmitted != null)
            DifficultySubmitted(difficulty);

        //...
    }
}

您可以在deficultform的构造函数参数中传递Form1,从而访问Form1的控件。如果您只是想在特定的循环状态下获取第二个表单的文本框的值,则可以在第二个表单的代码中创建公共方法

public string GetTxtBoxValue()
        {
            return difficultyTextBox.Text;
        }
然后从第一个表单中调用它


但是,如果您想更好地控制它,我建议使用事件。

您想在第一个表单中获取变量的值,还是设置它?主表单的可能副本不应该是在另一个表单中清空文本或设置文本框的焦点。这些事情应该以第二种形式进行。文本框甚至不应该公开。我想从第二个表单中获取一个变量,并将第一个表单中的变量设置为等于它,这样我就可以在那里使用它。我尝试了这个方法,但难度(在第一个表单中)似乎没有设置为我在第二个表单中输入的难度。我在第一个表单的文本框中指定了难度值,但文本框中没有显示任何内容。@Toje您是否在提交难度时触发的事件处理程序中设置了难度值?这可能是一个合适的地方。很抱歉,这里有一个noob问题,但是什么是事件处理程序呢?@Toje它是在触发事件时调用的方法。在这种情况下,
newhoodity=>hoodity=newhoodity
正在创建一个匿名方法,该方法在激发
提交的难度时被调用。好的,谢谢,但是我如何在事件处理程序中设置难度?(如果你能发布一篇参考资料或是一些很棒的东西,我可以自己尝试学习,我以前从未使用过这些东西——我主要用C++编程)
public partial class difficultyForm : Form
{
    string difficulty = "";

    public difficultyForm()
    {
        InitializeComponent();
    }

    public event Action<string> DifficultySubmitted;

    private void enterButton_Click(object sender, EventArgs e)
    {
        difficulty = difficultyTextBox.Text;

        if (DifficultySubmitted != null)
            DifficultySubmitted(difficulty);

        //...
    }
}
private void generateBegin()
{
    difForm.Show();
    difForm.difficultyTextBox.Text = "";
    difForm.difficultyTextBox.Focus();
    difForm.DifficultySubmitted += newDifficulty => difficulty = newDifficulty;
}
public string GetTxtBoxValue()
        {
            return difficultyTextBox.Text;
        }