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

Форма, указанная как MdiParent для данной формы, не является MdiContainer

28.04.2021, 20:38. Показов 3860. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здрасьте. Задача формулируется так: "Создать приложение, где в каждом дочернем окне изображается какой-то графический объект (круг, прямоугольник и т.п.). Предусмотреть возможность изменения толщины линии этого объекта". С первой частью задания особых проблем не было. Проблема именно в том, как реализовать возможность изменения этой самой толщины через Forms. Лучшее, что я придумал, это было создать ещё один Form, который открывался после нажатия на кнопку для какой-либо фигуры(например круга). Внутри того Form мы сначала задаем значение толщины линии фигуры и после нажатия на кнопку подтверждения у нас появлялось само дочернее окно с фигурой и заданной толщиной линий. Но когда я это реализовал, у меня после введение толщины стала выскакивать ошибка в строчке: "this.MdiParent = parent;", а именно: "Форма, указанная как MdiParent для данной формы, не является MdiContainer". Все перепробовал, весь интернет облазил, но ничего не получалось. Как бы не обязательно чтобы все работало как я сделал(с изменением толщины), главное чтоб сама суть выполнялась. Буду рад хоть какой-либо помощи.
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
public partial class Form2 : Form
    {
        ChildFormFigureEnum figure;
        public Form2()
        {
            InitializeComponent();
            this.Paint += Form2_Paint;
        }
 
        public void Form2_Paint(object sender, PaintEventArgs e)
        {
            Form3 d = new Form3();
            int tb = Convert.ToInt32(d.textBox1.Text);
            int w = this.ClientSize.Width, h = this.ClientSize.Height;
            switch (figure)
            {
                case ChildFormFigureEnum.Circle:
                    int depthC = tb;
                    Pen circle = new Pen(Color.FromArgb(255, 0, 0, 0), depthC);
                    e.Graphics.DrawEllipse(circle, 80, 100, 100, 100);
                    break;
                case ChildFormFigureEnum.Rectangle:
                    int depthR = 5;
                    Pen rectangle = new Pen(Color.FromArgb(255, 0, 0, 0), depthR);
                    e.Graphics.DrawRectangle(rectangle, 80, 100, 100, 50);
                    break;
                case ChildFormFigureEnum.Triangle:
                    int depthT = 5;
                    Pen triangle = new Pen(Color.FromArgb(255, 0, 0, 0), depthT);
                    e.Graphics.DrawPolygon(triangle, new Point[3]
                    {
                        new Point(w / 2, 0),
                        new Point(w, h),
                        new Point(0, h)
                    });
                    break;
                default:
                    break;
            }
        }
 
        public Form2(Form parent, ChildFormFigureEnum fig)
        {
            InitializeComponent();
            this.MdiParent = parent;
            figure = fig;
            this.Paint += Form2_Paint;
            switch (figure)
            {
                case ChildFormFigureEnum.Circle:
                    this.Text = "Круг";
                    break;
                case ChildFormFigureEnum.Rectangle:
                    this.Text = "Прямоугольник";
                    break;
                case ChildFormFigureEnum.Triangle:
                    this.Text = "Трегольник";
                    break;
                default:
                    break;
            }
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public enum ChildFormFigureEnum
    {
        Circle,
        Rectangle,
        Triangle
    }
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void кругToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form3 f3 = new Form3();
            f3.ShowDialog();
            //Form2 f2 = new Form2(this, ChildFormFigureEnum.Circle);
            //f2.Show();
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2(this, ChildFormFigureEnum.Circle);
            f2.MdiParent = this;
            f2.Show();
        }
    }
Вся прога для удобства.
Вложения
Тип файла: rar MDI.rar (48.5 Кб, 12 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.04.2021, 20:38
Ответы с готовыми решениями:

MDIContainer: как сделать, чтобы дочерние формы группировались как в VS
Всем привет. Вопрос следующий - есть родительская форма, есть дочерние. Как сделать, чтобы дочерние формы группировались как в студии. Т.е....

Как из Формы контейнера (MdiParent) узнать о закрытии дочерней формы
Всем привет! Вопрос вот в чем. Динамически создается дочерняя форма, и при ее закрытии нужно открыть другую дочернюю форму. Закрытие...

MdiParent не открывается дочерняя форма
Приветствую, возможно я очень сильно туплю) В общем Код дочерней формы: private static RegattaForm singleRegatta = null; ...

2
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
29.04.2021, 01:08
Вы используете паттерн MDI, подразумевающий Главную форму-контейнер и дочерние формы (MDIChild). Такая техника подразумевает, что есть одна форма-мама, и несколько форм-дочек, равных между собою. Дочками может управлять только мама, дочки же никак не могут управлять (создавать и уничтожать) других дочек.

Вы же пытаетесь из одной дочки (form3) создать "сестричку" (form2), что в данной технике невозможно.

Добавлено через 3 минуты
Однако никто не запрещает в MDI использовать обычные формы. Не дочки. Переделайте form2 на обычную форму, которую можете открывать модально или StayOnTop, чтобы она была видна поверх всех независимо от того, где находится фокус.

Добавлено через 8 минут
Но можно все сделать, не меняя тип дочерних форм.
Напишите public-методы у мамы (MDIForm), которые открывают нужную дочку и закрывают (какую именно - можно указать параметром и функции как form).
Если какой-нибудь дочке вздумается открыть или закрыть "сестричку", то она обращается к тому или иному методу мамы через this.parent.<Имя метода>(<указатель на форму-сестрицу>)
1
1 / 1 / 0
Регистрация: 17.09.2020
Сообщений: 38
29.04.2021, 07:18  [ТС]
Спасибо, хоть и хотелось бы немного побольше конкретики. Но попробую, мне ближе скорее 2-й вариант, хз получится ли реализовать. Прост сам по себе вариант "интересный".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2021, 07:18
Помогаю со студенческими работами здесь

Является ли указанная функция метрикой на заданном множестве
1. Является ли указанная функция метрикой на заданном множестве

Написать рекурсивную функцию, определяющую, является ли симметричной указанная часть заданной строки
Необходимо написать рекурсивную функцию, определяющую, является ли симметричной часть строки s, начиная с i-го элемента и кончая j-м. ...

Найти точку на данной сфере, которая является ближайшей к данной точке
Есть а б с , координаты центра сферы , x y z координаты точки за сферой , и радиус . Я понял так что мы проводим прямую между центром и...

Найти точку на данной сфере, которая является ближайшей к данной точке
Есть а б с , координаты центра сферы , x y z координаты точки за сферой , и радиус . Я понял так что мы проводим прямую между центром и...

Линия, которая является касательной к данной кривой в данной точке
Найти прямую которая является касательной к данной кривой в данной точке Помогите понять прав ли я,достаточно ли вместо x подставить...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru