PDA

Просмотр полной версии : Перетаскивание картинки по форме С#


madwort
08.04.2010, 12:49
Уважаемые товарищи программисты!
Подскажите своему начинающему коллеге.
Есть объект класса, описывающий резистор. В нем задано сопротивление и определена картинка, отображающая резистор.
Как сделать следующее:
Необходимо при создании нового объекта резистор отобразить его картинку на форме, и реализовать её перетаскивание по форме?
(P.S. Все это для последующей реализации "сцепления" группы резисторов в цепь и рассчета цепи)
Можно ли перетаскивать картинку по форме или надо создать какой-нибудь контейнер, например панель, и перетаскивать картинку там?
Буду очень признателен за помощь.

cheater_man
08.04.2010, 12:57
простой пример перетаскивания квадрата по форме с помощью мыши

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public int mouse_x;
public int mouse_y;
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawRectangle(new Pen(Brushes.Red), mouse_x, mouse_y, 20, 20);
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
mouse_x = e.X;
mouse_y = e.Y;
Invalidate();
}
}
}

madwort
08.04.2010, 15:22
to cheater_man:Спасибо!

Но как реализовать перетаскивание именно загруженной картинки по щелчку мыши??

cheater_man
08.04.2010, 15:33
to cheater_man:Спасибо!

Но как реализовать перетаскивание именно загруженной картинки по щелчку мыши??
С картинкой почти тоже самое. Опиши все по подробней, а то я тебя так не пойму.
Каким методом загружаешь картинку?

madwort
08.04.2010, 15:54
Картинку я добавил в файл с ресурсами проекта.
после создал класс Resistor
в описании класса указал путь к картинке из ресурсов


namespace Circuit
{
class Resistor
{
Image ResistorImage =Circuit.Properties.Resources.ResistorPict;
int resistance;
}
}



После хочу добавить объект класса (чтоб при создании объекта на форме отрисовывалась картинка элемента, которую потом можно было перетаскивать по форме)


namespace Circuit
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void добавитьЭлементToolStripMenuItem_Cl ick(object sender, EventArgs e)
{
Resistor Detail = new Resistor();
designerPanel.Invalidate();
}
}
}


Но как отобразить картинку класса и перетаскивать ее по щелчку мыши??

cheater_man
08.04.2010, 17:28
Тут не так все просто как кажется, если тебе потом нужно делать расчеты по построенной тобой цепи, тебе нужно будет юзать контейнеры.
При создании нового компонента пихаешь его в контейнер. И клас резистора должен будет наследовать клас Component.А отобразить компонент на форме это только пол дела.
Что-то типо этого.
Скинь свой проект может чем-то и помогу.
Вот пример перемещения картинки по щелчку мыши

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace _23
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Image img = Image.FromFile(openFileDialog1.FileName);
pictureBox1.Image = img;
}
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (coun == 1)
{
pictureBox1.Location = new System.Drawing.Point(e.X-50, e.Y-50);
}
}
int coun=0;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (coun == 0)
coun++;
else coun = 0;

}
}
}

madwort
08.04.2010, 20:35
Хотел бы я скинуть проект, да там нет почти ничего пока. Недавно начал изучать С#, решил задачку поинтересней сделать, да и завис сразу. так что в проекте пока пусто. первый шаг дается с трудом...

cheater_man
08.04.2010, 20:41
Хотел бы я скинуть проект, да там нет почти ничего пока. Недавно начал изучать С#, решил задачку поинтересней сделать, да и завис сразу. так что в проекте пока пусто. первый шаг дается с трудом...
Читай Джесс Либерти программирование на c#
Трей Нэш C# 2008 краткий курс + source. И юзай msdn там все есть ;)