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

Поменять местами элементы в коллекции

07.02.2017, 10:48. Показов 2847. Ответов 17

Author24 — интернет-сервис помощи студентам
Сейчас у меня создается коллекция из 36 картинок. Как мне сделать так, чтобы по клику на один из элементов, поменялись местами элементы вокруг него?
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
namespace WindowsFormsApplication1
{
    
    public partial class Form1 : Form
    {
        public class ItemGr
        {
            public Image Img { set; get; }
            public Point Pos { set; get; }
 
            public ItemGr(Image img, Point pos)
            {
                Img = img;
                Pos = pos;
            }
        }
 
        public Form1()
        {
            InitializeComponent();
            Bitmap B = new Bitmap(global::WindowsFormsApplication1.Properties.Resources.back);
            this.BackgroundImage = B;
            for (int i = 0; i < 6; i++)
            {
                for (int j = 0; j < 6; j++)
                {
 
                    if ((i < 1 & j < 3) | (i < 3 & j < 1) | ((i == 2 & (j == 2 | j == 3 | j == 4))) | (i == 3 & j == 2))
                    {
                        _ItemsGr.Add(new ItemGr(Properties.Resources._1, new Point(210 + i * 100, 65 + j * 100)));
                    }
 
                    if ((i < 1 & j > 2) | (i < 4 & j > 4) | (i == 1 & j == 4) | ((i == 2 | i == 3) & j == 1))
                    {
                        _ItemsGr.Add(new ItemGr(Properties.Resources._3, new Point(210 + i * 100, 65 + j * 100)));
                    }
 
                    if ((i > 2 & j < 1) | (i > 3 & j < 3) | (i == 1 & (j == 2 | j == 3)))
                    {
                        _ItemsGr.Add(new ItemGr(Properties.Resources._2, new Point(210 + i * 100, 65 + j * 100)));
                    }
 
                    if ((i == 1 & j == 1) | (i > 3 & j > 2) | (i == 3 & (j == 3 | j == 4)))
                    {
                        _ItemsGr.Add(new ItemGr(Properties.Resources._4, new Point(210 + i * 100, 65 + j * 100)));
                    }
                    //_ItemsGr[i,j].Pos.X.
                    //_ItemsGr.CopyTo(arrayPict);
                }
            }
            
            _ItemsGr.CopyTo(arrayPict);
            
            
        }
 
        private List<ItemGr> _ItemsGr = new List<ItemGr>();
        ItemGr[] arrayPict = new ItemGr[36];
        private ItemGr _SelectedItemGr = null;
 
 
        protected override void OnPaint(PaintEventArgs e)
        {
            foreach (var it in _ItemsGr)
            {
                e.Graphics.DrawImage(it.Img, it.Pos);
            }
 
            if (_SelectedItemGr != null)
            {
                e.Graphics.DrawRectangle(Pens.Red, new Rectangle(_SelectedItemGr.Pos, _SelectedItemGr.Img.Size));
                e.Graphics.DrawImage(_SelectedItemGr.Img, new Rectangle(_SelectedItemGr.Pos, new Size(_SelectedItemGr.Img.Size.Width + 10, _SelectedItemGr.Img.Size.Height + 10)));
            }
        }
 
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            Invalidate();
        }
 
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
 
            for (int i = 0; i < arrayPict.Length; i += 2)
            {
                var a = arrayPict[i];
                arrayPict[i] = arrayPict[i + 1];
                arrayPict[i + 1] = a;
                //Console.Write(arrayPict[i] + " " + array[i + 1] + " ");
            }
            foreach (var it in _ItemsGr)
            {
                if (e.X > it.Pos.X && e.Y > it.Pos.Y && e.X < it.Pos.X + it.Img.Size.Width && e.Y < it.Pos.Y + it.Img.Size.Height)
                {
                    
                        _SelectedItemGr = it;
                        return;
                }
            }
        }
 
        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            _SelectedItemGr = null;
        }
 
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.02.2017, 10:48
Ответы с готовыми решениями:

Как поменять местами элементы в ListBox
Как в listbox поменять местами все элементы, чтобы первый стал последним, второй предпоследним и...

Поменять местами наибольший и наименьший элементы
Даны числа a1,a2,.,an. Поменять местами наибольший и наименьший элементы Массив я сгенерировал ,...

Поменять местами минимальный и максимальный элементы массива
//Дан массив размера N. Поменять местами его минимальный и максимальный элементы. using...

Не могу понять как поменять местами элементы массива
Задание:найдите наименьший элемент массива из десяти элементов и поменяйте его местами с последним...

17
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
07.02.2017, 12:02 2
У Вас ведь есть свойство
C#
1
public Point Pos { set; get; }
Оно, как я понимаю, отвечает за позицию картинки на форме? Вот значения этого свойства и меняйте у соседних картинок...
0
1 / 1 / 0
Регистрация: 23.08.2016
Сообщений: 33
07.02.2017, 12:08  [ТС] 3
Shogun31337, да, но как написать, чтобы двигались только соседние элементы вокруг элемента, на который я кликну?
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
07.02.2017, 12:16 4
Эммм... Так Вы же определяете элемент коллекции, на который происходит клик! Соответственно, у элементов с индексами +1 и -1 нужно менять свойства. Не понимаю проблемы, если честно.
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
07.02.2017, 14:57 5
10vital08, у вас тут так всё плохо, что даже опытному программисту будет затруднительно реализовать поворот элементов. Вот этот код получше будет, приспосабливайте:
Кликните здесь для просмотра всего текста
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
class MainForm: Form
{
    private BoardControl _boardControl = new BoardControl();
    
    public MainForm()
    {
        _boardControl.Parent = this;
        _boardControl.Dock = DockStyle.Fill;
        _boardControl.Board = Board.CreateDefault();
    }
}
 
void Main()
{
    Application.Run(new MainForm());
}
 
enum CellType
{
    Heart,
    Diamond,
    Club,
    Spade
};
 
class Board
{
    private readonly CellType[,] _cells;
 
    private CellType? ElementAtOrDefault(int row, int column)
    {
        if (row < 0 || row >= Height || column < 0 || column >= Width)
        {
            return null;
        }
        
        return _cells[row, column];
    }
    
    private IList<Point> GetPositionsAround(int row, int column)
    {
        // по часовой, начиная с 12:00
        int[] dx = { 0, 1, 1, 1, 0, -1, -1, -1 };
        int[] dy = { -1, -1, 0, 1, 1, 1, 0, -1 };
 
        return dx.Zip(dy, (x, y) => new Point(column + x, row + y))
            .Where(position => ElementAtOrDefault(position.Y, position.X) != null)
            .ToList();
    }
    
    private IList<CellType> GetValuesAround(int row, int column)
    {
        return GetPositionsAround(row, column)
            .Select(position => _cells[position.Y, position.X])
            .ToList();
    }
    
    private static IList<CellType> ShiftLeft(IList<CellType> values)
    {
        return values.Select((v, i) => values[(i + 1) % values.Count])
            .ToList();
    }
    
    public int Height { get; }
    public int Width { get; }
 
    public Board(int height, int width)
    {
        Width = width;
        Height = height;
        
        _cells = new CellType[height, width];
    }
 
    public CellType this[int row, int column]
    {
        get
        {
            return (CellType)_cells[row, column];
        }
        set
        {
            _cells[row, column] = value;
        }
    }
 
    public void Revolve(int pivotRow, int pivotColumn)
    {
        var positionsAround = GetPositionsAround(pivotRow, pivotColumn);
        var shiftedValues = ShiftLeft(GetValuesAround(pivotRow, pivotColumn));
        
        for (int i = 0; i < positionsAround.Count; i++)
        {
            _cells[positionsAround[i].Y, positionsAround[i].X] = shiftedValues[i];
        }
    }
    
