Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
5 / 5 / 0
Регистрация: 19.02.2013
Сообщений: 55

Поздняя инициализация массива из другой формы

30.05.2013, 13:50. Показов 1298. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Пишу программу на C# с использованием Windows Forms. На первой форме вводятся данные, которые используются при инициализации двумерного массива на второй форме. Этот массив в последствии много где используется, в том числе при отрисовке сетки у Panel.

Код главной формы MainForm:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
 
        private void btnGo_Click(object sender, EventArgs e)
        {
            ModelForm secondForm = new ModelForm();
            secondForm.Owner = this;
            secondForm.ShowDialog();
        }
    }
Код второй формы ModelForm:
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
public partial class ModelForm : Form
    {
        static int line;
        static int length;
        int[,] road = new int[line, length];
 
        public ModelForm()
        {
            InitializeComponent();
        }
 
        private void ModelForm_Load(object sender, EventArgs e)
        {
            MainForm firstForm = this.Owner as MainForm;
            if (firstForm != null) line = Convert.ToInt32(firstForm.tb_line.Text);
            if (firstForm != null) length = Convert.ToInt32(firstForm.tb_length.Text);
        }
 
        private void pnlRoad_Paint(object sender, PaintEventArgs e)
        {
            int w = pnlRoad.Width / road.GetLength(1);
            int h = pnlRoad.Height / road.GetLength(0);
 
            ControlPaint.DrawGrid(e.Graphics, new Rectangle(Point.Empty, pnlRoad.Size), new Size(w, 1), Color.White);
            ControlPaint.DrawGrid(e.Graphics, new Rectangle(Point.Empty, pnlRoad.Size), new Size(1, h), Color.White);//Рисует сетку
            for (int i = 0; i < road.GetLength(0); i++)
            {
                int y = i * h;
                for (int j = 0; j < road.GetLength(1); j++)
                {
                    int x = j * w;
                    e.Graphics.FillRectangle(road[i, j] == 1 ? Brushes.Blue :
                        road[i, j] == 2 ? Brushes.Red :
                        Brushes.White, j * w + 1, i * h + 1, w - 1, h - 1);//заливает ячейки
                }
            }
        }
    }
Но при первом открытии ModelForm элемент Panel выглядит как на приложенном изображении, а при втором открытии он расчерчивается как нужно. Я думаю, что это происходит из-за того, что инициализация двумерного массива происходит после вызова события pnlRoad_Paint.

Так ли это на самом деле я не знаю, программированием занялся не так давно и поэтому даже не знаю в какую сторону копать. Как мне исправить эту проблему?
Миниатюры
Поздняя инициализация массива из другой формы  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.05.2013, 13:50
Ответы с готовыми решениями:

Инициализация нажатия и отпускания кнопки из другой формы
Добрый день. Столкнулся с такой проблемой. Есть проект с двумя формами, на одной из них есть кнопки Button и события по MouseDown и...

Как перенести значения из одного компонента одной формы в другой компонент другой формы?
В общем ситуация смешная для профи,делаю программу для редактирования и печати вкладышей для дипломов на PHP,сделал две формы,нужнго...

Управление объектом динамического массива с другой формы (this)
По нажатию кнопки на форме 2 , объект TImage на форме 1 должен поменять изображение. Создание динамического массива на Form1: for...

3
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
30.05.2013, 14:17
попробуйте в лоад добавить this.Invalidate();

или проинициализировать переменные перед InitializeComponent(); в конструкторе
1
5 / 5 / 0
Регистрация: 19.02.2013
Сообщений: 55
30.05.2013, 14:34  [ТС]
Цитата Сообщение от Learx Посмотреть сообщение
попробуйте в лоад добавить this.Invalidate();
не помогло.

Цитата Сообщение от Learx Посмотреть сообщение
проинициализировать переменные перед InitializeComponent(); в конструкторе
это как делается?
0
5 / 5 / 0
Регистрация: 19.02.2013
Сообщений: 55
31.05.2013, 14:51  [ТС]
Проблема все еще не решена. Может у кого-нибудь есть еще предположения?

Прикладываю проект.
Вложения
Тип файла: zip ModelRoad.zip (268.5 Кб, 7 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.05.2013, 14:51
Помогаю со студенческими работами здесь

Управление объектом динамического массива с другой формы
Есть форма на которой массив изображений. Обращаюсь к объекту с помощью : TImage *kran = (TImage*)FindComponent(((TControl ...

Более поздняя версия
У меня 14 компас и пишет что файл создан в более поздней версии

Определить, какая из дат - поздняя
Пользователь вводит в textBox1 одна дату: дд.мм.гггг и в textBox2 другую дату. Нужно проверить, что дата, введенная в textbox2 была позже...

инициализация массива, вывод массива и обработка массива должны быть реализованы с помощью функций.
1 Последовательность a1; a2; ...; an состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы. 2 У...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru