C#窗体需要调用在父窗体中定义的方法

4

我有一个表单 (EmployeeForm),它继承自部分类表单 (MainForm)。在 MainForm 内部,我有一个方法 (SaveSomething),我想要调用它。

我该如何实现呢?

using SomeLib;

namespace FooEmployee
{
    public partial class EmployeeForm: MainForm
    {
        private void dgv_DoubleClick(object sender, EventArgs e)
        {
             SaveSomething();
        }
    }    
}

namespace SomeLib
{
    public partial class MainForm: Form
    {
        private bool SaveSomething()
        {
        }
    }
}

这个能帮到你吗?http://stackoverflow.com/questions/5743611/c-sharp-calling-a-method-from-another-form - PM_ME_YOUR_CODE
@牛逼的程序员:虽然我愿意打赌这个问题周围可能有重复的内容,但看起来这个问题并不符合要求,因为没有提到一个表单继承自另一个表单。在我看来,那个问题的质量也很差。 - Brian Gideon
1个回答

7

将访问修饰符从private改为protected,用于您的方法。

private表示该方法仅适用于包含它的类。另一方面,protected表示当前类及其所有继承自它的类。

您的代码将如下所示:

public partial class MainForm: Form
{
    protected bool SaveSomething()
    {
        // ...
    }
}

这被称为访问修饰符,链接指向C#中所有可用访问修饰符的MSDN文章(publicprivateprotectedinternalprotected internal)。


Rudi,我了解protected访问修饰符并已经实现了它,但是在引用“SaveSomething()”方法时,出现了错误。 - Jim Kiely
错误:"SomeLib.MainForm" 不包含 "SaveSomething" 的定义。 - Jim Kiely
@JimKiely,我刚刚测试了与上面完全相同的代码,并对protected进行了修改,它可以正常工作? - Rudi Visser
"MainForm.SaveSomething();" - 这是我在双击事件方法中调用该方法的方式。有什么想法吗? - Jim Kiely
不要这样做。使用SaveSomething();,就像你现在写的一样。你尝试的是期望一个名为SaveSomething的静态方法存在于类中,而不是类的实例。SaveSomethingthis中可用,所以你根本不需要限定它。 - Rudi Visser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接