Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Перетаскивание картинки по форме С# (https://forum.antichat.xyz/showthread.php?t=194526)

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

Цитата:

Сообщение от madwort
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_Click(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

Цитата:

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

Читай Джесс Либерти программирование на c#
Трей Нэш C# 2008 краткий курс + source. И юзай msdn там все есть ;)


Время: 14:35