Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.59/41: Рейтинг темы: голосов - 41, средняя оценка - 4.59
Марана
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 22
1

Имя не существует в текущем контексте

16.01.2017, 02:00. Просмотров 8434. Ответов 7
Метки нет (Все метки)

Всем привет, объясните, пожалуйста чайнику. Имеются два класса. в первый класс надо передать значение из второго класса
Но у всех переменных из метода getQw() выдается ошибка что имя "тут имя переменной" не существует в текущем контексте. Объясните как должно выглядеть?
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace DrivingSchool
{
    public class TestContr
    {
        private TestUnit testUnit;
        private TestForm testForm;
 
 
        int otv;   // выбранный ответ (номер)
        int n;     // количество правильных ответов
        int nv;    // общее количество вопросов
        int mode;  // состояние программы:
                   // 0 - начало работы;
                   // 1 - тестирование;
                   // 2 - завершение работы
 
        public TestContr(TestForm form)
        {
            testForm = form;
            mode = 0;
            n = 0;
            testUnit = new TestUnit();
        }
        public void showHead()
        {
 
            testForm.Text = testUnit.ReadHead();
            testForm.label1.Text = testUnit.ReadDescription();
        }
 
        public void OkClick()
        {
            switch (mode)
            {
                case 0:        // начало работы программы
                   testForm.radioButton1.Visible = true;
                    testForm.radioButton2.Visible = true;
                    testForm.radioButton3.Visible = true;
                    testForm.radioButton4.Visible = true;
 
                    testUnit.getQw();
                   showQw();
 
                    mode = 1;
 
                    testForm.button1.Enabled = false;
                    testForm.radioButton5.Checked = true;
                    break;
 
                case 1:
                    nv++;
 
                    // правильный ли ответ выбран
                    if (otv == right) n++;
 
                    if (testUnit.getQw()) showQw();
                    else
                    {
                        // больше вопросов нет
                        testForm.radioButton1.Visible = false;
                        testForm.radioButton2.Visible = false;
                        testForm.radioButton3.Visible = false;
                        testForm.radioButton4.Visible = false;
 
                        testForm.pictureBox1.Visible = false;
 
                        // обработка и вывод результата
                        showLevel();
 
                        // следующий щелчок на кнопке Ok
                        // закроет окно программы
                        mode = 2;
                    }
                    break;
 
            }
        }
        public void showLevel()
        {
 
        }
        public void showQw(string qw, string[] answ)
        {
            testForm.label1.Text = qw;
 
            // иллюстрация
 
            testForm.pictureBox1.Visible = false;
 
            testForm.radioButton1.Top = testForm.label1.Bottom;
 
 
            // показать варианты ответа
            testForm.radioButton1.Text = answ[0];
            testForm.radioButton2.Top = testForm.radioButton1.Top + 24; ;
            testForm.radioButton2.Text = answ[1];
            testForm.radioButton3.Top = testForm.radioButton2.Top + 24; ;
            testForm.radioButton3.Text = answ[2];
            testForm.radioButton4.Top = testForm.radioButton3.Top + 24; ;
            testForm.radioButton4.Text = answ[3];
 
            testForm.radioButton4.Checked = true;
            testForm.button1.Enabled = false;
        }
        public void Otvet(object sender)
        {
            if ((RadioButton)sender == testForm.radioButton1) otv = 0;
            if ((RadioButton)sender == testForm.radioButton2) otv = 1;
            if ((RadioButton)sender == testForm.radioButton3) otv = 2;
            if ((RadioButton)sender == testForm.radioButton4) otv = 3;
 
            testForm.button1.Enabled = true;
        }
    }
}
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
 
namespace DrivingSchool
{
    class TestUnit
    {
       XmlReader xmlReader;
        int right; // правильный ответ (номер)
        string qw;     // вопрос
 
        // варианты ответа
        string[] answ = new string[4];
        string fpath = "C:/Users/Марана/Documents/Visual Studio 2015/Projects/DrivingSchool/DrivingSchool/bin/Debug/";
        string fname = "spb.xml";
 
        // получаем доступ к xml-документу
        public string ReadHead()
        {
            xmlReader = new System.Xml.XmlTextReader(fpath + fname);
 
            // ищем узел <head>
            do xmlReader.Read();
            while (xmlReader.Name != "head");
 
            // считываем заголовок
            xmlReader.Read();
 
            // вывести название теста в заголовок окна
            string head = xmlReader.Value;
 
            // выходим из узла <head>
            xmlReader.Read();
            return head;
        }
        public  string ReadDescription()
        {
            xmlReader = new System.Xml.XmlTextReader(fpath + fname);
 
            // ищем узел <description>
            do
                xmlReader.Read();
            while (xmlReader.Name != "description");
 
            // считываем описание теста
            xmlReader.Read();
 
            // выводим описание теста
           string description = xmlReader.Value;
 
            // выходим из узла <description>
            xmlReader.Read();
 
            // ищем узел вопросов <qw>
            do
                xmlReader.Read();
            while (xmlReader.Name != "qw");
 
            // входим внутрь узла
            xmlReader.Read();
            return description;
        }
 
