[[designer]]
 

Adapter.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace designer
{
    public partial class Adapter : UserControl
    {
        private Control comp;
 
        public Adapter (Control c)
        {
            InitializeComponent();
            comp = c;
            comp.MouseDown += Adapter_MouseDown;
            comp.MouseMove += Adapter_MouseMove;
            comp.MouseUp += Adapter_MouseUp;
            comp.Tag = this;
        }
 
        bool click = false;
        int X0, Y0;
 
        private void Adapter_MouseDown(object sender, MouseEventArgs e)
        {
            click = true;
            X0 = e.X;
            Y0 = e.Y;
            if (e.Button == MouseButtons.Middle)
                Form1.getInstance().propGrid.SelectedObject = comp;
        }
 
        private void Adapter_MouseMove(object sender, MouseEventArgs e)
        {
            if (click)
            {
                if (e.Button == MouseButtons.Left)
                {
                    comp.Left += e.X - X0;
                    comp.Top += e.Y - Y0;
                }
                if (e.Button == MouseButtons.Right)
                {
                    comp.Width += e.X - X0;
                    comp.Height += e.Y - Y0;
                    X0 = e.X;
                    Y0 = e.Y;
                }
 
            }
        }
 
        private void Adapter_MouseUp(object sender, MouseEventArgs e)
        {
            click = false;
        }
 
        private void Adapter_DragEnter(object sender, DragEventArgs e)
        {
 
        }
 
        private void Adapter_DragDrop(object sender, DragEventArgs e)
        {
 
        }
    }
}

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
using System.Drawing.Design;
 
namespace designer
{
    public partial class Form1 : Form
    {
        private static Form1 instance = null;
        public static Form1 getInstance() { return instance; }
 
        public Form1()
        {
            instance = this;
            InitializeComponent();
 
            addComponent (typeof (Button));
            addComponent (typeof (TreeView));
            addComponent (typeof (MyControl), typeof (Panel));
            addComponent (typeof (DataGrid));
 
            addColor ("red");
            addColor ("cornflowerblue");
            addColor ("lime");
            addColor ("yellow");
 
            area.AllowDrop = true;
        }
 
        public void addComponent (Type type, Type image_type = null)
        {
            // using System.Drawing.Design;
            ToolboxItem item = new ToolboxItem (type);
 
            ToolStripButton btn = new ToolStripButton ();
            btn.Image = item.Bitmap;
            btn.ToolTipText = item.DisplayName;
            btn.Tag = item;
            btn.MouseDown += component_MouseDown;
 
            if (image_type != null)
                btn.Image = new ToolboxItem (image_type).Bitmap;
 
            componentPalette.Items.Add (btn);
        }
 
        public void addColor (Color color)
        {
            const int size = 32;
            Bitmap img = new Bitmap (size, size);
            Graphics g = Graphics.FromImage (img);
            g.FillEllipse (new SolidBrush (color), 1, 1, size-2, size-2);
 
            ToolStripButton btn = new ToolStripButton ();
            btn.Image = img;
            btn.ToolTipText = color.Name;
            btn.Tag = color;
            btn.MouseDown += color_MouseDown;
            colorPalette.Items.Add (btn);
        }
 
        public void addColor (string name)
        {
            addColor (Color.FromName (name));
        }
 
        ToolboxItem drag_item = null;
        Color drag_color;
 
        private void component_MouseDown (object sender, EventArgs e)
        {
            drag_item = (sender as ToolStripButton).Tag as ToolboxItem;
            DoDragDrop ("component", DragDropEffects.Copy);
 
            /*
            IComponent [] comp_list = item.CreateComponents ();
            Control comp = comp_list[0] as Control;
            area.Controls.Add (comp);
            */
        }
 
        private void color_MouseDown (object sender, EventArgs e)
        {
            drag_color = (Color) ((sender as ToolStripButton).Tag);
            DoDragDrop ("color", DragDropEffects.Copy);
        }
 
        private void area_DragEnter (object sender, DragEventArgs e)
        {
            string fmt = e.Data.GetData ("Text") as string;
            if (fmt == "component" || fmt == "color")
                e.Effect = e.AllowedEffect;
        }
 
        private void area_DragDrop (object sender, DragEventArgs e)
        {
            string fmt = e.Data.GetData ("Text") as string;
            if (fmt == "component" )
            {
                IComponent[] comp_list = drag_item.CreateComponents ();
                Control comp = comp_list[0] as Control;
                Point p = area.PointToClient (new Point (e.X, e.Y));
                Size s = comp.Size;
                comp.Location = p;
                comp.Size = s;
                area.Controls.Add (comp);
                statusLabel.Text = "X=" + e.X + ", Y=" + e.Y;
                new Adapter (comp);
                displayTree ();
            }
            if (fmt == "color")
            {
                area.BackColor = drag_color;
            }
        }
 
        private void displayTree ()
        {
            tree.Nodes.Clear ();
            displayBranch (tree.Nodes, area.Controls);
        }
 
        private void displayBranch (TreeNodeCollection target,
                                    Control.ControlCollection ctrls)
        {
            foreach (Control c in ctrls)
            {
                TreeNode n = new TreeNode ();
                n.Text = c.GetType().Name;
                n.Tag = c;
                target.Add(n);
 
                displayBranch (n.Nodes, c.Controls);
            }
        }
 
        private void tree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            propGrid.SelectedObject = e.Node.Tag;
        }
    }
 
    // Tools > Options > Text Editor > C# > CodeStyle > Formatting > Spacing
}
 
 
 
designer.txt · Last modified: 2017/12/04 17:08 by 147.32.8.115
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki