Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив из объектов, доступ к нему из функций/методов 
V
    Опции темы
Nitronka
Дата 2.5.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 16.4.2008
Где: Казань

Репутация: нет
Всего: нет



Работаю с формой,в этом же классе выполняю все вычисления.
Суть в том,что у меня есть массив объектов(класс сам определяю)
Как я решил поступить:
-создал поле для класса формы:
Код

 private Comp[] arr = new Comp[Size];

-есть две кнопки,в обработчики которых и записаны основные алгоритмы
Код

 private void button1_Click(object sender, EventArgs e)
{
//некоторый код
 Comp[] arr = new Comp[Size];
//далее производится заполнение этого массива, согласно алгоритму
//и тут же вывод на форму,с помощью классов библиотеки ZedGraph

если нажимается вторая кнопка,ВСЁ тоже самое,кроме алгоритма для заполнения.
Теперь самое интересное:
-существует третья кнопка,нажатие на которую должно определённым образом обрабатывать полученый в результате вышеописанных действий массив Comp[] arr, и после обработки также выводить на форму уже обработанные данные.
В обработчике для этой кнопки я сразу обращаюсь к нашему массиву:
примерно так,и в таком духе
Код

 double min1 = arr[0].par1;
 double min2 = arr[0].par2;

В итоге,при нажатии на третью кнопку,Вижала начинает громко ругаться:
"Additional information: Object reference not set to an instance of an object."
и указывает на строчку  в обработчике третьей кнопки:
Код

 double min1 = arr[0].par1;

Как лучше мне организовать множественный доступ к этому самому массиву arr,в чём мои ошибки,как решить указанные проблемы????
Заранее огромная благодарность!!!!!
PM MAIL   Вверх
1stain
Дата 2.5.2008, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 3
Всего: 40



шаг 1: в обработчике button3_Click первой строкой поставить:
Код

if(arr == null || arr.Length == 0 )
{
   MessageBox.Show("Press button1 at first.");
   return;
}


шаг 2: Button3 по умолчанию enabled = false. 
В обработчике button1_Click последней строкой поставить button3.enabled = true.


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
Nitronka
Дата 2.5.2008, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 16.4.2008
Где: Казань

Репутация: нет
Всего: нет



1stain, исправил всё,как ты сказал.Результат анологичный:
user posted image

Мне кажется,что вся проблема именно с массивом arr.
Именно из процедуры для обработки события button3_click нету доступа к массиву!!!!
Какие ещё есть варианты?
PM MAIL   Вверх
vponomarov
Дата 3.5.2008, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 2
Всего: 12



проблема в том, что массив arr у тебе создается при создании формы, но нигде не заполняется. вот студия и ругается
Код

private void button1_Click(object sender, EventArgs e)
{
//некоторый код
 Comp[] arr = new Comp[Size];

в последней строчке ты определяешь локальную переменную с таким же именем, что и член класса и соответственно с членом формы arr никаких манипуляций не происходит smile 
нужно писать как минимум так:
Код

private void button1_Click(object sender, EventArgs e)
{
//некоторый код
arr = new Comp[Size];

но так получится, что вызвав второй метод ты убьешь все данный, который сгенерил первый.
лучше всего, по-моему, написать методы, которые будут возвращать Comp[] и вызывать их при нажатии кнопок


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
Nitronka
Дата 4.5.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 16.4.2008
Где: Казань

Репутация: нет
Всего: нет



Цитата(vponomarov @  3.5.2008,  00:11 Найти цитируемый пост)
лучше всего, по-моему, написать методы, которые будут возвращать Comp[] и вызывать их при нажатии кнопок

А как это организовать?))
....я уже начал подумывать над тем,чтобы при генерации данных записывать их в файл,
затем при вызове других методов читать из файла))....
PM MAIL   Вверх
vponomarov
Дата 4.5.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 2
Всего: 12



Цитата(Nitronka @  4.5.2008,  11:01 Найти цитируемый пост)
Цитата(vponomarov @  3.5.2008,  00:11 )
лучше всего, по-моему, написать методы, которые будут возвращать Comp[] и вызывать их при нажатии кнопок


А как это организовать?))

Код

private Comp[] method1()
{
Comp[] res=new Comp[Size];
//do some stuff
return res;
}

private Comp[] method2()
{
Comp[] res=new Comp[Size];
//do another stuff
return res;
}

private void button1_Click(object sender, EventArgs e)
{
arr=method1(); //хотя возможно нужно вообще отказаться от arr
}

private void button2_Click(object sender, EventArgs e)
{
arr=method2();
}

private void button3_Click(object sender, EventArgs e)
{
Comp[] arr1=method1();
Comp[] arr2=method2();
//do some stuff
}



--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
Nitronka
Дата 4.5.2008, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 16.4.2008
Где: Казань

Репутация: нет
Всего: нет



vponomarov, огромное человеческое тебе спасибо!! smile 
....а то бы так и начал реализовывать чтение из файла smile 
PM MAIL   Вверх
vponomarov
Дата 4.5.2008, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 2
Всего: 12



Nitronka, be my guest smile 


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.3840 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.