如何将类实例从Form1正确传递给UserControl?

时间:2018-11-30 18:57:22

标签: c# .net class visual-studio-2017 user-controls

您好,希望您能对我有所帮助,我已经尝试了10多个天来解决此问题。

我有一个带有1个用户控件和1个类的表单应用程序,需要使用在UserControl1内在Form1中创建的类实例。 (使用Form1到Form2可以正常工作)

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);

    }
  }
}

问题是它可以正常工作,但是从中间开始我就得到了

变量mensajito是未声明的,或者从未分配。当我打开Form1 Design时。当我用Form1Form2做相同的代码时,一切都完美了!

真的,我需要传递类serialport的实例,但是是相同的。在这里,我只编写一个测试代码来了解我该怎么办?

谢谢。

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

2 个答案:

答案 0 :(得分:0)

对我来说,您应该在User Control构造函数中执行此操作:

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

答案 1 :(得分:0)

我面前没有机器可以进行测试,但是冒着听起来很傻的风险,请尝试向用户控件中添加默认构造函数。

public UserControl1()
{ 
    InitializeComponent();
}

或者尝试在Form构造函数中移动类的实例。