0

所以我正在使用 Windows 窗体,我偶然发现了一个问题,当我按下一个按钮时,一个名为 Form2 的窗体打开并且 Form1 隐藏了。但问题是我需要从 Form1 继承一个整数变量到 Form2,但我不能弄清楚如何做到这一点......我试图让Form2类继承Form1,但这使得Form2拥有所有控件(文本框,标签等)。那么正确的方法是什么?Maby 我错误地创建了 Form2 ......

以下是表单类的编写方式。

public ref class Form2 : public System::Windows::Forms::Form
{

public ref class Form1 : public System::Windows::Forms::Form
{

我试过了

 public ref class Form2 : public System::Windows::Forms::Form, public Form1
{

感谢关注!

4

1 回答 1

0

不允许从两个基类继承。您只能从一个类继承,但可以根据需要实现任意数量的接口。试试这样:

public ref class Form2 : public Form1 
{ 

在您的情况下,您不需要从两个类继承,因为 Form1 已经继承 System.Windows.Forms.Form,如果 Form2 继承 Form1,它也自动属于 System.Windows.Forms.Form 类型。

如果这只是两种形式应该共有的一个变量而没有别的,为什么要使用继承?因为继承通常意味着扩展基类,以便 Form1 的所有成员/属性/方法在 Form2 中也可用。因为表单必须从 System.Windows.Forms.Form 继承,所以您不能使用任何其他基类。也许您应该考虑使用将公共变量定义为属性的公共接口,然后两种形式都必须实现该接口。

public interface IMyForm
{
    int MyValue { get; set; }
}

public class Form1 : System.Windows.Forms.Form, IMyForm
{
   public int MyValue { get; set; }
   ...
}

public class Form2 : System.Windows.Forms.Form, IMyForm
{
   public int MyValue { get; set; }
   ...
}

对不起 C# 语法,希望我的意思很清楚。例如,如果您现在有一个方法需要一个具有该公共属性的表单作为参数,您可以简单地执行以下操作:

public void DoSomething(IMyForm form)
{
    form.MyValue = 5;
}

您可以将 Form1 或 Form2 的实例作为参数传递。

于 2012-04-20T12:55:18.113 回答