0 / 0 / 0
Регистрация: 24.01.2016
Сообщений: 25
1

Переменная объявленная на другой форме

27.02.2016, 22:25. Показов 608. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, Господа.

Начинаю работать с C#
Программа должна открывать ком-порт на второй форме, а закрывать порт на первой(главной).
не понимаю как сделать так, чтобы код работал.
Есть две формы. Во второй форме объявлена переменная(Порт) "static SerialPort Port1;" в этой же форме Порт открывается при нажатии на кнопку. Порт должен закрываться при нажатии на кнопку на Первой форме "port1.Close();", однако это подчеркнуто красным


вот код главной формы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Windows.Forms;
using System.IO.Ports;
 
namespace Example1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void BTNForm2Show_Click(object sender, EventArgs e)
        {
                Form2 f = new Form2(); // создаем форму             
                f.ShowDialog(); // показываем   2 форму         
        }
 
        private void BTNDisconnect_Click(object sender, EventArgs e)
        {
            port1.Close();   // вот это строка подчеркивается красным, хотя port1 объявлена в public на другой форме
        }
    }
}
код второй формы:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Windows.Forms;
using System.IO.Ports;
 
namespace Example1
{
    public partial class Form2 : Form
    {
        static SerialPort Port1;
        public Form2()
        {
            InitializeComponent();
            
        }
 
        private void btnConnect_Click(object sender, EventArgs e)
        {
            string portname1 = comboBoxPort.SelectedItem.ToString();
            SerialPort port1 = new SerialPort("Com1", 9600, Parity.None, 8, StopBits.One); 
            port1.Open();
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2016, 22:25
Ответы с готовыми решениями:

Не видна переменная, объявленная в Form1
Здравствуйте. Есть Form1 и класс Objects: public partial class Form1 : Form { ...

Переменная, объявленная в блоке Try - Catch видна не для всего метода
class Program { static void Main() { BinaryWriter dataOut; ...

Переменная, объявленная в цикле "не существует в текущем контексте"
Подскажите не могу разобраться,как вывести переменную ай для дальнейшего поиска. using System;...

Не видна переменная, объявленная в main
Пишет, что переменная numOne не объявлена, хотя я ее объявил в main. #include <stdio.h> void...

3
91 / 90 / 37
Регистрация: 05.08.2011
Сообщений: 428
28.02.2016, 00:31 2
dinar1990, хоть она там и объявлена в public так, как сделали Вы работать точно не будет. нужно как минимум писать f.port1.Close(); Когда сделаете так, будет всё равно подчеркнуто, потому что переменная f объявлена в другом методе. И тут уже нужно думать, как Вам лучше сделать.
0
Эксперт .NETАвтор FAQ
10409 / 5139 / 1824
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
28.02.2016, 00:47 3
dinar1990, Не храните ком порт в формах. Сделайте отдельный класс, который будет отвечать за коммуникацию с прибором, обзовите его Device. Сделайте его статическим (обычно этого лучше не делать, но поскольку прибор на ком-порту может быть только один, то можно использовать статический класс):
C#
1
2
3
4
5
6
7
8
9
10
    public static class Device
    {
        public static SerialPort Port { get; private set; }
 
        public static void Open(string portName)
        {
            Port = new SerialPort(portName, 9600, Parity.None, 8, StopBits.One);
            Port.Open();
        }
    }
И потом можете его открывать, закрывать где угодно, из любой формы:
C#
1
2
3
4
        private void BTNDisconnect_Click(object sender, EventArgs e)
        {
            Device.Port.Close();
        }
C#
1
2
3
4
5
        private void btnConnect_Click(object sender, EventArgs e)
        {
            string portname1 = comboBoxPort.SelectedItem.ToString();
            Device.Open(portname1);
        }
1
0 / 0 / 0
Регистрация: 24.01.2016
Сообщений: 25
28.02.2016, 16:58  [ТС] 4
Storm23, спасибо, так и сделал, работает.
0
28.02.2016, 16:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.02.2016, 16:58
Помогаю со студенческими работами здесь

Почему компилируется не объявленная переменная в шаблоне?
Нашел на просторах интернета такой код template<typename T> T foo(int x, T ololo) { a = 5;...

Почему переменная объявленная static работает не корректно?
Переменная j=25 я её обозначил как static int j; и присвоил число 25. Значит эта переменная должна...

Нажав кнопку на одной форме поменять свойство другой кнопки на другой форме
Здравствуйте. Только начал изучать QT и вот возник вопрос практической направленности. Нужно: нажав...

Одна кнопка на одной форме, активирует другую на другой форме
Нажатием на кнопку активирует другую кнопку на другой форме не совсем понимаю

Поле со списком в одной форме преобразовать в переключатель в другой форме
Добрый вечер! Можно ли реализовать в форме 1 есть данные поле со списком , а необходимо в другой...

Добавление текста из TextBox на одной форме в ComboBox на другой форме
Добрый вечер. У меня небольшая проблема. Я сделал кнопку "Настройки" что бы открывался User Form...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru