Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2017, 09:30   #1
djKeysi
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 18
По умолчанию Рисование на форме

Добрый день! как в коде прописать такое, то что на рисунке,
2121212.jpg
блоки которые выходят за границы -серого контейнера удалять и сдвигать
Значение длины и ширины берутся из лисбокса
Код:
            Graphics g1 = Graphics.FromHwnd(this.Handle);
            g1.SmoothingMode = SmoothingMode.HighQuality;
            g1.RotateTransform(-19);
 
            Pen pen1 = new Pen(Brushes.Black, 2);
            Pen pen2 = new Pen(Brushes.Black, 2);
            float x = 300;
            float y = 350;
            float left = x, top = y, maxWidth = 0;
 
 
            Color redColor = Color.Black;
            Graphics g = this.CreateGraphics();
            RectangleF r1 = new RectangleF(x, y, 706, 384); //длину на 3 и ширину на 5
 
            Matrix matrix = new Matrix();
            matrix.Rotate(-19, MatrixOrder.Append);
            //matrix.Translate(0, 0, MatrixOrder.Append);
            g.Transform = matrix;
 
            g.SmoothingMode =
          System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.FillRectangle(Brushes.Gray, r1);
 
 
            bool firstColumn = true; // особое поведение для первой колонки
            for (int i = 0; i < listBox_for_Conteiner_un.Items.Count; i++)
            {
                var element = listBox_for_Conteiner_un.Items[i].ToString();
                var width = dlina_for_conteiner(element) / 3;
 
                var height = shirina_for_conteiner(element) / 5;
 
                var rect = firstColumn ?
 
                    new RectangleF(left, top, width, height) : // Для первой колонки
                    new RectangleF(left, top, height, width); // Для остальных
 
                var pen = firstColumn ? pen1 : pen2;
                g1.DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height);
 
                // На каждой итерации увеличиваем ординату и вычисляем максимальную ширину колонки
                top += rect.Height + 8;
                maxWidth = Math.Max(maxWidth, rect.Width);
 
                //MessageBox.Show(top.ToString());
                // Как только ордината вышла за рамки обнуляем ее и увеличиваем абсциссу
 
                if (top > y + 384)
                {
                    top = y;
                    left += maxWidth + 8;
                    firstColumn = false;
                    maxWidth = 0;
 
                    //  MessageBox.Show(height.ToString());
                    if (left > y + 706 || width > 384)
                    {
 
 
                        Pen pen22 = new Pen(Brushes.White, 2);
 
                        g1.DrawRectangle(pen22, rect.X, rect.Y, rect.Width, rect.Height);
                        // firstColumn = false;
 
 
                        // g1.DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height);
 
                    }
                    else
                    {
                        top = y + 50;
                    }
 
                }
 
 
 
 
            }

 int shirina_for_conteiner(string input)
        {

            Regex reg_Nom = new Regex(@"(?<=Ширина = )(.*)(?=шир )", RegexOptions.IgnoreCase);
            int input2 = 0;
            foreach (Match match in reg_Nom.Matches(input))
            {
                input2 = Convert.ToInt32(match.Groups[1].Value);

            }
            return input2;
        }
int dlina_for_conteiner(string input)
        {

            Regex reg_Nom = new Regex(@"(?<=Длина = )(.*)(?= дл )", RegexOptions.IgnoreCase);
            int input2 = 0;
            foreach (Match match in reg_Nom.Matches(input))
            {
                input2 = Convert.ToInt32(match.Groups[1].Value);

            }
            return input2;
        }

Последний раз редактировалось djKeysi; 30.03.2017 в 09:46.
djKeysi вне форума Ответить с цитированием
Старый 30.03.2017, 12:50   #2
djKeysi
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 18
По умолчанию

Сделал но почему то начинаеш на форму добавлять например кнопку форма начинает перерисовыватся и выдавать ненужный результат
до 1.jpg после 2.jpg
Код:
Graphics g1 = Graphics.FromHwnd(this.Handle);
            g1.SmoothingMode = SmoothingMode.HighQuality;
            g1.RotateTransform(-19);

            Pen pen1 = new Pen(Brushes.Black, 2);
            Pen pen2 = new Pen(Brushes.Black, 2);
            float x = 300;
            float y = 350;
            float left = x, top = y, maxWidth = 0;


            Color redColor = Color.Black;
            Graphics g = this.CreateGraphics();
            g.DrawRectangle(Pens.YellowGreen, this.ClientRectangle.Left + 20, this.ClientRectangle.Top + 20, this.ClientRectangle.Width - 140, this.ClientRectangle.Height - 140);
            RectangleF r1 = new RectangleF(x, y, 706, 384); //длину на 3 и ширину на 5

            Matrix matrix = new Matrix();
            matrix.Rotate(-19, MatrixOrder.Append);
            //matrix.Translate(0, 0, MatrixOrder.Append);
            g.Transform = matrix;

            g.SmoothingMode =
          System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.FillRectangle(Brushes.Gray, r1);

            bool firstColumn = true; // особое поведение для первой колонки

            //RectangleF rect;
            //RectangleF rect2;
            for (int i = 0; i < listBox_for_Conteiner_un.Items.Count; i++)
            {

                var element = listBox_for_Conteiner_un.Items[i].ToString();
                var width = dlina_for_conteiner(element) / 3;
                var height = shirina_for_conteiner(element) / 5;

                //if(firstColumn)
                //     rect = new RectangleF(left, top, width, height);

                //else
                //     rect2 = new RectangleF(left, top, width, height);

                var rect = firstColumn ?
                    new RectangleF(left, top, width, height) : // Для первой колонки
                    new RectangleF(left, top, height, width); // Для остальных

                var pen = firstColumn ? pen1 : pen2;
                g1.DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height);

                // На каждой итерации увеличиваем ординату и вычисляем максимальную ширину колонки
                top += rect.Height + 8;
                maxWidth = Math.Max(maxWidth, rect.Width);

                // Как только ордината вышла за рамки обнуляем ее и увеличиваем абсциссу
                if (width >= 384)
                {
                    if (!firstColumn)
                    {
                        //firstColumn = false;
                        listBox_for_Conteiner_un.Items.RemoveAt(i);

                    }
                }
                // Pen pen223 = new Pen(Brushes.Blue, 2);
                // g1.DrawRectangle(pen223, rect.X, rect.Y, rect.Width, rect.Height);
                if (top > y + 384)
                {
                    top = y;
                    // MessageBox.Show(top.ToString());
                    left += maxWidth + 8;
                    firstColumn = false;
                    maxWidth = 0;




                    //  MessageBox.Show(height.ToString());
                    if (left > y + 706)
                    {
                        firstColumn = false;
                        Pen pen22 = new Pen(Brushes.White, 2);
                        g1.DrawRectangle(pen22, rect.X, rect.Y, rect.Width, rect.Height);

                    }
                    else
                    {
                        top = y + 50;
                    }
                    // label1.Text = i.ToString();
                    //int l = Convert.ToInt32(lbl_form1.Text);
                    //int l2 = Convert.ToInt32(label1.Text);



                }









            }

Последний раз редактировалось djKeysi; 30.03.2017 в 12:53.
djKeysi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование на форме C# LOST94 C# (си шарп) 11 15.06.2013 17:47
Рисование на форме Dissembler7 Помощь студентам 2 17.03.2012 22:43
Рисование на форме. (*_*) Общие вопросы C/C++ 1 22.09.2009 13:06
рисование на форме Kostua Помощь студентам 2 26.07.2008 16:24
Рисование на форме niva622 Помощь студентам 4 18.01.2007 09:34