shahriar1996 Ответов: 1

Я хочу найти решение своей проблемы


Этот код позволяет выбрать прямоугольную и квадратную области.

Но я не хочу, чтобы эти области вмешивались.

Это означает, что вы не можете повторно выбрать регион.
помогите мне.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        Random r = new Random();
        int x1, y1, tag = 0;
        int bLeft, bTop;
        int sLeft, sTop;
        Button[] q = new Button[84];
        Color bc;
        Color col;
        private void Form1_Load(object sender, EventArgs e)
        {
            int scale = 28;
            pictureBox1.Width = scale * 35;
            pictureBox1.Height = scale * 24;
            Width = pictureBox1.Width + pictureBox1.Left + 17;
            Height = pictureBox1.Height + pictureBox1.Top + 40;
            int c = 0;
            for (int a = 0; a <= 22 * scale; a += 2 * scale)
            {
                for (int b = 0; b <= 30 * scale; b += 5 * scale)
                {
                    q[c] = new Button();
                    q[c].Left = b;
                 
                    q[c].Top = a;
                    q[c].Width = 5 * scale;
                    q[c].Height = 2 * scale;
                    q[c].MouseDown += new MouseEventHandler(down);
                    q[c].MouseMove += new MouseEventHandler(move);
                    q[c].MouseUp += new MouseEventHandler(up);
                    q[c].Text = (c + 1).ToString();
                    pictureBox1.Controls.Add(q[c]);
                    c++;
                }
            }
           
        }
        void down(Object s, MouseEventArgs e)
        {
            col = Color.FromArgb(r.Next(256), r.Next(256), r.Next(256));
            Button b = (Button)s;
            x1 = b.Left;
            y1 = b.Top;
        }

        void move(Object s, MouseEventArgs e)
        {


        }
        void up(object s, MouseEventArgs e)
        {
            Button b = (Button)s;
            int State = 0;
            if (e.X > 0 && e.Y > 0 )
            {
                State = 1;
            }
            else if (e.X < 0 && e.Y > 0)
            {
                State = 2;
            }
            else if (e.X > 0 && e.Y < 0)
            {
                State = 3;
            }
            else if (e.X < 0 && e.Y < 0)
            {
                State = 4;
            }

            if (e.X > 0)
            {
                bLeft = b.Left + e.X;
                sLeft = x1;
            }
            else
            
            {
                bLeft = x1;
                sLeft = b.Left + e.X;
            }
            if (e.Y > 0)
            {
                bTop = b.Top + e.Y;
                sTop = y1;
            }
            else
            {
                bTop = y1;
                sTop = b.Top + e.Y;
            }
            foreach (Button item in q)
            {
               

                    switch (State)
                    {
                        case 1:

                            if (item.Left >= sLeft && item.Left <= bLeft && item.Top >= sTop && item.Top <= bTop)
                            {
                                item.BackColor = col;
                            }

                            break;
                        case 2:

                            if (item.Left + item.Width >= sLeft && item.Left <= bLeft && item.Top >= sTop && item.Top <= bTop)
                            {
                                item.BackColor = col;

                            }
                            break;
                        case 3:

                            if (item.Left >= sLeft && item.Left <= bLeft && item.Top + item.Height >= sTop && item.Top <= bTop)
                            {
                                item.BackColor = col;
                            }

                            break;
                        case 4:


                            if (item.Left + item.Width >= sLeft && item.Left <= bLeft && item.Top + item.Height >= sTop && item.Top <= bTop)
                            {
                                item.BackColor = col;
                            }

                            break;
                           
                        default:
                            break;
                            
                   
                   
                }

            }

            Button d = s as Button;
            Text = (d.Left / 28 * 10).ToString() + " " + (d.Top / 28 * 10).ToString();
            int m = Convert.ToInt32((d.Left / 28 * 10));
            int n = Convert.ToInt32((d.Top / 28 * 10));

        }
    }
}


Что я уже пробовал:

Этот код позволяет выбрать прямоугольную и квадратную области.
Но я не хочу, чтобы эти области вмешивались.
Это означает, что вы не можете повторно выбрать регион.

BillWoodruff

Ваш код показывает, что вы создаете 84 кнопки и добавляете их в коллекцию элементов управления PictureBox. Это очень странно, и я держу пари, что есть гораздо более простой метод для достижения вашей цели.

Если вы подробно расскажете, какова цель, я отвечу дальше.

1 Ответов

Рейтинг:
0

OriginalGriff

Используйте Класс региона[^] и это метод пересечения - если результирующая область непустая, они "интерферируют"


CPallini

5.

shahriar1996

мольбы Эдите мой код. ТПХ