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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2014, 14:18   #1
romasimeiz
 
Регистрация: 05.03.2014
Сообщений: 6
По умолчанию Как правильно использовать переменные?

Добрый день! Объясните мне пожалуйста, как правильно поступать в данной задаче.

По нажатию кнопки я делаю некоторые действия, для которых естественно объявляю переменные.

Код:
void Button1Click(object sender, EventArgs e)
		{
   IPAddress address = IPAddress.Parse(tbIP.Text);
   int port = Convert.ToInt32(tbPort.Text);
   TcpListener slaveTcpListener = new TcpListener(address, port);
   slave = ModbusTcpSlave.CreateTcp(1, slaveTcpListener);
   DataStore data = new DataStore();
     // Дальше некоторые действия с этими переменными. 

			}

void DgVCellParsing(object sender, DataGridViewCellParsingEventArgs e)
		{
                             // Событие, по которому я хочу использовать переменную slave. Чтобы её использовать здесь, её нужно объявить глобально
		}

Объявляю эту переменную глобально :

Код:
public partial class MainForm : Form
	{
		ModbusSlave slave;
		public MainForm()
		{
Если делать так, то при срабатывании DgVCellParsing вылетает Exeption:

"Ссылка на объект не указывает на экземпляр объекта."

Делал и через статические методы, второй день бьюсь, не могу врубиться в сам принцип взаимодействия экземпляров, объектов. В каком случае нужно создавать static а в каком нет..
Прошу прощения за глупые вопросы, неделю пытаюсь писать на c#...
Спасибо!
romasimeiz вне форума Ответить с цитированием
Старый 05.03.2014, 14:50   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а объект вы создали до того как вызывается событие?

проверьте через точки останова в отладке.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.03.2014, 15:51   #3
romasimeiz
 
Регистрация: 05.03.2014
Сообщений: 6
По умолчанию

Понял.
Делал так :

Код:
public partial class MainForm : Form
	{
		IPAddress address = IPAddress.Parse(tbIP.Text);
	    int port = Convert.ToInt32(tbPort.Text);
		TcpListener slaveTcpListener = new TcpListener(address, port);
		ModbusSlave slave  = ModbusTcpSlave.CreateTcp(1, slaveTcpListener);
		public MainForm()
		{
Подчёркивает текст боксы tbIP.Text и tbPort.Text, также переменные адреса порта и TCP клиента, с текстом : "Инициализатор поля не может обращаться к нестатическому полю, методу или свойству"

После объявил только slave вот так :

Код:
	ModbusSlave slave  = new ModbusSlave();
Пишет, что невозможно создать экземпляр абстрактного класса или интерфейса.
Помогите...
romasimeiz вне форума Ответить с цитированием
Старый 05.03.2014, 16:03   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я не знаю что это за событие, но вы уверены что оно должно отрабатывать когда соединения нет?
может добавить проверку на null у slave перед использованием кода метода?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.03.2014, 16:17   #5
romasimeiz
 
Регистрация: 05.03.2014
Сообщений: 6
По умолчанию

Код:
void DgVCellParsing(object sender, DataGridViewCellParsingEventArgs e)
		{
                             // Событие, по которому я хочу использовать переменную slave. Чтобы её использовать здесь, её нужно объявить глобально
		}
а как проверить slave на null в этом событии, если он вне зоны видимости?
у него есть свойства, в которые можно записывать данные.
первый раз я по нажатию кнопки предоставляю возможность считать у меня данные из datagridView. Но получается, что данные всегда будут одни и те же. А чтобы master, который тянет данные, получал то, что я ввёл в datagridview уже после установки соединения..
т.е. хотел по событию datagridview присвоить slave новые данные...
может я что то неправильно делаю или не так мыслю?

вот полный код:

Цитата:
void Button1Click(object sender, EventArgs e)
{
// объявляю нужные переменные
IPAddress address = IPAddress.Parse(tbIP.Text);
int port = Convert.ToInt32(tbPort.Text);
TcpListener slaveTcpListener = new TcpListener(address, port);
slave = ModbusTcpSlave.CreateTcp(1, slaveTcpListener);
//считываю из таблицы данные и записываю их в slave
for (int i=0; i<dgV.Rows.Count-1; i++)
{
slave.DataStore.InputRegisters[Convert.ToInt32(dgV[0,i].Value)] = (ushort)Convert.ToUInt16(dgV[1,i].Value);

}
slave.Listen(); //запускаю соединение на прослушку.

// после запуска прослушки, надо добраться опять к slave, чтобы записать новые данные.
}
Хотел это сделать по событию :

Код:
void DgVCellParsing(object sender, DataGridViewCellParsingEventArgs e)
		{
			for (int i=0; i<dgV.Rows.Count-1; i++)
			            { 
				slave.DataStore.InputRegisters[Convert.ToInt32(dgV[0,i].Value)] = (ushort)Convert.ToUInt16(dgV[1,i].Value);
				
			            } 
		}
Буду благодарен за любой совет и помощь. Второй день застрял на одном и том же...
romasimeiz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно использовать MySQL EndoCrinolog PHP 6 24.08.2012 21:08
Как использовать переменные в ссылках на ячейки Klamm Microsoft Office Excel 6 14.04.2012 01:44
Как вместо статических локальных переменных использовать переменные объявленные в namespace? Oleg_SK Общие вопросы C/C++ 25 05.07.2010 18:46
как правильно использовать OR AND mpdasa Общие вопросы Delphi 2 19.01.2010 17:30
Как правильно использовать переменные в процедурах nikolai_P Microsoft Office Excel 22 15.05.2008 13:15