Нужен первый шаг в создании проекта - 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;
}
}
}