Нужен первый шаг в создании проекта - C#

Узнай цену своей работы

Формулировка задачи:

Пролог

Доброго времени суток, дорогие коллеги. То, что я попрошу далее, знаю, что по идеи не решается на форумах тем методом, которым прошу у Вас я. Но решение данной задачи для знающих людей займет на вечность меньше времени, чем у меня - человека который только начал делать первые шаги в данном языке программирования, да к тому же и времени осталось, совсем ничего, как хоть что-нибудь, по решению данной задачи, мне предстоит продемонстрировать на столь суровый суд. Вот именно в этом "хоть что-нибудь" я Вас и прошу помочь мне, утопающему в нехватке времени.

Цели и задачи

А задача выглядит как то так: надо создать win приложение, при загрузке которого отображается основное окно приложение, где располагается некое поле (не важно какое,пускай это будет какая-нибудь графика (картинка)), так же,есть кнопка, по нажатию на которую вылезает панелька где расположено n-количество элементов чего-либо (допустим элементы то же в виде картинок). Для начала хотелось бы узнать у Вас: 1) как сделать так, чтобы при перетаскивании с панельки, на поле,какого-нибудь элемента, данный элемент пропадал из числа элементов панельки и появлялся в числе элементов отображенных на поле основного окна, при этом, велся бы подсчет того, сколько осталось элементов на панельке, и сколько элементов сейчас находится на поле. 2) Как сделать чтобы подсчет велся по разным типам элементов (допустим на поле 1 яблоко и 2 груши и все это в виде элементов-картинок). Заранее большое спасибо! Надеюсь ответы по данному сабжу будут полезны не только мне и уйдут в копилку данного портала =)

Решение задачи: «Нужен первый шаг в создании проекта»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
 
namespace WindowsFormsApplicationTest2 {
    public partial class MainForm : Form {
        // Количество картинок
        private const int BitmapsCount = 6;
 
        // Имена картинок
        private readonly string[] bitmapNames;
 
        // Массив PictureBox в которые будут загружаться картинки
        private readonly PictureBox[] pictureBoxes;
        private Rectangle dragBoxFromMouseDown;
 
        public MainForm() {
            InitializeComponent();
 
            // Создаём массив из pictureBox расположенных на форме
            pictureBoxes = new[] {
                pictureBox1,
                pictureBox2,
                pictureBox3,
                pictureBox4,
                pictureBox5,
                pictureBox6,
            };
 
            // Имена файлов
            bitmapNames = new[] {
                "1_01.jpg",
                "1_02.jpg",
                "1_03.jpg",
                "1_04.jpg",
                "1_05.jpg",
                "1_06.jpg",
            };
 
            for ( int i = 0; i < BitmapsCount; i++ ) {
                PictureBox currentBox = pictureBoxes[ i ];
 
                // Разрешаем перетаскиваение
                currentBox.AllowDrop = true;
 
                // Присваиваем обработчики событий мыши и перетаскивания
                currentBox.MouseDown += PictureBoxMouseDown;
                currentBox.MouseMove += PictureBoxMouseMove;
                currentBox.MouseUp += PictureBoxMouseUp;
                currentBox.DragDrop += PictureBoxDragDrop;
                currentBox.DragOver += PictureBoxDragOver;
            }
 
            // Загружаем картинки
            LoadImages();
        }
 
        private void LoadImages() {
            // Перемешиваем имена файлов
            var bitmapNamesShuffled = bitmapNames.RandomShuffle();
 
            // Папка с картинками
            const string bitmapFolder = "Images";
 
            for ( int i = 0; i < BitmapsCount; i++ ) {
                PictureBox currentBox = pictureBoxes[ i ];
 
                // Имя файла
                string currentImageName = bitmapNamesShuffled[ i ];
 
                // Путь к файлу
                string path = Path.Combine( Environment.CurrentDirectory, bitmapFolder, currentImageName );
 
                // Загружаем картинки
                currentBox.Load( path );
            }
        }
 
        // Перемешиваем и загружаем
        private void ButtonShuffleClick( object sender, EventArgs e ) {
            LoadImages();
        }
 
        private void PictureBoxMouseDown( object sender, MouseEventArgs e ) {
            Size dragSize = SystemInformation.DragSize;
 
            dragBoxFromMouseDown = new Rectangle( new Point( e.X - (dragSize.Width / 2),
                e.Y - (dragSize.Height / 2) ), dragSize );
        }
 
        private void PictureBoxMouseMove( object sender, MouseEventArgs e ) {
            if ( (e.Button & MouseButtons.Left) == MouseButtons.Left ) {
                PictureBox pictureBox = (PictureBox)sender;
 
                if ( dragBoxFromMouseDown != Rectangle.Empty &&
                    !dragBoxFromMouseDown.Contains( e.X, e.Y ) ) {
                    // При перетаскивании передаётся ссылка на текущий pictureBox
                    pictureBox.DoDragDrop( pictureBox, DragDropEffects.Move );
                }
            }
        }
 
        private void PictureBoxMouseUp( object sender, MouseEventArgs e ) {
            dragBoxFromMouseDown = Rectangle.Empty;
        }
 
        private void PictureBoxDragDrop( object sender, DragEventArgs e ) {
            if ( e.Data.GetDataPresent( typeof ( PictureBox ) ) ) {
                // Полученный pictureBox
                PictureBox item = (PictureBox)e.Data.GetData( typeof ( PictureBox ) );
 
                // Текущий pictureBox
                PictureBox box = (PictureBox)sender;
 
                // Меняем картинки местами
                Image tempImage = box.Image;
                box.Image = item.Image;
                item.Image = tempImage;
            }
        }
 
        private void PictureBoxDragOver( object sender, DragEventArgs e ) {
            e.Effect = DragDropEffects.Move;
        }
    }
 
    // Дополнение, перемешивающее массив
    public static class Extensions {
        public static IList<T> RandomShuffle<T>( this IEnumerable<T> list ) {
            Random random = new Random();
            var shuffle = new List<T>( list );
            for ( int i = 2; i < shuffle.Count; ++i ) {
                T temp = shuffle[ i ];
                int nextRandom = random.Next( i - 1 );
                shuffle[ i ] = shuffle[ nextRandom ];
                shuffle[ nextRandom ] = temp;
            }
            return shuffle;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы