Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/37: Рейтинг темы: голосов - 37, средняя оценка - 4.65
 Аватар для power21580
5 / 5 / 1
Регистрация: 02.12.2011
Сообщений: 166

Переменная, область видимости для нескольких форм

02.12.2011, 21:34. Показов 7815. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте форумчане!
Объясните, как создать переменную, на допустим 2 формы.
У меня есть переменная PG, в первой форме ей задаётся значение, а во второй мне надо использовать её со значением, которое дано в первой форме и наоборот.
К примеру, в первой форме переменная получила значение 500, а во второй я вычитаю из неё 200. Мне надо чтоб в первой форме у неё стало 300!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.12.2011, 21:34
Ответы с готовыми решениями:

Глобальная переменная для всех форм
Вопрос конечно дурацкий. Но что-то не находится простого решения. Как можно создать ГЛОБАЛЬНУЮ переменную для всего приложения? Т.е....

Одна структура для нескольких форм
Привет, форум. Имеются несколько форм, у каждой формы есть одинаковые контролы и свои уникальные. В дальнейшем, возможно, еще будут формы...

Глобальное меню для нескольких форм
Всем привет, у меня следующая проблема: есть много форм, на которых должно быть одинаковое меню. Чтоб не быдлокодить хочется все функции...

15
162 / 158 / 19
Регистрация: 22.11.2011
Сообщений: 371
02.12.2011, 22:06
В статику уводить разве что. Можно в internal, чтобы видимость на уровне сборки была...
0
 Аватар для power21580
5 / 5 / 1
Регистрация: 02.12.2011
Сообщений: 166
02.12.2011, 23:52  [ТС]
Если не сложно напишите подробно (желательно с кодом).
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
03.12.2011, 00:40
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

GO.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    /// <summary>
    /// Глобальные объекты, доступные из любого места в приложении (GO - Global Objects)
    /// </summary>
    internal static class GO
    {
        static Constants constants = new Constants();
 
        /// <summary>Глобальные константы используемые в приложении</summary>
        public static Constants Constants
        {
            get { return constants; }
        }
    }
Constants.cs
C#
1
2
3
4
5
6
7
8
9
    internal class Constants
    {
        public string AppName { get; private set; }
 
        internal Constants()
        {
            AppName = "Program Name";
        }
    }
Пример использования в окне программы для показа MessageBox из другого потока так, чтобы MessageBox стал дочерним у вызывающего окна для того, чтобы MessageBox был поверх вызывающего окна. Рекурсивный метод, по сути, если вызван с другого потока, то он вызовет 1 раз ещё раз себя. Кстати, предназначался для показа ошибок в апдейтере, поэтому не передаётся в него ничего кроме сообщения, а так можно сделать ещё и остальные параметры настраиваемыми.
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
    public partial class UpdaterWindow : Window
    {
        public UpdaterWindow()
        {
            InitializeComponent();
        }
 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object notUsed)
                {
                    ShowMessageBox("Привет! Я сообщение из другого потока");
                }));
        }
 
        void ShowMessageBox(object message)
        {
            if (!Application.Current.Dispatcher.CheckAccess())
            {
                Application.Current.Dispatcher.Invoke(new Action(()=>
                    {
                        ShowMessageBox(message);
                    }));
            }
            else
                MessageBox.Show(this, (string)message, string.Format(
"Обновление {0}", GO.Constants.AppName), MessageBoxButton.OK, MessageBoxImage.Error);
        }
    }
Думаю видно, как в методе используется GO.Constants.AppName
1
 Аватар для power21580
5 / 5 / 1
Регистрация: 02.12.2011
Сообщений: 166
03.12.2011, 13:55  [ТС]
Ничего не понял. Где инициализировать переменную? И будет ли она доступна на других формах?
0
162 / 158 / 19
Регистрация: 22.11.2011
Сообщений: 371
03.12.2011, 13:58
Статика доступна отовсюду, ну, в зависимости от уровня доступа.
Инициализируется переменная здесь
Цитата Сообщение от Casper-SC Посмотреть сообщение
C#
1
2
3
4
internal Constants()
 {
 AppName = "Program Name";
 }
Класс GO будет виден во всей Вашей сборке.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
03.12.2011, 13:59
Цитата Сообщение от power21580 Посмотреть сообщение
Ничего не понял. Где инициализировать переменную? И будет ли она доступна на других формах?
Помоему при первом доступе, автоматом само проинициализируется, ведь класс статический. Могу создать проект, скопировать туда код и сюда выложить, если самому ну вообще не понятно. Хотя я вроде понятно описал всё.
0
 Аватар для power21580
5 / 5 / 1
Регистрация: 02.12.2011
Сообщений: 166
03.12.2011, 14:48  [ТС]
Как я понял GO.cs это в первой форме, а Constants.cs в появившейся вкладке Constants.cs.
Как обращаться к переменной?
0
162 / 158 / 19
Регистрация: 22.11.2011
Сообщений: 371
03.12.2011, 15:37
GO.cs это отдельный класс и ни с какой формой он не связан.
0
 Аватар для power21580
5 / 5 / 1
Регистрация: 02.12.2011
Сообщений: 166
10.12.2011, 23:29  [ТС]
Как обращаться к переменной?
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
11.12.2011, 00:05
Цитата Сообщение от power21580 Посмотреть сообщение
Как обращаться к переменной?
в сообщении 4 показано как. А вообще смотря как ты у себя там сделал. Я же не знаю.
0
 Аватар для power21580
5 / 5 / 1
Регистрация: 02.12.2011
Сообщений: 166
11.12.2011, 17:52  [ТС]
Я сделал так:
Создал класс GO.cs
C#
1
2
3
4
5
6
7
8
    internal static class GO
    {
        static Constants constants = new Constants();
        public static Constants Constants
        {
            get { return constants; }
        }
    }
В классе Constants.cs:
C#
1
2
3
4
5
6
7
8
9
internal class Constants
    {
        public int PG { get; private set; }
 
        internal Constants()
        {
            PG = 3;
        }
    }
И как мне обратиться к переменной в форме?
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
11.12.2011, 17:56
C#
1
GO.Constants.PG
Из любого места в программе. Думаю лучше только из окон обращаться, а для специфичных классов, лучше данные передавать в методы и конструкторы, чтобы эти классы стали переносимыми на любую другую прогу.
1
 Аватар для power21580
5 / 5 / 1
Регистрация: 02.12.2011
Сообщений: 166
11.12.2011, 18:01  [ТС]
Я так и обращаюсь к примеру:
C#
1
GO.Constants.PG = 10;
и мне выдаёт ошибку:
The property or indexer 'Window.Constants.PG' cannot be used in this context because the set accessor is inaccessible
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
11.12.2011, 18:42
Ну дык ты же сам сделал её только для чтения.
public int PG { get; private set; }
1
 Аватар для power21580
5 / 5 / 1
Регистрация: 02.12.2011
Сообщений: 166
11.12.2011, 20:43  [ТС]
Всё разобрался спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.12.2011, 20:43
Помогаю со студенческими работами здесь

Одна функция для нескольких форм
Ребят у меня такой вопрос: Как сделать одну функцию, чтобы она работала во всех формах? Она должна при загрузке каждой формы создавать...

Глобальная переменная для нескольких form
Всем привет. У меня имеется две формы, в одной их них textBox в другой label, надо сделать так, чтоб в form1, где находится наш label,...

Использовать один contextMenustrip для нескольких форм
Подскажите пожалуйста, можноли, и если можно то как, создать одно меню &quot;contextMenustrip&quot; которое будет использоваться в нескольких...

Написание кода для нескольких одинаковых форм
вот у меня есть две формы: Form1 и Form2. Могу ли я как-то сделать (чтобы не делать это:Project-&gt;Add Windows Form(по 100 раз одно и...

Для нескольких форм сделать общее контекстное меню
Добрый день. Возникла задача - для нескольких форм сделать общее контекстное меню. Особо не мудрствуя, я склепал класс, конструктор...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru