Как правильно передать экземпляр класса из Form1 в UserControl? - PullRequest
0 голосов
/ 30 ноября 2018

Здравствуйте, я надеюсь, что вы можете мне помочь. Я пытался решить эту проблему более 10 дней.

У меня есть приложение формы с 1 usercontrol и 1 Class, и мне нужно использовать экземпляр моего класса, созданный в Form1 внутри UserControl1.(С 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.Когда я делаю тот же код с Form1 до Form2 все идеально !!

На самом деле мне нужно передать экземпляр моего класса serialport, но то же самое. Здесь я пишу только тестовый код, чтобы понять, что я могу сделать?

Спасибо.

Экран ошибки при попытке открыть Form1.designer.cs

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

У меня нет машины для проверки этого, но есть риск, что вы будете звучать глупо, попробуйте добавить конструктор по умолчанию в свой пользовательский элемент управления.

public UserControl1()
{ 
    InitializeComponent();
}

Или попробуйте переместить экземпляр вашегокласс внутри конструктора Form.

0 голосов
/ 30 ноября 2018

Для меня вы должны сделать это внутри конструктора User Control:

public UserControl1(CMensajes mensa)
{
  InitializeComponent();
  mensajito = new CMensajes();
  mensajito = mensa;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...