Доступ к 1 сообщению из нескольких форм

У меня есть проект Visual Studio (для связи RS232) с несколькими формами, и я хочу получить доступ к одному и тому же SerialPort во всех моих формах.

Моя главная форма вызывает...

private SerialPort comport = new SerialPort()

Если я изменю его на public, смогу ли я получить доступ к этому SerialPort из всех моих окон, чтобы гарантировать чтение/запись на один и тот же порт?


person Nevets    schedule 29.01.2014    source источник


Ответы (1)


Это будет работать до тех пор, пока у других форм есть способ получить экземпляр основной формы. Одним из способов было бы передать this формам, когда вы создаете их из основной формы. Затем измените другие конструкторы форм, чтобы они принимали объект Form. Формы могут использовать этот объект для доступа к свойству comport:

// Main form
private void OpenSomeForm()
{
    SomeForm frm = new SomeForm(this);
    frm.Show();
}

// SomeForm
public class SomeForm
{
    private MainForm _mainForm;

    public SomeForm(MainForm mainForm)
    {
        InitializeComponent();

        _mainForm = mainForm;
    }

    private WriteToSerialPort()
    {
        _mainForm.comport.Write(/* stuff */);
    }
}
person itsme86    schedule 29.01.2014
comment
Под InitializeComponent(); вы написали _mainForm = mainForm. Что означает mainForm в правой части уравнения? Я получаю сообщение об ошибке mainForm является типом, но используется как переменная. - person Nevets; 30.01.2014
comment
Это имя параметра, переданного в конструктор. _mainForm — это поле класса. mainForm передается. Вероятно, это просто сбивает с толку, что имена настолько похожи, но это не обязательно. - person itsme86; 30.01.2014
comment
@Nevets Кстати, это также отличное место для использования синглтона. - person itsme86; 30.01.2014