C# 在另一个窗体上访问私有函数

C# 在另一个窗体上访问私有函数,c#,winforms,C#,Winforms,我在一个名为FormMain的表单上有一个名为private void QuizReset()的函数,我想知道是否有一种方法可以在名为Form2的表单上访问它,而不会出现生成错误?可能看起来是一个非常简单的问题,或者我遗漏了一些东西,但我已经尝试将它从私有更改为公共,并且我不能正确地执行它,因为我会遇到构建错误等等。如果可以不出错的话,我愿意修改它。如果有人能帮我,那就太好了 多谢各位 该功能的当前代码为: private void QuizReset() { //res

我在一个名为
FormMain
的表单上有一个名为
private void QuizReset()
的函数,我想知道是否有一种方法可以在名为
Form2
的表单上访问它,而不会出现生成错误?可能看起来是一个非常简单的问题,或者我遗漏了一些东西,但我已经尝试将它从私有更改为公共,并且我不能正确地执行它,因为我会遇到构建错误等等。如果可以不出错的话,我愿意修改它。如果有人能帮我,那就太好了

多谢各位

该功能的当前代码为:

private void QuizReset()
    {
        //resets the difficulty selection control and shows it again upon resetting the quiz
        difficultySelectionControl.Reset();
        difficultySelectionControl.BringToFront();

        btnNext.Enabled = false;
        lblStatus.Text = "Please select a difficulty";

        iCorrectACount = 0;
        iCurrentQIndex = 0;
    }

如果要访问该方法,它不能是私有的<代码>静态公共是一个简单的解决方法。然后可以使用
MainForm.loadquick()
调用它。另一种选择是将逻辑移到助手类中。

将它们放在公共类中。然后将loadquick函数作为属于该类的私有静态方法。您还可以将LoadQuike设置为静态公共,这样做既快捷又肮脏。我不建议这样做,因为公开方法可能会导致内存和分配问题。

我认为您不能将此函数放在公共静态类中,因为,如果我理解正确,该函数使用以下形式的控件(
btnNext.Enabled=false;
)。这意味着该函数只能/必须与
FormMain
类的实例一起使用

如果要从
Form2
调用此函数,则
Form2
必须具有
FormMain
的引用

我的方法是:

表单2中创建变量

private FormMain frmMain;
this.frmMain.QuizReset()
然后创建
Form2
的构造函数,我在
Form2

public Form2(FormMain inFrmMain)
{
    this.frmMain = inFrmMain;
}
打开表格2的代码为:

Form2 frm2 = New Form2(this);
frm2.Show();
在此之后,您可以从
Form2
调用
FormMain
函数:

private FormMain frmMain;
this.frmMain.QuizReset()

当然,首先将函数
QuizReset
更改为public

如何“访问”它?显示一些代码。没有办法,因为它是私有的。构建错误是什么?“将其更改为公共”是正确的答案,因此您肯定还有其他问题;我们需要代码和实际错误消息来帮助。该语法用于静态方法调用。将函数设置为public static,然后像MainForm.QuizReset()那样调用它;我尝试执行此操作,但随后出现错误,例如非静态字段、方法或属性'quizzologic.MainForm.btnNext'需要对象引用,并且当前上下文中不存在名称'QuizReset'。该函数的代码在原始帖子中。