Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 26.04.2017
Сообщений: 2
1
.NET 4.x

Поменять местами Button-ы в форме. Автоматический сбор матрицы из кнопок

20.02.2019, 05:34. Просмотров 1743. Ответов 3
Метки ai (Все метки)


Доброго времени суток уважаемые форумчане. Помогите пожалуйста. Уже неделю пытаюсь придумать что нибудь рабочее. Ситуация такая. Есть поле 5 на 6. Есть 30 кнопок. В каждой кнопке есть буква. Если есть пустой button поменять его позицию со своей по X или Y, но не больше чем одна кнопка. Как в игре пятнашки. Сделать перемещение наглядным.Дальше создать алгоритм сортировки по алфавиту. Но самое главное помогите сделать механизм перемещения Button-ов.
Есть по такой код
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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;
using System.Timers;
using System.Threading;
 
namespace ИИЛаб1Версия2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int CheckButtonNum =0;
        void CheckToMoveXY()
        {
            Button[] ButtonFirstArray = new Button[] { button1, button2, button3, button4, button5, button6, button7, button8, button9, button10, button11, button12, button13, button14, button15, button16, button17, button18, button19, button20, button21, button22, button23, button24, button25, button26, button27, button28, button29, button30 };
            Button[,] ButtonsArray = new Button[5, 6];
            Point pointButton;
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 6; j++)
                {
                    ButtonsArray[i, j] = ButtonFirstArray[j];
                }
            }
            //for (int j=0; j<6;j++)
            //{
            //    for (int i = 0; i <10; i++)
            //    {
            //        if (/*ButtonsArray[1].Text != "" && */ButtonsArray[3].Text == "" && ButtonsArray[7].Text == ""&& ButtonsArray[13].Text == ""&& ButtonsArray[21].Text == ""&& ButtonsArray[26].Text == "")
            //        {
            //            Point pt = ButtonsArray[i].Location;
            //            ButtonsArray[i].Location = ButtonsArray[j+1].Location;
            //            ButtonsArray[j+1].Location = pt;
            //        }
            //        //if (ButtonsArray[i].Text != "" && ButtonsArray[j].Text == "")
            //        //{
            //        //    Point pt = ButtonsArray[i].Location;
            //        //    ButtonsArray[i].Location = ButtonsArray[j].Location;
            //        //    ButtonsArray[j].Location = pt;
            //        //}
            //    }
            //}
            switch (CheckButtonNum)//Будем проверять каждый блок по очереди
            {
                case 3:
                    //pointButton = ButtonFirstArray[1].Location;//Координаты второго блока
 
                    for (int i = 0;i<5;i++)
                    {
                        for (int j=0;j<6;j++)
                        {
                            if (ButtonFirstArray[i].Text!=""&&ButtonFirstArray[i+1].Text==""&&ButtonFirstArray[i].Location.X<=140)
                            {
                                //MessageBox.Show(Convert.ToString());
                                Point pt = ButtonFirstArray[2].Location;
                                ButtonFirstArray[2].Location = ButtonFirstArray[i+1].Location;//Нужно сделать функцию поиска пустых клеток
                                ButtonFirstArray[i+1].Location = pt;
                            }
                        }
                    }
 
                    //if (pointButton.X <= 143|| pointButton.X >= 143)
                    //{
                    //    Point pt = ButtonsArray[1].Location;
                    //    ButtonsArray[1].Location = ButtonsArray[3].Location;//Нужно сделать функцию поиска пустых клеток
                    //    ButtonsArray[3].Location = pt;
                    //}
                    break;
            }
        }
        private void button31_Click(object sender, EventArgs e)
        {
            CheckButtonNum++;//Для тестирования
            CheckToMoveXY();
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
 
        }
    }
}
0
Миниатюры
Поменять местами Button-ы в форме. Автоматический сбор матрицы из кнопок  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2019, 05:34
Ответы с готовыми решениями:

Как поменять местами строки матрицы, задаваемые на форме?
Здравствуйте! Подскажите пожалуйста, как поменять местами строки в StringGrid, задаваемые в форме? ...

Работа модуля класса Button (выполнение одного действия для всех кнопок на форме)
Здравствуйте, подскажите пожалуйста, есть модуль класса при нажатии любой кнопки выполнить одно и...

Как поменять местами цвета кнопок?
Всем привет.Нам дали лабу с заданием: 5.Добавить в форму две кнопки (1 и 2), для которых задать...

Как поменять названия кнопок местами в Java?
есть поле из 5 кнопок с числами(названиями кнопок) от 1 до 5. Помогите написать код для того чтобы...

3
148 / 100 / 51
Регистрация: 08.01.2013
Сообщений: 581
20.02.2019, 07:55 2
Цитата Сообщение от seitkaliyev Посмотреть сообщение
Но самое главное помогите сделать механизм перемещения Button-ов.
Собственно сам код:
Кликните здесь для просмотра всего текста

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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 Pyatnashki
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int x = 12, y = 12, counter=0;
        string name;
        Button[] buttons;
        private void Form1_Load(object sender, EventArgs e)
        {
            counter = 0;
            buttons = new Button[4];            
            for (int i = 0; i < buttons.Length/2; i++)
            {
                for (int j = 0; j < buttons.Length/2; j++)
                {                    
                    x =12 + j * 40;
                    y =12 + i * 40;
                    buttons[counter] = new Button();
                    buttons[counter].Location = new Point(x, y);
                    buttons[counter].Name = "But" + counter.ToString();
                    buttons[counter].Size = new System.Drawing.Size(40, 40);
                    buttons[counter].TabIndex = counter+1;
                    buttons[counter].Text = (counter+1).ToString();
                    buttons[counter].Click += Control_Click;
                    Controls.Add(buttons[counter]);
                    counter++;
                }
            }
            counter = 0;
        }
        
        private void Control_Click(object sender, EventArgs e)
        {
            counter++;
            if(counter==1)
            {
                for (int i = 0; i < buttons.Length; i++)
                {
                    if (sender == buttons[i])
                    {
                        name = buttons[i].Name;
                        x = buttons[i].Location.X;
                        y = buttons[i].Location.Y;
                        break;
                    }
                }
            }
            else
            {
                for (int i = 0; i < buttons.Length; i++)
                {
                    if (sender == buttons[i])
                    {
                        if(!name.Equals(buttons[i].Name))
                        {
                            counter = 0;
                            (Controls[name] as Button).Location = new Point(buttons[i].Location.X,buttons[i].Location.Y);
                            buttons[i].Location = new Point(x, y);
                            break;
                        }
                        else
                        {
                            counter = 1;
                        }
                    }
                }
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
        }
    }
}

P.S. Нажал на 1 потом нажал на 2, программа поменяла местами. Если несколько раз нажмешь на одну и ту же кнопку, ни че не произойдет, а если следом на другую, произойдет обмен.
1
0 / 0 / 0
Регистрация: 26.04.2017
Сообщений: 2
23.02.2019, 14:34  [ТС] 3
Спасибо вам. Правда я сделал по другому. Теперь проблема что буквы заменяются по диагонали. Есть идея как это исправить. Должно быть строго по x или y. Проект прилагаю внизу
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
64
65
66
67
68
69
70
71
72
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 ИИЛаб1Версия3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Button[] buttonList;
        Button[,] buttons;
        private void button_Click(object sender, EventArgs e)
        {
            Button button = (Button)sender;
            if (button.Text!="")
            {
            for (int x = 0; x < 6; x++)
            {
                for (int y = 0; y < 6; y++)
                {
                    if (buttons[x, y] == button)
                    {
                            CheckNeighbours(x,y);
                    }
                }
            }
            }
        }
        void CheckNeighbours(int xB, int yB)
        {
            for (int x = xB-1;x<=xB+1;x++)
            {
                for (int y = yB-1; y <= yB + 1; y++)
                {
                    if (x >= 0 && x < 6 && y>=0 && y < 6 && (xB == x || yB == y))
                    {
                        if (buttons[x, y].Text == "")
                        {
                            Point pt = buttons[xB,yB].Location;
                            buttons[xB,yB].Location = buttons[x,y].Location;
                            buttons[x,y].Location = pt;
                        }
                    }
                }
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            FillTheAraryOfButtons();
        }
        void FillTheAraryOfButtons()
        {
            buttonList = new Button[36]{ button1, button2, button3, button4, button5, button6, button7, button8, button9, button10, button11, button12, button13, button14, button15, button16, button17, button18, button19, button20, button21, button22, button23, button24, button25, button26, button27, button28, button29, button30,button31, button33, button34, button35, button36, button37 };
            buttons = new Button[6, 6];
            buttons[0, 0] = buttonList[0];  buttons[0, 1] = buttonList[1];  buttons[0, 2] = buttonList[2];  buttons[0, 3] = buttonList[3];  buttons[0, 4] = buttonList[4];  buttons[0, 5] = buttonList[5];//1 строка 6 столбцов 5
            buttons[1, 0] = buttonList[6];  buttons[1, 1] = buttonList[7];  buttons[1, 2] = buttonList[8];  buttons[1, 3] = buttonList[9];  buttons[1, 4] = buttonList[10]; buttons[1, 5] = buttonList[11];//2 строка
            buttons[2, 0] = buttonList[12]; buttons[2, 1] = buttonList[13]; buttons[2, 2] = buttonList[14]; buttons[2, 3] = buttonList[15]; buttons[2, 4] = buttonList[16]; buttons[2, 5] = buttonList[17];//3 строка
            buttons[3, 0] = buttonList[18]; buttons[3, 1] = buttonList[19]; buttons[3, 2] = buttonList[20]; buttons[3, 3] = buttonList[21]; buttons[3, 4] = buttonList[22]; buttons[3, 5] = buttonList[23];//4 строка
            buttons[4, 0] = buttonList[24]; buttons[4, 1] = buttonList[25]; buttons[4, 2] = buttonList[26]; buttons[4, 3] = buttonList[27]; buttons[4, 4] = buttonList[28]; buttons[4, 5] = buttonList[29];//5 строка
            buttons[5, 0] = buttonList[30]; buttons[5, 1] = buttonList[31]; buttons[5, 2] = buttonList[32]; buttons[5, 3] = buttonList[33]; buttons[5, 4] = buttonList[34]; buttons[5, 5] = buttonList[35];//6 строка
        }
    }
}
0
Вложения
Тип файла: rar ИИЛаб1Версия3.rar (206.0 Кб, 8 просмотров)
148 / 100 / 51
Регистрация: 08.01.2013
Сообщений: 581
23.02.2019, 16:00 4
Цитата Сообщение от seitkaliyev Посмотреть сообщение
Теперь проблема что буквы заменяются по диагонали. Есть идея как это исправить
Поставь условие
[1;1] [2;1]
Кликните здесь для просмотра всего текста

C#
1
2
3
4
if( 
    ((x==(x1-1))||(x==(x1+1))&&(y=y1)) &&
    ((y==(y1-1))||(x==(y1+1))&&(x=x1))
  )


Добавлено через 34 минуты
x,y - 1 кнопка
x1,y1 - вторая кнопка

Добавлено через 7 секунд
x,y - 1 кнопка
x1,y1 - вторая кнопка
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.02.2019, 16:00

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

У матрицы с размером M*N поменять местами строки с наибольшим и наименьшим элементом местами
Всем привет, подскажите пожалуйста. Как в Windows Form у матрицы с размером M*N поменять местами...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.