在另一个表单上访问私有函数

时间:2013-03-14 19:33:32

标签: c# winforms

我在名为private void QuizReset()的表单上有一个名为FormMain的函数,我想知道是否有办法在名为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;
    }

3 个答案:

答案 0 :(得分:0)

如果要访问该方法,则不能将其设为私有。 static public是一个简单的解决方法。然后你可以用MainForm.LoadQuiz()来调用它。另一个选择是将逻辑移动到辅助类中。

答案 1 :(得分:0)

将它们放入公共公共课程中。然后将LoadQuiz函数作为属于该类的私有静态方法。您还可以使LoadQuiz成为静态公共,这很快且很脏。我不建议这样做,因为暴露公开的方法可能导致记忆和分配问题。

答案 2 :(得分:0)

我认为你不能把这个函数放在普通的静态类中,因为,如果我理解正确,该函数使用表单的控件(btnNext.Enabled = false;)。这意味着函数可以/必须仅用于FormMain类的实例。

如果您想从Form2调用此函数,则Form2必须引用FormMain

接下来我的方法是:

Form2中创建变量:

private FormMain frmMain;

然后创建Form2的构造函数,我在FormMain

中指定Form2的引用
public Form2(FormMain inFrmMain)
{
    this.frmMain = inFrmMain;
}

Form2的开放代码将是:

Form2 frm2 = New Form2(this);
frm2.Show();

在此之后,您可以从FormMain致电Form2功能:

this.frmMain.QuizReset()

当然,首先将功能QuizReset更改为公开