    public static Board CreateDefault()
    {
        int[,] map =
        {
            { 0, 1, 2, 3, 0, 1 },
            { 1, 1, 2, 2, 1, 3 },
            { 1, 1, 1, 2, 3, 3 },
            { 2, 1, 2, 3, 1, 3 },
            { 3, 3, 1, 2, 2, 2 },
            { 2, 2, 2, 1, 1, 1 }
        };
        
        var board = new Board(map.GetLength(0), map.GetLength(1));
        
        for (int y = 0; y < board.Height; y++)
        {
            for (int x = 0; x < board.Width; x++)
            {
                board[y, x] = (CellType)map[y, x];
            }
        }
        
        return board;
    }
}
 
class BoardDrawer
{
    private readonly Graphics _graphics;
    private static Dictionary<CellType, Image> _images;
    
    public BoardDrawer(Graphics g)
    {
        _graphics = g;
 
        if (_images != null) return;
        
        _images = new Dictionary<CellType, Image>();
        
        var rootPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        
        foreach (var cellTypeName in Enum.GetNames(typeof(CellType)))
        {
            var cellType = (CellType)Enum.Parse(typeof(CellType), cellTypeName);
            var image = Image.FromFile(Path.Combine(rootPath, cellTypeName + ".jpg"));
            _images.Add(cellType, image);
        }
    }
    
    public void Draw(Board board, SizeF totalCellSize, SizeF imageSize)
    {
        var borderSize = SizeF.Subtract(totalCellSize, imageSize);
        borderSize.Width /= 2;
        borderSize.Height /= 2;
        
        for (int row = 0; row < board.Height; row++)
        {
            for (int column = 0; column < board.Width; column++)
            {
                var leftTop = new PointF(totalCellSize.Width * column + borderSize.Width, 
                    totalCellSize.Height * row + borderSize.Height);
                
                var image = _images[board[row, column]];
                
                _graphics.DrawImage(image, new RectangleF(leftTop, imageSize));
            }
        }
    }
}
 
class BoardControl : UserControl
{
    public Board Board { get; set; }
    public float CellBorderWidth { get; set; } = 2;
 
    public BoardControl()
    {
        SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw |
            ControlStyles.SupportsTransparentBackColor | ControlStyles.AllPaintingInWmPaint, true);
        SetStyle(ControlStyles.StandardDoubleClick, false);
        BackColor = Color.Black;
    }
 
    protected override void OnPaint(PaintEventArgs e)
    {
        if (Board == null) return; 
        
        var g = e.Graphics;
        
        var cellSize = new SizeF((float)Width / Board.Width, (float)Height / Board.Height);
        var imageSize = SizeF.Subtract(cellSize, new SizeF(2 * CellBorderWidth, 2 * CellBorderWidth));
        
        var drawer = new BoardDrawer(g);
        drawer.Draw(Board, cellSize, imageSize);
    }
    
    private Point? PointToCell(Point point)
    {
        if (Board == null) return null;
        
        int x = (int)(point.X / (Width / (float)Board.Width));
        int y = (int)(point.Y / (Height / (float)Board.Height));
        
        return new Point(x, y);
    }
    
    protected override void OnClick(EventArgs e)
    {
        base.OnClick(e);
        
        if (Board == null) return;
        
        var mouse = e as MouseEventArgs;
        if (mouse.Button != MouseButtons.Left) return;
        
        var cellPos = PointToCell(new Point(mouse.X, mouse.Y));
        if (cellPos == null) return;
        
        Board.Revolve(cellPos.Value.Y, cellPos.Value.X);
        Invalidate();
    }
}
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
07.02.2017, 18:48 6
Вот самое простое решение:
Кликните здесь для просмотра всего текста

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
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using FlipImage.Properties;
 
namespace FlipImage
{
    public class Img : UserControl
    {
        public Image _Image
        {
            get { return base.BackgroundImage; }
            set { base.BackgroundImage = value; }
        }
    }
 
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        List<Img> ImageList = new List<Img>(); 
 
        private void Form1_Load(object sender, EventArgs e)
        {
            Img img1 = new Img
            {
                _Image = Resources.img1,
                Location = new Point(10, 10),
                Width = 100,
                Height = 100
            };
            img1.Click +=img_Click;
            ImageList.Add(img1);
            Img img2 = new Img
            {
                _Image = Resources.img2,
                Location = new Point(110, 10),
                Width = 100,
                Height = 100
            };
            img2.Click += img_Click;
            ImageList.Add(img2);
            Img img3 = new Img
            {
                _Image = Resources.img3,
                Location = new Point(210, 10),
                Width = 100,
                Height = 100
            };
            img3.Click += img_Click;
            ImageList.Add(img3);
 
            foreach (var img in ImageList)
            {
                this.Controls.Add(img);
            }
        }
 
        private void img_Click(object sender, EventArgs e)
        {
            int index = Array.IndexOf(ImageList.ToArray(), sender);
 
            Point tmp = ImageList[index - 1].Location;
            ImageList[index - 1].Location = ImageList[index + 1].Location;
            ImageList[index + 1].Location = tmp;
 
            this.Refresh();
        }
    }
}

По большому счету, даже новый класс создавать не обязательно. Можно воспользоваться любым существующим контролом, у которого есть свойство BackgroundImage. Ну и в обработчик нужно добавить проверки, чтобы за пределы массива не вылезти!

Добавлено через 3 минуты
UPD: Туплю... Подписку на событие Click лучше в цикл foreach перенести!
0
1 / 1 / 0
Регистрация: 23.08.2016
Сообщений: 33
08.02.2017, 20:05  [ТС] 7
Shogun31337, но при этом ничего не отрисовывается
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
92
93
94
95
96
97
98
99
100
101
102
103
104
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 PuzzleGame.Properties;
using System.Collections;
 
 
namespace PuzzleGame
{
 
    public class Img : UserControl
    {
        public Image _Image
        {
            get { return base.BackgroundImage; }
            set { base.BackgroundImage = value; }
        }
 
        private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // Img
            // 
            this.Cursor = System.Windows.Forms.Cursors.Default;
            this.Name = "Img";
            this.Load += new System.EventHandler(this.Img_Load);
            this.ResumeLayout(false);
 
        }
 
