c#Windows窗体';对象引用未设置为对象的实例';
我是来问的,因为我是新使用windows窗体的,我需要一些帮助 我有一个Windows窗体项目,包含2个窗体。主窗体和内部窗体 我正在尝试从InnerForm访问MainForm中的TableLayoutPanel,以便在此TableLayoutPanel中添加新行,并在InnerForm中执行一些操作 我有下一个代码: 主要表格:c#Windows窗体';对象引用未设置为对象的实例';,c#,.net,winforms,C#,.net,Winforms,我是来问的,因为我是新使用windows窗体的,我需要一些帮助 我有一个Windows窗体项目,包含2个窗体。主窗体和内部窗体 我正在尝试从InnerForm访问MainForm中的TableLayoutPanel,以便在此TableLayoutPanel中添加新行,并在InnerForm中执行一些操作 我有下一个代码: 主要表格: public partial class MainForm : Form { public MainForm() { Initi
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
TableLayoutPanel panel = tableLayoutPanel1;
panel.ColumnCount = 4;
panel.RowCount = 1;
panel.RowStyles.Add(new RowStyle(SizeType.AutoSize, 0));
panel.Controls.Add(new Label() { Text = "Tag/ID" }, 0, 0);
panel.Controls.Add(new Label() { Text = "Tipo" }, 1, 0);
panel.Controls.Add(new Label() { Text = "Acción" }, 2, 0);
panel.Controls.Add(new Label() { Text = "Ejecutar" }, 3, 0);
}
private void AddInnerForm(string url)
{
var inner = new InnerForm(url)
// more code
}
public void agregarRow(ConsoleMessageEvents args){
// some action with tableLayoutPanel1
}
}
private void AddInnerForm(string url)
{
var inner = new InnerForm(url, this)
// more code
}
内部形式:
public partial class InnerForm : UserControl
{
MainForm theMain;
public InnerForm(MainForm main)
{
theMain = main;
}
public InnerForm(string url)
{
InitializeComponent();
// more code
}
private void OnBrowserConsoleMessage(object sender, ConsoleMessageEventArgs args)
{
theMain.agregaRow(args);
}
}
private void OnBrowserConsoleMessage(object sender, ConsoleMessageEventArgs args)
{
**theMain.agregaRow(args)**;
}
但是,当我调试程序时,会出现以下错误:
An unhandled exception of type 'System.NullReferenceException' occurred in Project.exe
Additional information: Object reference not set to an instance of an object.
在InnerForm的这一行中:
public partial class InnerForm : UserControl
{
MainForm theMain;
public InnerForm(MainForm main)
{
theMain = main;
}
public InnerForm(string url)
{
InitializeComponent();
// more code
}
private void OnBrowserConsoleMessage(object sender, ConsoleMessageEventArgs args)
{
theMain.agregaRow(args);
}
}
private void OnBrowserConsoleMessage(object sender, ConsoleMessageEventArgs args)
{
**theMain.agregaRow(args)**;
}
这里的问题是什么?从您的代码可以很容易地看到您正在初始化此构造函数中的主变量:
public InnerForm(MainForm main)
{
theMain = main;
}
但是在您的代码中,var-inner=new-InnerForm(url)
您使用的是另一个未初始化此变量的构造函数,因此主被保留为null
,您在尝试访问其方法时会遇到异常
public InnerForm(string url)
{
InitializeComponent();
// more code
}
这应该可以解决问题。字段theMain未初始化,您还需要在每个构造函数中调用InitializeComponenets来创建子控件
public partial class InnerForm : UserControl
{
MainForm theMain;
public InnerForm(MainForm main)
{
InitializeComponent();
theMain = main;
}
public InnerForm(string url, MainForm mainForm)
{
this.theMain = mainForm;
InitializeComponent();
// more code
}
private void OnBrowserConsoleMessage(object sender, ConsoleMessageEventArgs args)
{
theMain.agregaRow(args);
}
}
主要形式如下:
private void AddInnerForm(string url)
{
var inner = new InnerForm(url, this)
// more code
}
可能的重复可能的重复