C# 无法访问类中的对象

本文关键字:对象 访问 | 更新日期: 2023-09-27 17:56:47

我正在尝试从类访问对象TextBox。我尝试使用构造函数,但没有任何反应。它一直在工作,直到我添加面板并添加更多表单。

加载我的表单的主窗体:

public partial class MenuForm : Form
{
    public MenuForm()
    {
        InitializeComponent();
    }
    ConfigForm Config = new ConfigForm();
    GeneralForm General = new GeneralForm();
    private void Menu_Load(object sender, EventArgs e)
    {
        //Load of Config Form
        Config.MdiParent = this.MdiParent;
        Config.Show();
       //Load of General Form
        General.Show();
        General.TopLevel = false;
        Config.Controls["panel1"].Controls.Add(General);
     }
}

这是我的配置表单:

public partial class ConfigForm : Form
{
    private ConfigFormHelper confighelper = null;
    private GeneralFormHelper generalhelper = new GeneralFormHelper();
    public ConfigForm()
    {
        InitializeComponent();
    }
    private void comboTemplate_SelectedIndexChanged(object sender, EventArgs e)
    {
        generalhelper.LoadTemplate();
    }
}

这是我的一般助手类:

class GeneralFormHelper
{
    GeneralForm generalform2 = new GeneralForm();
    public void LoadConfig()
    {
        this.generalform2.txtDSN1.Text = "test";
    }
}

没有错误,但txtDSN1没有得到"测试"文本。

txtDSN1位于public修饰符上。

C# 无法访问类中的对象

这将是

您使用方法GetGeneralForm()GeneralFormHelper

 class GeneralFormHelper
    {
        GeneralForm generalform2;
        public void GetGeneralForm(GeneralForm g)
        {
          this.generalform2 = g;
        }
        public void LoadConfig()
        {
          this.generalform2.txtDSN1.Text = "test";
        }
    }

这将是您的"配置表单类:

public partial class ConfigForm : Form
{
    private ConfigFormHelper confighelper = null;
    private GeneralFormHelper generalhelper;

    public ConfigForm(GeneralForm g) /* your Constructor get the General */
    {
        this.generalhelper = g;
        InitializeComponent();
    }
    private void comboTemplate_SelectedIndexChanged(object sender, EventArgs e)
    {
        generalhelper.LoadTemplate();
    }
}

最后是你的MenuForm课:

public partial class MenuForm : Form
{
    public MenuForm()
    {
        InitializeComponent();
    }
    GeneralForm General = new GeneralForm();
    ConfigForm Config = new ConfigForm(General); /* you send General */
    private void Menu_Load(object sender, EventArgs e)
    {
        //Load of Config Form
        Config.MdiParent = this.MdiParent;
        Config.Show();
       //Load of General Form
        General.Show();
        General.TopLevel = false;
        Config.Controls["panel1"].Controls.Add(General);
     }
}

GeneralFormHelper 的这个 LoadConfig 函数永远不会被调用。

public void LoadConfig()
{
this.generalform2.txtDSN1.Text = "test";
}

ConfigForm 中的这段代码调用 LoadTemplate 而不是 LoadConfig

private void comboTemplate_SelectedIndexChanged(object sender, EventArgs e)
{
    generalhelper.LoadTemplate();
}

所以我想你的第一个问题只是一个错字,你只需要匹配 LoadConfig 或 LoadTemplate。

第二个问题是,只有在引发 SelectedIndexChanged 事件时才会调用 LoadTemplate(或 LoadConfig)。因此,在此之前,您将不会获得"测试"文本。

如果你想

从一个类中获取对象,你需要这样做。

     在类中:使用System.Windows.Forms;    命名空间 getObjectFromaClass    {    类 1    {       公共静态文本框 txt1 = 新文本框();        public void getText()        {            尝试            {                TXT1.文本 ="这是我的文本";            }            捕获(异常 er)            {                字符串 x = er。消息;            }        }    }     }在表单中:    命名空间 getObjectFromaClass    {    公共分部类 表格 1 : 表格    {        Class1 cls1 = new Class1();        公共表单1()        {            文本框1=类1.txt1;            初始化组件();        }        private void Form1_Load(Object sender, EventArgs e)        {            cls1.getText();            textBox1.Text = Class1.txt1.Text;        }    }     }