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

Компонент частично находится на другом компоненте, надо изменить визуальное положение

15.11.2015, 10:34. Показов 1745. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нормальный заголовок сформулировать не смог >_>

В общем, создаю динамически PictureBox'ы и присваиваю им картинки, создаю их сверху вниз и при чем последующие картинки частично задеваются предыдущие картинки, и получается, что тот который первым создался(на самом верху) лежит поверх остальных, а нужно что бы наоборот было, то есть те, что ниже, визуально лежат на верхних. Тобишь нижние картинки должны быть полными, те что выше частично закрытыми и так далее, а сейчас наоборот(

Если по более простому, то сейчас 1-ая находится на 2-ой, 2-ая на 3-ей, а нужно чтобы 3-я находилась на 2-ой, а 2-ая на 1-ой.

Код не кидаю, так как проблема то не в нем, а в том что компоненты, что созданы раньше, лежат на тех что созданы позже(( И вот нужно как то бы это поменять. Просто создавать их снизу вверх, не могу, код слишком менять придется(
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.11.2015, 10:34
Ответы с готовыми решениями:

Как в графическом компоненте контролировать положение картинки?
Это либо PictureBox, либо Image, не так важно. Как в компоненте контролировать положение картинки? Именно загруженной картинки, а не самого...

Класс - компонент в компоненте
Добрый день мастера. Первый раз пишу класс... Не могу сделать класс наследник Tpanel, у которого на основной панели можно создавать...

Компонент StringGrid положение курсора.
Как можно определить строку на которой находится указатель в компоненте StringGrid? Не нахождение курсора мыши над конкретным элементом, а...

8
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
15.11.2015, 10:42
Лучший ответ Сообщение было отмечено KuroRyuu как решение

Решение

Это называется Z-Order.
Есть два способа:
  1. Поменять порядок в конструкторе форм. Чтобы "поднять" или "опустить" контрол, выбираете в меню Format -> Order -> Send To Back или Format -> Order -> Bring To Front
  2. Изменять порядок в коде с помощью ручного измения индексов. Для этого используются методы GetChildIndex() и SetChildIndex().
1
0 / 0 / 1
Регистрация: 10.10.2015
Сообщений: 19
15.11.2015, 11:22  [ТС]
Ну вот я примерно о таком думал, только не знал методов для этого, но вот эти GetChildIndex() и SetChildIndex(), Get получается забирает номер контрола, а Set задает номер контрола.
Ну мне в общем то нужен Сет, но там SetChildIndex(Control child, int newIndex), вот контрол чилд, не понимаю что мне задавать в нем((
Вот пикчабоксы создаю динамически таким образом, в циклах. RmatrPyr - двумерный массив пикчабоксов.
C#
1
2
3
4
5
6
7
8
9
10
11
12
RmatrPyr[k, n] = new PictureBox
                    {
                        Parent = this,
                        Name = "RmatrPyr" + k + n + j + i,
                        //Controls.SetChildIndex(RmatrPyr[k, n], 50),     // сначала думал вот так сделать(ну вместо 50 там изменяющуюся переменную поставить), но RmatrPyr он не находит(((
                        Image = Im[i, j],
                        SizeMode = PictureBoxSizeMode.StretchImage,
                        Top = PyramidTP,
                        Left = PyramidLF1,
                        Height = 116,
                        Width = 80,
                    };
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
15.11.2015, 11:35
Цитата Сообщение от KuroRyuu Посмотреть сообщение
контрол чилд, не понимаю что мне задавать в нем
Нужный PictureBox, что же ещё.
0
0 / 0 / 1
Регистрация: 10.10.2015
Сообщений: 19
15.11.2015, 11:47  [ТС]
Ну я понял почему не мог там нужный пикчабокс найти, стоило после создания писать это, а не в создании компонента.
Но я сделал щас вроде как правильно
C#
1
Controls.SetChildIndex(RmatrPyr[k,n], 30+index);
index у меня изменяется от большего к меньшему, то есть у первого созданного элемента индекс контрола наибольшим будет, но вид компонентов не изменился почему то((( Все также, те что первыми создаются лежат поверх последующих компонентов( Пробовал наобоорот индекс от меньшего к больше делать, и все равно тоже самое >_>
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
15.11.2015, 12:13
KuroRyuu, приложите проект, если есть возможность.

Добавлено через 17 минут
Ещё не стоит забывать, что чем меньше индекс, тем выше положение контрола.
0
0 / 0 / 1
Регистрация: 10.10.2015
Сообщений: 19
15.11.2015, 12:13  [ТС]
Вот архив проекта)
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Ещё не стоит забывать, что чем меньше индекс, тем выше положение контрола.
Ну я пробовал делать в обе стороны индексы контролов, но ничего не сработало не понимаю почему
Вложения
Тип файла: rar AnimeCards.rar (2.79 Мб, 2 просмотров)
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
15.11.2015, 12:30
Придумал несколько иное решение
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
for (k = 1; k <= 7; k++)
{
    PyramidLF1 = PyramidLF2;
    for (n = 1; n <= k; n++)
    {
        i = RNDM.Next(1, 13); j = RNDM.Next(1, 4);
        while (RKol[i, j] == 0)
        {
            i = RNDM.Next(1, 13); j = RNDM.Next(1, 4);
        }
        RKol[i, j] = 0;
        RPyr[k, n] = 1;
        RmatrPyr[k, n] = new PictureBox
        {
            Parent = this,
            Name = "RmatrPyr" + k + n + j + i,
                        
            Image = Im[i, j],
            SizeMode = PictureBoxSizeMode.StretchImage,
            Top = PyramidTP,
            Left = PyramidLF1,
            Height = 116,
            Width = 80
        };
        RmatrPyr[k, n].BringToFront();
        PyramidLF1 = PyramidLF1 + PyramidLR1;
    }
    PyramidLF2 = PyramidLF2 - PyramidLR2;
    PyramidTP = PyramidTP + 64;
}
Всё внимание на строку 25.
1
0 / 0 / 1
Регистрация: 10.10.2015
Сообщений: 19
15.11.2015, 12:35  [ТС]
ООО, спасибооо, работает отлично)
я так понимаю это ставит контрол в самое начало, как будто он первый созданный, и каждый последующий будет вставать первым и сдвигать остальные вниз
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.11.2015, 12:35
Помогаю со студенческими работами здесь

Подсчитать количество компонент, предшествующих первой по порядку отрицательной компоненте
Дан вещественный вектор xn. Подсчитать К-количество компонент, предшествующих первой по порядку отрицательной компоненте. Если все...

Как отправить данные находящиеся в компоненте RichEdit на печать через компонент TPrintDialog?
У меня в меню есть кнопка Печать. На форме есть компоненты TRichEdit, TPrintDialog. Как отправить данные находящиеся в компоненте RichEdit1...

Проанализировать положение точки на плоскости (в какой четверти находится точка, через case)
Используя оператор варианта case, составьте программу с вводом исходных данных, номера варианта и вывода результата. Задание: Ввести...

Изменить внешний вид scroll-а в компоненте WebBrowser
Доброе время суток. Уважаемые программеры, если кто знает подскажите: как изменить внешний вид scroll'а в компоненте webBrowser, или...

Изменить положение label
Подскажите пжалуста! как переместить label делаю так private: System::Void button2_Click(System::Object^ sender,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru