Вызов нестатического c void-метода из другого класса в c# - PullRequest
0 голосов
/ 07 мая 2020

Привет, у меня есть код, написанный в классах Form1 и Form2. Я хочу вызвать метод openkindForm () из Form2. Я перепробовал все найденные решения. У меня есть этот в настоящий момент, который не работает, он дает мне System.NullReferenceException. Не знаю, почему не работает. Я пробовал это так долго, но что бы я ни делал, это как-то не сработает. Буду благодарен за ответ. С уважением

Первый класс

   using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;



namespace FBDP00
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
          submenupanel.Visible = false;
    }   

        private void funktionenSM_Click(object sender, EventArgs e)
        {
            switch (submenupanel.Visible)
            {
                case true:
                    submenupanel.Visible = false;
                    break;

                case false:
                    submenupanel.Visible = true;
                    break;

            }   
        }


        public void neuepruefungSm_Click(object sender, EventArgs e)
        {
            submenupanel.Visible = false;
            openkindForm(new Form2());          
        }


        public Form activeForm = null;
        public   void openkindForm(Form childForm)
        {
           if (activeForm != null)
            {
                activeForm.Close();
            }

            activeForm = childForm;
            childForm.TopLevel = false;

            childForm.FormBorderStyle = FormBorderStyle.None;
            childForm.Dock = DockStyle.Fill;
            backgroundPanel.Controls.Add(childForm);
           childForm.Show();

        }            
    }
}

Класс 2

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static FBDP00.Form1;





namespace FBDP00
{

public partial class Form2 : Form
{
    public Form1 testform;

    public Form2()
    {
        InitializeComponent();
    }

    private void button3_Click(object sender, EventArgs e)
    {

    }

    private void button2_Click(object sender, EventArgs e)
    {

    }

    private void funktionenSM_Click(object sender, EventArgs e)
    {

    }

    public void baukontrolleb_Click(object sender, EventArgs e)
    {

        testform.openkindForm(new Form3());
    }
   }
}

1 Ответ

0 голосов
/ 07 мая 2020

В Form2 вы определили переменную для Form1 (testform), но вы ее нигде не устанавливаете. Вот почему вы получаете ошибку ссылки Null, когда пытаетесь его использовать, потому что это null!

Итак, когда вы создаете свою Form2, вам нужно установить это значение. В вашем случае, возможно, в таком конструкторе.

public Form1 testform;

private Form2(Form1 f1)
{
    InitializeComponent();
    testform = f1;
}

Затем назовите его так:

public void neuepruefungSm_Click(object sender, EventArgs e)
{
    submenupanel.Visible = false;
    openkindForm(new Form2(this));
}

Однако, глядя на ваш метод openkindForm, мне кажется, что это действительно не имеет ничего общего с Form1 и не имеет общих переменных, поэтому не должен входить в этот класс.

Вы должны либо сделать это stati c (вместе с переменной activeForm), либо вместо этого сделать его класс Singleton . Но, конечно, это должен быть отдельный класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...