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

Объект "item" не существует в текущем контексте

04.08.2012, 19:37. Показов 3976. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемый форумчане. Тут появилась маленькая проблема. Как-то раз, умирая со скуки, я достал студию, и начал кодить всякий бред. Потом, мне захотелось сделать что-то типа программы, как на кассах в больших магазинах (которая выводит номер, название, количество, цену, стоимость предмета). Но, поскольку у меня нет самого кассового аппарата, и пробивать штрих-коды мне нечем, я решил сделать маленькую панельку, в которой и нужно вписать номер предмета и количество.
И так, сначала я создал DataGridView1, с полями ID_Column (поле с номером), Item_Name(название), Price_Column(цена), quantity_column(количество), Cost_column(Стоимость).
Разузнав, как добавлять элементы в данную табличку, я принялся работать. (Не бейте тапками за, наверное, глупый подход, но по-другому я не придумал).
И так, нам же надо что-то выводить сюда? Надо. Значит, создадим класс, объекты которого и будут нашим товаром.
C#
1
2
3
4
5
 public class any_item {
       public int price;
       public int ID;
       public string Name;
    }
Так, класс есть. Отлично. Теперь что? Как же, создадим первый же предмет.
C#
1
2
3
4
5
6
7
8
9
10
11
12
 int it_quant; // это будет количество
        int it_ID; // это будет номер
        int item_cost; // это будет стоимость 
        public Form1()
        {
            
            InitializeComponent();
            any_item[] item = new any_item[1]; //создал массив объектов, пока-что, только из двух объектов
            item[0].price = 4; //Это будет цена нашего нового предмета
            item[0].ID = 1; // Это его номер
            item[0].Name = "Проверка"; //Это его имя
        }
Так, объект есть. Пойдем дальше. На панели есть поле для ввода номера предмета и его количества. Так же, есть кнопка, которая это все и выводит в таблицу.
C#
1
2
3
4
5
6
7
8
 public void addBTN_Click(object sender, EventArgs e)
        {
           
            it_ID = int.Parse(idTxtBox.Text); // Значение этого текст-бокса будет номером
            it_quant = int.Parse(quantTxtBox.Text); // Значение этого текст-бокса будет количеством
 dataGridView1.Rows.Add(item[it_ID].ID); //Выводим в таблицу, пока-что, только номер предмета            
itemPanel.Visible = false; // Скрываем эту панель
                   }
На радостях жму на компиляцию, и вижу... Вижу страшную ошибку.
"Элемент "item" не существует в текущем контексте"... Жалуется оно на эту строчку
C#
1
dataGridView1.Rows.Add(item[it_ID].ID);
Так вот, господа, подскажите глупому, что делать... Облазил весь гугл (точнее первые пять страниц), там кроме объявления переменных в циклах нету ничего толкового на эту тему...
Буду благодарен)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2012, 19:37
Ответы с готовыми решениями:

Не существует в текущем контексте
private void createIncAndOut() { if (E.Count > 0) { ...

Элемент не существует в текущем контексте
Добрый день. Дали задание сделать генератор тестов. Есть код на C#. Но везде пишет ошибки: элемент...

Переменная не существует в текущем контексте
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;...

Имя не существует в текущем контексте
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;...

18
29 / 27 / 4
Регистрация: 16.11.2011
Сообщений: 147
04.08.2012, 21:19 2
C#
1
any_item[] item = new any_item[1];
где писали эту строчку? в какой-то функции? тогда вынесите ее в класс как глобальную переменную

C#
1
2
3
any_item[] item; //это пишем в теле класса
 
item = new any_item[1]; //а это пишем там где вам нужно
0
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 13
05.08.2012, 09:12  [ТС] 3
Цитата Сообщение от AvtoCrack Посмотреть сообщение
где писали эту строчку? в какой-то функции? тогда вынесите ее в класс как глобальную переменную
Писал, как видно в первом посте, в Form1.

Цитата Сообщение от AvtoCrack Посмотреть сообщение
//а это пишем там где вам нужно
То есть, если мне нужно использовать его в событии нажатия кнопки, то там и объявлять?

Добавлено через 10 часов 3 минуты
Так, с этим разобрался) Просто, как я понял, я не правильно объявил массив? Теперь это выглядит так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
   int it_quant;
       int it_ID;
        int item_cost;
        public Form1()
        {
            InitializeComponent();
            any_item[] item;
            item = new any_item[1];
            item[0].price = 4;    
            item[0].ID = 1;
            item[0].Name = "Проверка";
                 }
Оно больше не жалуется, что элемента нет в контексте, все отлично...
Но появилась новая, страшная беда... Когда запускаю приложение, появляется ошибка, с указанием на строку
C#
1
item[0].price = 4;
В которой говорится
"Ссылка на объект не указывает на экземпляр объекта."
Так вот собственно, вопрос... Что делать?
0
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
05.08.2012, 09:16 4
Вы создали массив ссылок, но каждая ссылка в нем равна null, то есть ссылается в никуда.
Нужно создать объект на каждой позиции массива:
C#
1
2
3
4
5
6
            InitializeComponent();
            any_item[] item = new any_item[1];
            item[0] = new any_item();
            item[0].price = 4;    
            item[0].ID = 1;
            item[0].Name = "Проверка";
0
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 13
05.08.2012, 09:20  [ТС] 5
kolorotur, но тогда снова в событии нажатия кнопки оно не видит этот элемент, с той же ошибкой, что и в начале.
0
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
05.08.2012, 09:22 6
Массив сделайте полем класса.
0
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 13
05.08.2012, 09:24  [ТС] 7
kolorotur, тогда оно его не видит, где-бы я его не написал, даже в Form1.
Или я вас не правильно понял?
C#
1
2
3
4
5
6
 public class any_item {
       public int price;
       public int ID;
       public string Name;
       any_item[] item = new any_item[1];        
    }
Вы же это имели ввиду?
0
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
05.08.2012, 09:29 8
ну ты же создаешь итем с индексом 1
C#
1
 item = new any_item[1];
а значения пишешь в итем с индексом 0

C#
1
2
3
 item[0].price = 4;    
            item[0].ID = 1;
            item[0].Name = "Проверка";

думаю так прокатит

C#
1
2
3
4
5
6
InitializeComponent();
            any_item[] item = new any_item[0];
            item[0] = new any_item();
            item[0].price = 4;    
            item[0].ID = 1;
            item[0].Name = "Проверка";
0
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 13
05.08.2012, 09:32  [ТС] 9
hepper, извините конечно, но тут в тему был бы фейспальм...
Я объявляю массив, который состоит из двух элементов item[0], item[1], ибо счисление начинается с 0.
0
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
05.08.2012, 09:39 10
Цитата Сообщение от qnicolya Посмотреть сообщение
hepper, извините конечно, но тут в тему был бы фейспальм...
Я объявляю массив, который состоит из двух элементов item[0], item[1], ибо счисление начинается с 0.
да извиняюсь, не рассмотрел твои одинаковые определения. массив ты создал, потом надо создать конкретный элемент и добавить его в массив элементов.

вот так надо
C#
1
2
3
4
5
6
7
8
9
10
11
12
             any_item[] item; //массив
 
            any_item item1=new any_item(); //конкретный элемент
 
            item = new any_item[1];
 
 
            item1.price = 4;    
            item1.ID = 1;
            item1.Name = "Проверка";
 
            item[0] = item1;
и так тоже работает
C#
1
2
3
4
5
6
any_item[] item=new any_item[1];
            
            item[0]=new any_item();
            item[0].price = 4;    
            item[0].ID = 1;
            item[0].Name = "Проверка";
0
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 13
05.08.2012, 09:43  [ТС] 11
hepper, это не исправило проблему. Объект все равно не доступен в кнопке.
0
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
05.08.2012, 09:47 12
Цитата Сообщение от qnicolya Посмотреть сообщение
hepper, это не исправило проблему. Объект все равно не доступен в кнопке.
в кнопке надо такой же код сделать, создать конкретный элемент и занести его в гридю

п.с.
кстати добавить в строку одну ячейку нельзя, надо добавлять все ячейкит строки (т.е. строку целиком)
0
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
05.08.2012, 09:47 13
Цитата Сообщение от qnicolya Посмотреть сообщение
Вы же это имели ввиду?
Нет, массив ссылок должен быть полем класса Form1:

C#
1
2
3
4
5
6
7
8
9
10
any_item[] item = new any_item[1];
public Form1()
{
            InitializeComponent();
            
            item[0] = new any_item();
            item[0].price = 4;    
            item[0].ID = 1;
            item[0].Name = "Проверка";
}
Цитата Сообщение от qnicolya Посмотреть сообщение
Я объявляю массив, который состоит из двух элементов item[0], item[1]
Вы создаете массив из одного элемента, индекс которого - 0.
0
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 13
05.08.2012, 09:58  [ТС] 14
В общем, вот весь код
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        int it_quant;
       int it_ID;
        int item_cost;
        any_item[] item = new any_item[1];
        public Form1()
        {
            InitializeComponent();
 
            item[0] = new any_item();
            item[0].price = 4;
            item[0].ID = 0;
            item[0].Name = "Проверка";
        }
    public class any_item {
       public int price;
       public int ID;
       public string Name;
     
 
        
    }
    
 
   
 
    
 
        private void End_Button_Click(object sender, EventArgs e)
        {
          //Потом что-то будет
        }
 
        public void addBTN_Click(object sender, EventArgs e)
        {
           
            it_ID = int.Parse(idTxtBox.Text);
            it_quant = int.Parse(quantTxtBox.Text);
            itemPanel.Visible = false;
            dataGridView1.Rows.Add(item[it_ID].ID);
 
        }
Когда включаю программу, и ввожу в поле ID 0, пишет, что
Число копий, которые необходимо создать, должно быть только положительным.
Имя параметра: count

Что делать?
0
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
05.08.2012, 10:09 15
в архиве весь проект приложи
0
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 13
05.08.2012, 10:21  [ТС] 16
Приложил проект, заранее благодарен.
Вложения
Тип файла: rar WindowsFormsApplication1.rar (45.8 Кб, 7 просмотров)
0
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
05.08.2012, 10:37 17
вот как то так
Вложения
Тип файла: 7z WindowsFormsApplication1.7z (1.27 Мб, 13 просмотров)
1
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 13
05.08.2012, 10:52  [ТС] 18
hepper, спасибо, все отлично работает, но не могли бы вы объяснить, что вы сделали?
0
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
05.08.2012, 11:03 19
Цитата Сообщение от qnicolya Посмотреть сообщение
hepper, спасибо, все отлично работает, но не могли бы вы объяснить, что вы сделали?
сделал свойством
C#
1
2
3
4
  int it_quant;
       int it_ID;
        int item_cost;
        any_item[] item = new any_item[1];

и изменил порядок добавления строки в грид.
0
05.08.2012, 11:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.08.2012, 11:03
Помогаю со студенческими работами здесь

Элемент не существует в текущем контексте
В обработчике событий Textbox присваиваю его значение переменной. В другом обработчике присваиваю...

InitializeComponent() - Не существует в текущем контексте
InitializeComponent(); пишет не существует в текущем контексте. public Form1() { ...

Имя ConfigurationManager не существует в текущем контексте
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;...

DataGridView подчеркивается не существует в текущем контексте
помогите, подчеркивается DataGridView и пишется, что "элемент DataGridView не существует в текущем...

Элемент zedGraph не существует в текущем контексте
Выдает такую ошибку: "Элемент zedGraph не существует в текущем контексте". Помогите разобраться....

Ошибка: имя не существует в текущем контексте
этот код в отдельном классе: int X1 = { 2, 4, 6, 8, 10 }; int X2 = { 1, 2, 3, 4, 5 }; ...

Имя Add не существует в текущем контексте
как исправить? на 22 строке выдает эту ошибку "Имя Add не существует в текущем контексте" ...


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

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

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