Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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#Windows窗体';对象引用未设置为对象的实例';_C#_.net_Winforms - Fatal编程技术网

c#Windows窗体';对象引用未设置为对象的实例';

c#Windows窗体';对象引用未设置为对象的实例';,c#,.net,winforms,C#,.net,Winforms,我是来问的,因为我是新使用windows窗体的,我需要一些帮助 我有一个Windows窗体项目,包含2个窗体。主窗体和内部窗体 我正在尝试从InnerForm访问MainForm中的TableLayoutPanel,以便在此TableLayoutPanel中添加新行,并在InnerForm中执行一些操作 我有下一个代码: 主要表格: public partial class MainForm : Form { public MainForm() { Initi

我是来问的,因为我是新使用windows窗体的,我需要一些帮助

我有一个Windows窗体项目,包含2个窗体。主窗体和内部窗体

我正在尝试从InnerForm访问MainForm中的TableLayoutPanel,以便在此TableLayoutPanel中添加新行,并在InnerForm中执行一些操作

我有下一个代码:

主要表格:

 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
    }
可能的重复可能的重复