如何访问用c#中的函数创建的对象

Posted

技术标签:

【中文标题】如何访问用c#中的函数创建的对象【英文标题】:how to access an object which made with a function in c# 【发布时间】:2016-09-18 10:50:01 【问题描述】:

我正在制作一个 c# windows 应用程序并尝试以编程方式创建表单中的对象(例如 TextBox 和 Label)。我可以很容易地做到这一点,但我不能将它们定义为公共对象。我在一个名为“varstats”的类中有一个名为“makeTextBox(...)”的函数,这就是函数:

public static void makeTextBox(Panel pnlMain, int offsetTop, int offsetRight, string strName = "")
    
        TextBox txt = new TextBox();
        txt.Name = strName;
        txt.Parent = pnlMain;
        txt.AutoSize = true;
        txt.Width = (pnlMain.Width - 9 * defdis) / 3; //defdis is a public int and means default distance
        txt.Location = new Point(pnlMain.Width - txt.Width - defdis - offsetRight - 3, offsetTop + defdis);
    

这是我在表单加载中的主要表单代码:

 varstats.makeTextBox(pnlMain, 0, 0, "txtCustName");

此功能工作正常 (:D),我可以在面板中看到 TextBox,但是如何访问 TextBox?例如,在另一种形式中,我需要读取 TextBox 的文本属性并将其保存到我的数据库中?如何做到这一点?

请注意,我无法在类的标题中定义它们,因为我想使用 for 或 while 创建太多对象,并且在某些情况下我想删除它们并创建一些其他对象。

【问题讨论】:

【参考方案1】:

最简单的方法是从您的方法中返回文本框,然后使用它:

// return is changed from void to TextBox:
public static TextBox makeTextBox(Panel pnlMain, int offsetTop, int offsetRight, string strName = "")

    TextBox txt = new TextBox();
    txt.Name = strName;
    txt.Parent = pnlMain;
    txt.AutoSize = true;
    txt.Width = (pnlMain.Width - 9 * defdis) / 3; //defdis is a public int and means default distance
    txt.Location = new Point(pnlMain.Width - txt.Width - defdis - offsetRight - 3, offsetTop + defdis);

    // return the textbox you created:
    return txt;

现在您可以将方法的返回值分配给变量,并以任何您想要的方式使用它:

TextBox myTextBox = varstats.makeTextBox(pnlMain, 0, 0, "txtCustName");

// for example, change the text:
myTextBox.Text = "Changed Text";

【讨论】:

这是个好主意,但我有另一个名为 preparePanel 的函数,这个函数使太多不同类型的控件(TextBox、Label、DataGridView、...),这个函数使用函数 makeLabel和....我应该在preparePanel 函数中返回一组不同的控件。有可能有这样的数组吗? 我找到了答案 (Here)。谢谢您的回答。 :)

以上是关于如何访问用c#中的函数创建的对象的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个可以操作同一类的多个对象的函数,访问 C++ 中的私有属性?

如何访问命名空间中的函数

如何在c#中访问另一个类中的一个类的私有函数?

如何使用 C# 中的 System.Xml.Serialization 使对象不可变但可序列化?

C#高级编程

C#访问修饰符