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
修饰符上。
这将是
您使用方法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; } } }