        public  Boolean getQw()
        {
            xmlReader = new System.Xml.XmlTextReader("C:/Users/Марана/Documents/Visual Studio 2015/Projects/ООП/DrivingSchool/DrivingSchool/bin/Debug/" + "spb.xml");
 
            // считываем тэг <q>
            xmlReader.Read();
            if (xmlReader.Name == "q")
            {
                // здесь прочитан тэг <q>,
                // атрибут text которого содержит вопрос, а
                // атрибут src - имя файла иллюстрации.
                // извлекаем значение атрибутов:
                qw = xmlReader.GetAttribute("text");
                // входим внутрь узла
                xmlReader.Read();
                int i = 0;
                // считываем данные узла вопроса <q>
                while (xmlReader.Name != "q")
                {
                    xmlReader.Read();
                    // варианты ответа
                    if (xmlReader.Name == "a")
                    {
                        // запоминаем правильный ответ
                        if (xmlReader.GetAttribute("right") == "yes")
                            right = i;
                        // считываем вариант ответа
                        xmlReader.Read();
                        if (i < 4) answ[i] = xmlReader.Value;
                        // выходим из узла <a>
                        xmlReader.Read();
                        i++;
                    }
                }
                // выходим из узла вопроса <q>
                xmlReader.Read();
                return true;
            }
            // если считанный тэг не является
            // тэгом вопроса <q>
            else
                return false;
        }
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2017, 02:00
Ответы с готовыми решениями:

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

Имя не существует в текущем контексте
Здравствуйте, я новичок. Возникла проблема в Windows Forms. Как сделать, чтобы созданный объект в...

Имя не существует в текущем контексте
Такая проблема, не могу понять как сделать чтобы массив copies был виден в операторе using. На...

Имя не существует в текущем контексте
namespace ePlayer { public sealed partial class MainPage : Page { ...

CS0103 Имя table не существует в текущем контексте
Помогите устранить ошибку. Мой код: private void button1_Click(object sender, EventArgs e) ...

7
Lexeq
966 / 628 / 445
Регистрация: 21.01.2014
Сообщений: 1,689
Завершенные тесты: 2
16.01.2017, 02:28 2
Ну так правильно, переменные, объявленные в одном методе, нельзя использовать в другом. Можете исправить это, сделав эти переменные полями класса или передовать в другой метод, как аргументы, или объявлять новые в методе getQw().
0
Марана
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 22
16.01.2017, 02:30  [ТС] 3
Ну это было понятно и по тексту ошибки, спасибо. Вопрос состоял в другом
0
Lexeq
966 / 628 / 445
Регистрация: 21.01.2014
Сообщений: 1,689
Завершенные тесты: 2
16.01.2017, 02:36 4
Хотя, у вас и так переменная сделана, полем класса. У меня класс TestUnit скомпилировался нормально.
0
16.01.2017, 02:36
Марана
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 22
16.01.2017, 02:38  [ТС] 5
Вот объясните, пожалуйста мне, каким образом вытащить из класса значения переменных qw, right и так далее... Так что бы потом в первом классе что-то с ними делать, где-то использовать?

TestUnit без ошибок компелируется, проблема в классе контроллере
0
Lexeq
966 / 628 / 445
Регистрация: 21.01.2014
Сообщений: 1,689
Завершенные тесты: 2
16.01.2017, 02:43 6
Так вы написали, что проблема в методе getQw()...
0
Марана
0 / 0 / 0
Регистрация: 21.02.2013
Сообщений: 22
16.01.2017, 02:57  [ТС] 7
Я не сказала что проблема в getQw(), я сказала
Цитата Сообщение от Марана Посмотреть сообщение
переменных из метода getQw()
Все переменные, что которые получают значения в этом методе имеют потом проблемы в классе контроллере

Добавлено через 10 минут
Вопрос с переменными решился, только вот теперь не отображаются вопросы и ответы
0
sammanta
3 / 3 / 0
Регистрация: 31.05.2015
Сообщений: 58
Завершенные тесты: 1
17.01.2017, 14:54 8
Во первых, чтобы Ваши переменные были видны в другом классе их необходимо объявить с ключевым словом public
Во вторых в том стороннем классе, где вы собираетесь с ними работать объявить ссылку на объект, т е создать экземпляр.
В третьих подключить пространство имен ( если оно не общее для обоих классов)
Я как понимаю вы собираетесь работать с переменными в классе TestContr,
тогда экземляр создаете как TestContr refToObj = new TestContr();
теперь в этом классе можно вызывать, например qw:
refToObj.qw = "string";
Соответственно для другого класса все делается аналогично.
Обязательно здесь объявить с ключевым словом public , иначе в других классах ваши поля и члены видится не будут.
0
17.01.2017, 14:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2017, 14:54

Имя не существует в текущем контексте + использование локальной переменной, которой не присвоено значение
Всем привет. Сделал задачу, но при запуске выдаёт 3 ошибки: Имя &quot;i&quot; не существует в текущем...

Ошибка CS0103 Имя "PowerManagementResource" не существует в текущем контексте
Код сюда не помещается. (86 тысяч с лишним символов.) Вот: http://pastebin.com/ERWVnZ9F Что...

Ошибка "Имя * не существует в текущем контексте". Почему?
Ниже представлен фрагмент кода. В строках 5, 6, 7, 8, 12, 13, 14, 15 символы Unicode на сайте...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru