Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420

После инициализации переменной она становится недоступной?

10.01.2016, 22:31. Показов 1727. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сорри, ребята, за флуд - тему, наверняка, можно будет удалять почти сразу. Взялся после перерыва за написание одной программы... Но C# (возможно, из-за "формочек") меня удивляет.

Короче у меня кхм... какой-то разрыв шаблона. Вот такое начало класса, предположим.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Listener
{
    class Control
    {
        private int count=5;
        count=7;
    }
}
И студия сразу выдаёт ошибку в count=7; (Ошибка 4 Недопустимая лексема "=" в объявлении класса, структуры или интерфейса c:\documents and settings\ilumini\мои документы\visual studio 2010\Projects\Listener\Listener\Control. cs 12 14 Listener
)
Я что же не могу изменить переменную в самом теле класса? Создавать целый метод,
C#
1
2
3
4
5
void changecount()
        {
            count = 7;
        }
    }
для того чтобы изменить переменную?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.01.2016, 22:31
Ответы с готовыми решениями:

Создаётся ли копия при инициализации new Function() и как сильно она нагружает процессор и память ?
Всем привет ! собственно сабж , но для более точного понятия попробую описать от А до Я хотя у меня это получается очень плохо (((( ...

Флешка становится недоступной при записи на неё
Сабж. Если я пытаюсь записать что-то на флешку - она через несколько секунд отключается (как устройство) и появляется заново. Запись,...

как записать в переменную символьного типа (думерный массив) несколько строк, после инициализации этой переменной?
как записать в переменную символьного типа (думерный массив) несколько строк, после инициализации этой переменной? тоесть при...

17
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
10.01.2016, 22:38
Цитата Сообщение от baliar Посмотреть сообщение
Я что же не могу изменить переменную в самом теле класса? Создавать целый метод,
Да.
А какая необходимость менять переменную в самом теле класса?
1
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
10.01.2016, 22:40
Цитата Сообщение от baliar Посмотреть сообщение
private int count=5;
* * * * count=7;
Не понятно зачем так делать ??? Для чего конструкторы нужны? Как думаете?

C#
1
2
3
4
5
6
7
8
9
class Control
    {
        public int count {private set; get;}
 
        public Control()
        {
            count = 7;
        }
    }
1
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
10.01.2016, 22:44  [ТС]
ок. Инкапсуляция и все дела... Я начинал на C++. Не гневайтесь сильно... Буду привыкать к ООП снова.

И эта переменная просто как пример, наткнулся я на другое - свойство компонента формы, к которому я сейчас попробую написать метод доступа в самом классе формы.
0
10.01.2016, 23:20

Не по теме:

baliar, а чё, в плюсах так можно что-ли? Попробуйте )))

0
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
11.01.2016, 01:11  [ТС]
Если можно, подскажите... Не знаю, как у кого терпения хватает - отвечать на все эти ненормальные вопросы...

Нужно проверить условие checkBox.Checked в одном из классов. Но вроде бы другие классы не имеют доступа к свойству. Создавал открытое поле в классе формы - решарпер отправил его инициализацию в конструктор формы. Как теперь получить его значение? Или все эти "манипуляции" вообще были лишними? ...FAQ форума вроде бы смотрел.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
namespace Listener
{
    public partial class FormReadControl : Form
    {
        public FormReadControl()
        {
            get_checkBoxRefreshWAVsources = checkBoxRefreshWAVsources.Checked;
            InitializeComponent();
        }
        
    }
 
}
...
partial class FormReadControl
    { ...
        private System.Windows.Forms.CheckBox checkBoxRefreshWAVsources;
        public bool get_checkBoxRefreshWAVsources;
}
Добавлено через 1 минуту
Не по теме:

baliar, а чё, в плюсах так можно что-ли? Попробуйте )))
Согласен. Некорректное сравнение. В С++ всё делалось обычно в пределах одного метода main() - отсюда такой шаблон получился.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
11.01.2016, 01:33
Лучший ответ Сообщение было отмечено baliar как решение

Решение

Цитата Сообщение от baliar Посмотреть сообщение
Нужно проверить условие checkBox.Checked в одном из классов.
Ничего сложного.
Делаете в классе открытое bool свойство, которое будет проверять чекбокс и возвращать его состояние.
Затем нужно просто получить ссылку на экземпляр класса, в котором проверяется checkBox.Checked и обратиться к этому свойству.
Ваш пример непонятен. Но долго писать, что именно непонятно.
Вот еще пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
 
    public bool GetChecked //обращайтесь к этому свойству для получения checkBox1.Checked
    {
        get {return checkBox1.Checked; }
    }
}
В другом классе, получив ссылку, например в f1:
C#
1
bool isChecked = f1.GetChecked;
Добавлено через 6 минут
Цитата Сообщение от baliar Посмотреть сообщение
Создавал открытое поле в классе формы
Поле неудобно тем, что checkBox.Checked и поле get_checkBoxRefreshWAVsources теоретически могут иметь разные значения. И нужно контролировать изменение как состояния чекбокса так и изменение значения поля.
А свойство всегда вернет именно текущее состояние чекбокса.
1
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
11.01.2016, 01:45  [ТС]
Последнее утверждение воспринял... И то, что экземпляр нужен, тоже вроде ясно. Я вот только не совсем, может от того что ночь уже, представляю: форма у нас создаётся одна при запуске приложения в main -> (Application.Run(new FormReadControl()) и класс нестатический, а this тоже не напишешь - есть только название формы как класса... Лучше, пожалуй, завтра.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
11.01.2016, 07:53
Цитата Сообщение от baliar Посмотреть сообщение
а this тоже не напишешь
Напишешь.
См. п. 2.4, 2.5 в
Ответы на 7 самых частых вопросов по WinForms
0
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
11.01.2016, 17:08  [ТС]
Пока что свойство и нижеприведенный способ создания формы работает. Так что этот пост, планировавшийся как описание ошибок, скорее - более детальное описание ситуации.

Всё равно как белка в колесе... Раньше (в другой программе) эти чекбоксы в обработчиках кнопки были. А сейчас забыл, похоже, с какой стороны к ним подходить.
Возможно, непонятно, что я имею в виду или способ которым я это пытаюсь делать... В одной из веток Psilon приводил такой код:
Цитата Сообщение от Psilon Посмотреть сообщение
I-John, создайте поле класса типа private MainForm main = new MainForm();
И вместо Application.Run(new MainForm()); передавайте
Application.Run(main);
Интуитивно, это то, как я это примерно представляю. Но на практике студия всё равно ругается на всё.
C#
1
2
3
4
5
6
7
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Control control = new Control();
            Application.Run(control.mainForm);
        }
Здесь не может отрендерить ...Уже перестало ругаться - даже не понял, что изменилось.
C#
1
2
3
4
5
6
7
8
9
10
11
12
class Control
    {
        public FormReadControl mainForm = new FormReadControl();
        
        void doWAVrefresh()
        {
            if (mainForm.GetCheckBoxRefreshWaVsources)
            {
                
            }
        }
    }
Теперь пока что вроде бы "работает".
0
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
12.01.2016, 18:45  [ТС]
ООП явно придумано для другого, но если main создаётся экземпляр класса Control, в котором создаётся форма и в то же время задан метод, то как затем прописать выполнение метода в обработчике нажатия кнопки?

C#
1
2
3
4
5
6
class Control
    {
        public FormReadControl mainForm = new FormReadControl();
        
        public void doWAVrefresh()
        {...
C#
1
2
3
4
5
6
7
static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Control control = new Control();
            Application.Run(control.mainForm);
        }
C#
1
2
3
4
        private void buttonDoAnalitix_Click(object sender, EventArgs e)
        {
            ... .doWAVrefresh()
        }
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
12.01.2016, 18:57
baliar,
Если честно, не знаю как другие, но я не понимаю архитектуры этого приложения.
Есть класс формы FormReadControl.
Есть класс Control, в которм создается экземпляр класса FormReadControl.
В классе Program создается экземпляр класса Control.
Внимание, вопрос. Зачем нужен класс Control?
0
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
12.01.2016, 19:01  [ТС]
Ок. Я понимаю, что можно какую угодно химеру "нарисовать" и никто не обязан ломать над ней голову. Попробую поменять структуру программы.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
12.01.2016, 19:05
Цитата Сообщение от baliar Посмотреть сообщение
Ок. Я понимаю, что можно какую угодно химеру "нарисовать" и никто не обязан ломать над ней голову. Попробую поменять структуру программы.
Можете словами описать, что именно хотите получить. И что уже реализовано.
О назначении программы можете умолчать.
0
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
12.01.2016, 19:44  [ТС]
Нужно было отойти на время... Да нет, Вы правы. Мне нужно больше тренироваться в написании программ на C# и использовать ООП на практике, а не только книги по шарпу читать. Не имея опыта, сразу складывается представление о программе как: вот тут у нас будет объект такой-то, тут такой-то, а вот это будет супер класс, всем управляющий... Я просто переставил тело метода в обработчик кнопки.

Первый этап в этой программе нахождение по шаблону адреса группы файлов wav и построение на их основе такой же группы файлов .txt (с извлечённой из wav информацией). Второй этап, это уже анализ информации (попробую с помощью библиотеки) по нажатию кнопки... Если нужно обновить источники, то при нажатии кнопки сначала производится замена информации в txt (проверка условия - отмечен ли checkBox).
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
12.01.2016, 20:39
baliar,
Если я Вас правильно понял, то для работы программы достаточно одной формы с 2-3 кнопками и несколькими другими элементами. Добавьте класс с данными и логикой, либо 2 отдельных класса. В классе формы создавайте объект(ы) класса с данными и логикой, в обработчиках кнопок вызывайте методы, обращайтесь к свойствам этого класса.
А зачем класс Control я все равно не понимаю.
1
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
12.01.2016, 23:57  [ТС]
В общем-то и проблем-то не было на первом этапе, кроме выдуманных самим... Теперь копаю информацию, как можно провести анализ wav. Можно ли подключить для этого такую библиотеку как opencv? Что-то вроде использования функции distanceTransformation для вычисления корреляции между двумя сэмплами wav? ...Буду рад другим предложениям по C#-библиотекам для вычисления корреляции звуков.
0
112 / 83 / 32
Регистрация: 10.08.2014
Сообщений: 420
15.01.2016, 17:41  [ТС]
Пересмотрел ещё раз давний урок по MVP от Deffaze... Это то, что я хотел сделать, но о чём забыл. Может ещё переделаю. Всё же надо сразу привыкать - программировать правильно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.01.2016, 17:41
Помогаю со студенческими работами здесь

После инкрементирования переменной объекта, она возвращает NaN
После увеличении переменной на единицу, она возвращает NaN. Помогите понять в чем дело:) var myObj; var obj = function(){ ...

При попытке изменить выборку для таблицы GET запросом, она становится пустая
В общем такого ситуация: На сайте есть меню и таблица. С помощью меню нужно изменять выборку для заполнения таблицы. ...

Сделать кнопку недоступной после нажатия на определённое время
Товарищи, как сделать чтобы после нажатии кнопки она стала недоступной в течении, например, 10 секунд, а после опоять стала доступной

Как в PageControl сделать вкладку недоступной после перехода на следующую?
У меня программа тестирования, сам тест сделан в PageControl с компонентами Label и RadoiGroup. Я не могу сделать при переходе с первого...

Неполадка в инициализации переменной
Добрый день, дорогие эксперты. По условию задачи я составил код, но после компиляции и ввода элементов массива выбивает ошибку(фото),...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru