Я создал приложение, которое взаимодействует с машиной в 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 .. Как я могу изменить этот код ??. это функция вызова функции неправильно?
'.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(). Тогда другие формы могли бы получить доступ к этому значению из любого места. –
Можете ли вы показать пример? – user3575807
Может быть только один экземпляр класса Form1 *. Поэтому воспользуйтесь этим и добавьте статическое свойство 'Instance' в Form1. Задайте его в конструкторе 'this'. Теперь вы можете просто написать Form1.Instance.SerialPortValueUpdated (foo); –