Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2015, 22:19   #1
a1000
 
Регистрация: 08.12.2015
Сообщений: 3
По умолчанию Как изменить цвет элемента из другого класса

Создаю некую систему телеметрии и телеуправления. Общение происходит через COM port. Для данного дела надо создать графический интерфейс. Не смотря на очень начальные познания в этом деле, решил реализовать это самостоятельно. С премудростями общения через COM port разобрался, но споткнулся на таком вопросе. На MainWindow.xaml создан квадрат, назвал я его "Т1". В зависимости от поступающего через COM port сообщения этот квадрат должен менять цвет заливки. Для репетиции создал такое

Код:
using System.Windows;
using System.Windows.Media;
 
namespace shema01
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        COM_port comm = new COM_port();
        public MainWindow()
        {
            InitializeComponent();
         }
         .............................................
         .............................................  
              
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            T1.Fill = Brushes.Green;
        }
        ..............................................
        ..............................................   
        }
Как и положено, при нажатии на кнопку button1, квадрат Т1 заливается зелёным цветом. Но взаимодействие с COM port организовано в отдельном классе COM_port.cs. Пробую реализовать изменение цвета заливки квадрата Т1 при поступлении в COM_port сообщения "MVT1"
Код:
using System.IO.Ports;
using System.Windows.Controls;
using System.Windows;
using System.Windows.Media;
using System.Threading;
 
namespace shema01
{
    
    class COM_port
    {
        SerialPort serialPort1 = new SerialPort();
        serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
      ............................................
      ............................................
     public void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            Thread.Sleep(100);
            string Otvet = "";
            Otvet = serialPort1.ReadExisting();
 
            
            if (Otvet.Contains("MVT1"))
            {
                T1.Fill = Brushes.Green;
 
            }
            serialPort1.DiscardInBuffer();
        }
Естественно, на меня ругается "Имя "Т1" не существует в текущем контексте". Понимаю, что тут ошибка. Класс COM_port.cs даже не подозревает, что существует MainWindow и тем более какой-то квадрат "Т1". Скорее всего в классе COM_port.cs надо как-то объявить объект "Т1". Подскажите как это сделать.
a1000 вне форума Ответить с цитированием
Старый 08.12.2015, 22:29   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вы в курсе как классы (и экземпляры класса) работают?

T1 это поле в классе MainWindow, поэтому если б оно было public, то можно было б передать экземпляр этого класса (например с помощью this) и обращаться к нему (myObj.T1).

Но оно не public, поэтому так не получится, можно создать public функции работающие с T1 (или просто возвращающую его) и их вызывать.

А лучше просто сделать событие (event) во втором классе и подписаться на него.

Или передать второму классу функцию (Action или delegate) делающую что надо в первом, чтоб он ее вызывал.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 08.12.2015 в 22:32.
Alex11223 вне форума Ответить с цитированием
Старый 09.12.2015, 00:02   #3
a1000
 
Регистрация: 08.12.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Вы в курсе как классы (и экземпляры класса) работают?
Скажу честно - нет. Если можно, пример кода реализующего ваши советы.
a1000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить значение JProgressBar из другого класса Buckac0 Общие вопросы по Java, Java SE, Kotlin 3 19.05.2014 11:53
Как изменить цвет perun47 Microsoft Office Excel 6 17.06.2012 22:47
Изменить цвет элемента STATIC Dimarik Win Api 4 18.12.2011 20:06
Как с помощью JavaScript изменить цвет фона ячеек в таблице,так что бы можно было выбрать цвет из списка Gotessa JavaScript, Ajax 1 09.05.2009 16:05