简体   繁体   中英

How pass a class instance from Form1 to UserControl correctly?

Hello I hope you can help me, I've been trying like more than 10 days to solve this problem.

I have a Form Application with 1 usercontrol and 1 Class and need use my class instance created in Form1 inside the UserControl1. (With Form1 to Form2 it's works fine)

Class CMensaje:

namespace WindowsFormsAppInstanciarClaseEnControl
{

public class CMensajes
{
    private string mensaje;

    public CMensajes()
    {

    }

    public string Mensaje { get => mensaje; set => mensaje = value; }
 }
}

UserControl1:

namespace WindowsFormsAppInstanciarClaseEnControl
{
public partial class UserControl1 : UserControl
{
    CMensajes mensajito;

    public UserControl1(CMensajes mensa)
    {
        InitializeComponent();
        mensajito = mensa;
    }

    private void UserControl1_Load(object sender, EventArgs e)
    {

    }
    private void button1_Click(object sender, EventArgs e)
    {
        label1.Text = mensajito.Mensaje;
    }
  }
}

Form1

namespace WindowsFormsAppInstanciarClaseEnControl
{

public partial class Form1 : Form
{
    CMensajes mensajito = new CMensajes();
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        mensajito.Mensaje = textBox1.Text;
        UserControl1 usercontrol1 = new UserControl1(mensajito);

    }
  }
}

The problem is that it's works but intermediately I start to get

The variable mensajito is either undeclared or was never assigned. When I open Form1 Design . When I do the same code with Form1 to Form2 everything perfect!!

Really I need to pass a instance of my class serialport but is the same Here I write only a test code to understand what could I do?

Thanks.

Error Screen when I try to open Form1.designer.cs

For me you should do this inside the User Control constructor:

public UserControl1(CMensajes mensa)
{
  InitializeComponent();
  mensajito = new CMensajes();
  mensajito = mensa;
}

Haven't got a machine in front of me to test this but at the risk of sounding silly, try adding a default constructor to your user control.

public UserControl1()
{ 
    InitializeComponent();
}

Or try moving the instantiation of your class inside the Form constructor.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM