在C#窗体中访问子窗体属性

时间:2012-07-31 01:46:51

标签: c#

所以我试图从其父表单访问我的子表单的公共成员变量。该表单有一个公共get属性,我试图从中访问该变量。以下是我的子表单中定义变量的方式:

    public partial class frmNewProduct : Form
{
    public Inventory _inventory { get; private set; }

现在让我们改变节奏并转到父表格。子窗体的实例在下面创建,您也可以看到我尝试从该实例访问_iventory的get属性,但每次都会收到编译器错误。

        private void btnAdd_Click(object sender, EventArgs e)
    {
        Form newProduct = new frmNewProduct(_inventory, Mode.add);
        newProduct.Show();
        Inventory variable = newProduct._inventory;
    }

编译器错误读取以下内容:

错误1'System.Windows.Forms.Form'不包含'_inventory'的定义,并且没有扩展方法'_inventory'接受类型'System.Windows.Forms.Form'的第一个参数可以找到(是你错过了使用指令或程序集引用?)

有谁知道这里有什么问题吗?谢谢。

1 个答案:

答案 0 :(得分:4)

您正在创建一种父类型表单。您需要将其声明为派生类型frmNewProduct。 E.g:

frmNewProduct newProduct = new frmNewProduct(_inventory, Mode.add);
newProduct.Show();
Inventory variable = newProduct._inventory;

澄清:您正在向继承自Form的类型frmNewForm添加属性。表单没有属性,因此在将变量声明为Form类型时无法访问它。

另一个例子:

class BaseClass {
}

class DerivedClass : BaseClass {
    public int MyProperty { get; set; }
}

使用上面的代码,你不能这样做:

BaseClass base = new DerivedClass();
base.MyProperty = 12; // ERROR

..但是,你可以这样做:

DerivedClass derived = new DerivedClass();
derived.MyProperty = 12; // Works