Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在两个窗体上使用类的和实例_C#_Winforms_Oop - Fatal编程技术网

C# 在两个窗体上使用类的和实例

C# 在两个窗体上使用类的和实例,c#,winforms,oop,C#,Winforms,Oop,我正在努力让我的头围绕以下内容。 我现在有三种形式,我的主课和一个主课 public partial class frmMain : Form { public frmMain() { InitializeComponent(); } } public partial class frmSuppliers : Form { public frmSuppliers() { InitializeComponent();

我正在努力让我的头围绕以下内容。 我现在有三种形式,我的主课和一个主课

public partial class frmMain : Form
{
    public frmMain()
    {
        InitializeComponent();
    }
}

public partial class frmSuppliers : Form
{
    public frmSuppliers()
    {
        InitializeComponent();
    }
}

public partial class frmCustomers : Form
{
    public frmCustomers()
    {
        InitializeComponent();
    }
}
在我的主要课程中,我有:

 public class Program
 {
        public StockControl StockSystem = new StockControl("The Book Shop", 20);
 }
我希望能够访问FRM供应商和frmMain中库存控制的方法


我知道这可能是一个N00b问题——但它整天都在困扰着我

您需要将其作为构造函数参数传递给其他表单,然后将其存储在专用字段中。

您需要将其作为构造函数参数传递给其他表单,然后将其存储在专用字段中。

将其声明为静态

public static StockControl StockSystem = new StockControl("The Book Shop", 20);
并用作

Program.StockSystem 
声明它是静态的

public static StockControl StockSystem = new StockControl("The Book Shop", 20);
并用作

Program.StockSystem 

您应该在每个表单中添加StockControl类型的字段,并将其公开,或者向其中添加getter/setter。这意味着在每个表单中添加以下行:

private StockControl _stockCtrl;
public StockControl StockCtrl
{
   get { return _stockCtrl; }
   set { _stockCtrl = value; }
}
在每个表格的cod中,您可以访问库存控制。但是如果你不给它赋值,它将是空的,即null。这是我在打开表格之前要做的事情。如果您使用的是主方法:

frmSuppliers frmToOpen = new frmSuppliers();
frmSuppliers.StockCtrl = StockSystem;
frmSuppliers.Show();

您应该在每个表单中添加StockControl类型的字段,并将其公开,或者向其中添加getter/setter。这意味着在每个表单中添加以下行:

private StockControl _stockCtrl;
public StockControl StockCtrl
{
   get { return _stockCtrl; }
   set { _stockCtrl = value; }
}
在每个表格的cod中,您可以访问库存控制。但是如果你不给它赋值,它将是空的,即null。这是我在打开表格之前要做的事情。如果您使用的是主方法:

frmSuppliers frmToOpen = new frmSuppliers();
frmSuppliers.StockCtrl = StockSystem;
frmSuppliers.Show();


StockControl是单身吗?i、 e.应用程序的每个实例是否只有一个StockControl?@NominSim Yes-在这个类中,它包含一个类型customer、类型supplier和类型product的列表。@如果愿意,您可以在这里查找如何实现Singleton。StockControl是Singleton吗?i、 e.应用程序的每个实例是否只有一个StockControl?@NominSim Yes-在这个类中,它包含一个customer类型的列表,键入supplier和type product.@thatnerdovert,如果您愿意,您可以在这里查找如何实现单例。不要将其声明为静态:P传递它instead@Patrick使其静止和传递可能都会起作用,这取决于具体情况。@SergeyKudriavtsev:当然会起作用。但将其设置为静态是一个糟糕的建议,因为那时每个人都可以访问它。这就像把你家的钥匙放在草坪上,让每个人都可以使用。@Patrick这似乎是OP特别要求的。虽然我同意你的观点,OP可能不知道这不是一个好主意。@Thatnerdover这不是一个安全问题,而是一个可扩展性问题,也是早期开发良好编程实践的问题。如果你以错误的方式学习东西,那只会使学习如何正确地做事情变得更加困难instead@Patrick使其静止和传递可能都会起作用,这取决于具体情况。@SergeyKudriavtsev:当然会起作用。但将其设置为静态是一个糟糕的建议,因为那时每个人都可以访问它。这就像把你家的钥匙放在草坪上,让每个人都可以使用。@Patrick这似乎是OP特别要求的。虽然我同意你的观点,OP可能不知道这不是一个好主意。@Thatnerdover这不是一个安全问题,而是一个可扩展性问题,也是早期开发良好编程实践的问题。如果你以错误的方式学习东西,那只会让你在学习如何正确地做事情的过程中变得更加困难。一个编码的例子会很好,我想我知道你在说什么,但是我不确定我是否在想同样的事情。一个编码的例子会很好,我想我知道你在说什么,然而,我不确定我是否在想同样的事情。