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

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by madwort, 8 Apr 2010.

  1. madwort

    madwort New Member

    Joined:
    29 Mar 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Уважаемые товарищи программисты!
    Подскажите своему начинающему коллеге.
    Есть объект класса, описывающий резистор. В нем задано сопротивление и определена картинка, отображающая резистор.
    Как сделать следующее:
    Необходимо при создании нового объекта резистор отобразить его картинку на форме, и реализовать её перетаскивание по форме?
    (P.S. Все это для последующей реализации "сцепления" группы резисторов в цепь и рассчета цепи)
    Можно ли перетаскивать картинку по форме или надо создать какой-нибудь контейнер, например панель, и перетаскивать картинку там?
    Буду очень признателен за помощь.
     
  2. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    простой пример перетаскивания квадрата по форме с помощью мыши
    Code:
    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();
            }
        }
    }
    
     
  3. madwort

    madwort New Member

    Joined:
    29 Mar 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    to cheater_man:Спасибо!

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

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    С картинкой почти тоже самое. Опиши все по подробней, а то я тебя так не пойму.
    Каким методом загружаешь картинку?
     
  5. madwort

    madwort New Member

    Joined:
    29 Mar 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Картинку я добавил в файл с ресурсами проекта.
    после создал класс Resistor
    в описании класса указал путь к картинке из ресурсов

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

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

    Code:
    namespace Circuit
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void добавитьЭлементToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Resistor Detail = new Resistor();
                designerPanel.Invalidate();
            }
        }
    }
    
    Но как отобразить картинку класса и перетаскивать ее по щелчку мыши??
     
  6. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Тут не так все просто как кажется, если тебе потом нужно делать расчеты по построенной тобой цепи, тебе нужно будет юзать контейнеры.
    При создании нового компонента пихаешь его в контейнер. И клас резистора должен будет наследовать клас Component.А отобразить компонент на форме это только пол дела.
    Что-то типо этого.
    Скинь свой проект может чем-то и помогу.
    Вот пример перемещения картинки по щелчку мыши
    Code:
    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;
    
            }
        }
    }
    
     
    #6 cheater_man, 8 Apr 2010
    Last edited: 8 Apr 2010
  7. madwort

    madwort New Member

    Joined:
    29 Mar 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Хотел бы я скинуть проект, да там нет почти ничего пока. Недавно начал изучать С#, решил задачку поинтересней сделать, да и завис сразу. так что в проекте пока пусто. первый шаг дается с трудом...
     
  8. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Читай Джесс Либерти программирование на c#
    Трей Нэш C# 2008 краткий курс + source. И юзай msdn там все есть ;)