2015-09-16 3 views
0

Я создал приложение, которое взаимодействует с машиной в C# (приложение Windows). Он содержит более 10 форм. Этот проект нуждается в общении с машиной. Здесь я использую связь по последовательному порту. Form1 используется для связи. то есть принимаемое событие данных последовательного порта присутствует только в этой форме. В то же время мне приходится отправлять данные и на машину. Для этой цели существует функция в форме1. Я должен отправить данные из всех форм, таких как form2,3,4,5..etc, когда это необходимо. Для этого я создал объект form1 и назвал функцию отправки с помощью этого объекта .. но я не могу выполнить это.This.owner is Null

код в Form1 для передачи данных в последовательный порт

public void SerialPortValueUpdated(byte[] array) 
    { 

     serialPort1.Write(array, 0, lm); 

    } 

в Form3, form1 функции вызова следующего

((Form1)this.Owner).SerialPortValueUpdated(ARRAY); 

Но когда я иду form2 и вернуться т form3, это .Owner is empty .. Как я могу изменить этот код ??. это функция вызова функции неправильно?

+0

'.Owner' бы только что-то если вы установите его явно, подобно методу Show(): 'f3.Show (this); // изнутри Form1'. Если есть только ** один экземпляр Form1, вы можете найти его в [Application.OpenForms] (https://msdn.microsoft.com/en-us/library/system.windows.forms.application .openforms (v = vs.110) .aspx). Другим вариантом было бы создание «статического» элемента в Form1 для хранения ссылки на себя; инициализируйте это в событии Load(). Тогда другие формы могли бы получить доступ к этому значению из любого места. –

+0

Можете ли вы показать пример? – user3575807

+0

Может быть только один экземпляр класса Form1 *. Поэтому воспользуйтесь этим и добавьте статическое свойство 'Instance' в Form1. Задайте его в конструкторе 'this'. Теперь вы можете просто написать Form1.Instance.SerialPortValueUpdated (foo); –

ответ

0

Вот как реализовать подход static.

Объявите статический член в Form1 и инициализировать его в конструкторе:

public partial class Form1 : Form 
{ 

    public static Form1 Instance = null; 

    public Form1() 
    { 
     InitializeComponent(); 
     Form1.Instance = this; 
    } 

    public void SerialPortValueUpdated(byte[] array) 
    { 

    } 

} 

Теперь из любой другой формы, вы можете использовать Form1.Instance:

Form1.Instance.SerialPortValueUpdated(...);