//мышь превращаем в руку, перемещение предмета private void Stick_MouseMove(object sender, MouseEventArgs e) { FlowersUser subj = sender as FlowersUser; //мышь превращаем в руку var img = new Bitmap(Properties.Resources.рука); Icon icon = Icon.FromHandle(img.GetHicon()); Cursor cur = new Cursor(icon.Handle); Cursor.Current = cur; //перемещение предмета if (drag) { int x = Cursor.Position.X - (fieldForm.Left + (fieldForm.Size.Width - fieldForm.ClientSize.Width) / 2) - offsetX; int y = Cursor.Position.Y - (fieldForm.Top + (fieldForm.Size.Height - fieldForm.ClientSize.Height - 4)) - offsetY; if (x > 0 && x < fieldForm.ClientSize.Width - subj.Width) { subj.Left = x; } else { subj.Left = x > 0 ? x = fieldForm.ClientSize.Width - subj.Width : 0; } if (y > 0 && y < fieldForm.ClientSize.Height - subj.Height) { subj.Top = y; } else { subj.Top = y > 0 ? y = fieldForm.ClientSize.Height - subj.Height : 0; } } }
//зажимаем предмет на панели private void Stick_MouseDown(object sender, MouseEventArgs e) { FlowersUser pikch = sender as FlowersUser; foreach (var strSub in subjectPanelGame) //проверяем - предмет на панели? { if (pikch == strSub.Value) { drag = true; offsetX = e.Location.X; offsetY = e.Location.Y; strSub.Key.subState = SubjectState.Apply; } } }
//отправляем предмет с поля на панель private void Stick_Click(object sender, EventArgs e) { foreach (Point location in world.fillPanel.Keys) { FlowersUser thing = sender as FlowersUser;//приводим к типу if (world.fillPanel[location] == false) { foreach (Subject str in world.subjectsWorld) { if (subjectLookupWorld.ContainsKey(str)) { Subject subj = str; subj.subState = SubjectState.OnSubjectForm; subj.Location = location; //устанавливаем для предмета-объекта координаты ячейки subjectPanelGame.Add(subj, thing); //добавляем в панель subjectLookupWorld.Remove(subj); } } } } }
//рисуем панель с предметами void DrawSubjectsOnTheForms(Graphics g) { Pen pen = new Pen(Color.Gainsboro, 5); g.DrawRectangle(pen, 914, 10, 50, 50); g.DrawRectangle(pen, 914, 60, 50, 50); g.DrawRectangle(pen, 914, 110, 50, 50); g.DrawRectangle(pen, 914, 160, 50, 50); g.DrawRectangle(pen, 914, 210, 50, 50); g.DrawRectangle(pen, 914, 260, 50, 50); //рисуем предметы на игровом поле foreach (Subject subj in world.subjectsWorld) { FlowersUser stick; if (!subjectLookupWorld.ContainsKey(subj) && !subjectPanelGame.ContainsKey(subj)) { //добавляем предмет stick = new FlowersUser(subj.pikcher); fieldForm.Controls.Add(stick); //ПОДПИСКИ НА СОБЫТИЯ ПРОГРАММНО СОЗДАННОГО ЭЛЕМЕНТА-- НА ФОРМЕ ЕГО НЕТУ! stick.Click += Stick_Click; //подписываемся на клик по ветке stick.MouseDown += Stick_MouseDown; stick.MouseUp += Stick_MouseUp; stick.MouseMove += Stick_MouseMove; subjectLookupWorld.Add(subj, stick); stick.Location = subj.Location; } } //рисуем предметы на панели предметов foreach (Subject subj in subjectPanelGame.Keys) { if (subj.subState == SubjectState.OnSubjectForm) { subjectPanelGame[subj].Location = subj.Location; } } }
//возвращаем неиспользованный предмет на панель private void Stick_MouseUp(object sender, MouseEventArgs e) { FlowersUser pikch = sender as FlowersUser; //здесь проверяем условие -- подходит ли предмет? если да, то в subjectPanelGame его удаляем и отовсюду drag = false; Subject subj; foreach (var strSub in subjectPanelGame) //на панели визуально его нет, но пока считаем, что есть { if (pikch == strSub.Value) { subj = strSub.Key; subj.subState = SubjectState.OnSubjectForm; } } foreach (Point location in world.fillPanel.Keys) { if (world.fillPanel[location] == false) { pikch.Location = location; } } }