        private void Img_Load(object sender, EventArgs e)
        {
 
        }
    }
 
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        List<Img> ImageList = new List<Img>();
 
        private void Form1_Load(object sender, EventArgs e)
        {
            Img img1 = new Img
            {
                _Image = Resources._1,
                Location = new Point(10, 10),
                Width = 100,
                Height = 100
            };
            
            ImageList.Add(img1);
            Img img2 = new Img
            {
                _Image = Resources._2,
                Location = new Point(110, 10),
                Width = 100,
                Height = 100
            };
            
            ImageList.Add(img2);
            Img img3 = new Img
            {
                _Image = Resources._3,
                Location = new Point(210, 10),
                Width = 100,
                Height = 100
            };
            //img3.Click += img_Click;
            ImageList.Add(img3);
 
            foreach (var img in ImageList)
            {
                img1.Click += img_Click;
                img2.Click += img_Click;
                img3.Click += img_Click;
                this.Controls.Add(img);
            }
        }
 
        private void img_Click(object sender, EventArgs e)
        {
            int index = Array.IndexOf(ImageList.ToArray(), sender);
 
            Point tmp = ImageList[index - 1].Location;
            ImageList[index - 1].Location = ImageList[index + 1].Location;
            ImageList[index + 1].Location = tmp;
 
            this.Refresh();
        }
 
    } 
}
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
08.02.2017, 20:19 8
10vital08, Что именно не отрисовывается?
0
1 / 1 / 0
Регистрация: 23.08.2016
Сообщений: 33
08.02.2017, 20:24  [ТС] 9
Shogun31337, ничего. чистая форма на выходе
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
08.02.2017, 20:25 10
И, кстати, когда я говорил, что
Цитата Сообщение от Shogun31337 Посмотреть сообщение
Подписку на событие Click лучше в цикл foreach перенести!
я имел в виду вот такой код:
C#
1
2
3
4
5
foreach (var img in ImageList)
{
    img.Click += img_Click;
    this.Controls.Add(img);
}
1
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
08.02.2017, 20:29 11
Цитата Сообщение от 10vital08 Посмотреть сообщение
ничего. чистая форма на выходе
Быть того не может!
Миниатюры
Поменять местами элементы в коллекции   Поменять местами элементы в коллекции  
0
1 / 1 / 0
Регистрация: 23.08.2016
Сообщений: 33
09.02.2017, 11:15  [ТС] 12
Shogun31337, создал новый проект, ваш код заработал, спасибо. Теперь буду приспосабливать для своей задачи.
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
09.02.2017, 11:27 13
10vital08, да не за что! Успехов Вам!
0
1 / 1 / 0
Регистрация: 23.08.2016
Сообщений: 33
09.02.2017, 13:28  [ТС] 14
Shogun31337, вопросик такой, подскажите пожалуйста:
У меня квадрат 6 на 6 из картинок, при нажатии на один элемент крутятся элементы вокруг него, а когда пытаюсь крутить элементы вокруг другого, то элементы по указанным индексам находятся в другом месте уже. Можно ли индексы обновлять после каждого события Click?
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
namespace ImagePuzzle
{
    
 
    public partial class PuzzleGame : Form
    {
        public PuzzleGame()
        {
            InitializeComponent();
            
            Bitmap B = new Bitmap(Resources.back);
            this.BackgroundImage = B;
        }
 
        List<Img> ImageList = new List<Img>();
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
            for (int i = 0; i < 6; i++)
            {
                for (int j = 0; j < 6; j++)
                {
 
                    if ((i < 1 & j < 3) | (i < 3 & j < 1) | ((i == 2 & (j == 2 | j == 3 | j == 4))) | (i == 3 & j == 2))
                    {
                        Img img1 = new Img
                        {
                            _Image = Resources._1,
                            BackColor = Color.Transparent,
                            Location = new Point(210 + i * 100, 65 + j * 100),
                            Width = 96,
                            Height = 96
                        };
                        ImageList.Add(img1);
                    }
 
                    if ((i < 1 & j > 2) | (i < 4 & j > 4) | (i == 1 & j == 4) | ((i == 2 | i == 3) & j == 1))
                    {
                        Img img3 = new Img
                        {
                            _Image = Resources._3,
                            BackColor = Color.Transparent,
                            Location = new Point(210 + i * 100, 65 + j * 100),
                            Width = 96,
                            Height = 96
                        };
                        ImageList.Add(img3);
                    }
 
                    if ((i > 2 & j < 1) | (i > 3 & j < 3) | (i == 1 & (j == 2 | j == 3)))
                    {
                        Img img2 = new Img
                        {
                            _Image = Resources._2,
                            BackColor = Color.Transparent,
                            Location = new Point(210 + i * 100, 65 + j * 100),
                            Width = 96,
                            Height = 96
                        };
                        ImageList.Add(img2);
                    }
 
                    if ((i == 1 & j == 1) | (i > 3 & j > 2) | (i == 3 & (j == 3 | j == 4)))
                    {
                        Img img4 = new Img
                        {
                            _Image = Resources._4,
                            BackColor = Color.Transparent,
                            Location = new Point(210 + i * 100, 65 + j * 100),
                            Width = 96,
                            Height = 96
                        };
                        ImageList.Add(img4);
                    }
                }
            }
 
            foreach (var img in ImageList)
            {
                img.Click += img_Click;
                this.Controls.Add(img);
            }
        }
 
        private void img_Click(object sender, EventArgs e)
        {
            int index = Array.IndexOf(ImageList.ToArray(), sender);
            
            Point tempUp = ImageList[index - 1].Location;
            Point tempDown = ImageList[index + 1].Location;
            Point tempLeft = ImageList[index - 6].Location;
            Point tempRight = ImageList[index + 6].Location;
 
            ImageList[index - 1].Location = ImageList[index + 5].Location;
            ImageList[index + 5].Location = tempRight;
            ImageList[index + 6].Location = ImageList[index + 7].Location;
            ImageList[index + 7].Location = tempDown;
            ImageList[index + 1].Location = ImageList[index - 5].Location;
            ImageList[index - 5].Location = tempLeft;
            ImageList[index - 6].Location = ImageList[index - 7].Location;
            ImageList[index - 7].Location = tempUp;
 
            //this.Refresh();
        }
 
        
    }
    public class Img : UserControl
    {
        public Image _Image
        {
            get { return base.BackgroundImage; }
            set { base.BackgroundImage = value; }
        }
    }
}
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
09.02.2017, 13:44 15
Ну а почему нельзя то? Конечно можно! Меняйте местами элементы в списке и все!
0
1 / 1 / 0
Регистрация: 23.08.2016
Сообщений: 33
09.02.2017, 15:28  [ТС] 16
Shogun31337,
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
private void img_Click(object sender, EventArgs e)
        {
            
            int index = Array.IndexOf(ImageList.ToArray(), sender);
            Point _tempUp = ImageList[index - 1].Location;
            Point _tempDown = ImageList[index + 1].Location;
            Point _tempLeft = ImageList[index - 6].Location;
            Point _tempRight = ImageList[index + 6].Location;
 
            ImageList[index - 1].Location = ImageList[index + 5].Location;
            ImageList[index + 5].Location = _tempRight;
            ImageList[index + 6].Location = ImageList[index + 7].Location;
            ImageList[index + 7].Location = _tempDown;
            ImageList[index + 1].Location = ImageList[index - 5].Location;
            ImageList[index - 5].Location = _tempLeft;
            ImageList[index - 6].Location = ImageList[index - 7].Location;
            ImageList[index - 7].Location = _tempUp;
 
            var tempUp = ImageList[index - 1];
            var tempDown = ImageList[index + 1];
            var tempLeft = ImageList[index - 6];
            var tempRight = ImageList[index + 6];
 
            ImageList[index - 1] = ImageList[index + 5];
            ImageList[index + 5] = tempRight;
            ImageList[index + 6] = ImageList[index + 7];
            ImageList[index + 7] = tempDown;
            ImageList[index + 1] = ImageList[index - 5];
            ImageList[index - 5] = tempLeft;
            ImageList[index - 6] = ImageList[index - 7];
            ImageList[index - 7] = tempUp;
        }
Поменял местами - та же ошибка
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
09.02.2017, 16:02 17
10vital08, скиньте проект тут.
0
1 / 1 / 0
Регистрация: 23.08.2016
Сообщений: 33
09.02.2017, 16:05  [ТС] 18
Shogun31337,
Вложения
Тип файла: rar ImagePuzzle.rar (425.6 Кб, 3 просмотров)
0
09.02.2017, 16:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.02.2017, 16:05
Помогаю со студенческими работами здесь

Поменять местами элементы двумерного массива побочной диагонали
программа не работает и ошибку не выдает. Подскажите плз уже Запарился с этой задачей! using...

Поменять местами наибольший чётный и наименьший нечётный элементы массива
Разработать приложение демонстрирующее работу с одномерный массивом, заполнение массива на форме...

Ввести целочисленный массив. Поменять местами максимальный и минимальный элементы массива
Здравствуйте! Задание: Ввести целочисленный массив состоящий из 9 элементов. Максимальный и...

Дан одномерный массив. Поменять местами максималтный и минимальный элемент местами. Вывести 2 массива исходный
Дан одномерный массив. Поменять местами максималтный и минимальный элемент местами. Вывести 2...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru