如何在Visual Studio,C ++中从表单之间继承变量

时间:2012-04-20 12:50:44

标签: c++ forms c++-cli

所以我正在使用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
{

感谢您的关注!

1 个答案:

答案 0 :(得分:0)

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

public ref class Form2 : public Form1 
{ 

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

如果它只是一个变量,两个表单都应该有共同之处,那么为什么要使用继承呢?因为继承通常意味着扩展基类,以便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的实例作为参数。