Fake Drag And Drop

image_pdfimage_print



   

/*
User Interfaces in C#: Windows Forms and Custom Controls
by Matthew MacDonald

Publisher: Apress
ISBN: 1590590457
*/

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

namespace FakeDragAndDrop
{
  /// <summary>
  /// Summary description for FakeDragAndDrop.
  /// </summary>
  public class FakeDragAndDrop : System.Windows.Forms.Form
  {
    internal System.Windows.Forms.Label lblDragger;
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.Container components = null;

    public FakeDragAndDrop()
    {
      //
      // Required for Windows Form Designer support
      //
      InitializeComponent();

      //
      // TODO: Add any constructor code after InitializeComponent call
      //
    }

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    protected override void Dispose( bool disposing )
    {
      if( disposing )
      {
        if (components != null) 
        {
          components.Dispose();
        }
      }
      base.Dispose( disposing );
    }

    #region Windows Form Designer generated code
    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
      System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(FakeDragAndDrop));
      this.lblDragger = new System.Windows.Forms.Label();
      this.SuspendLayout();
      // 
      // lblDragger
      // 
      this.lblDragger.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
      this.lblDragger.Image = ((System.Drawing.Bitmap)(resources.GetObject("lblDragger.Image")));
      this.lblDragger.Location = new System.Drawing.Point(110, 105);
      this.lblDragger.Name = "lblDragger";
      this.lblDragger.Size = new System.Drawing.Size(72, 56);
      this.lblDragger.TabIndex = 2;
      this.lblDragger.MouseUp += new System.Windows.Forms.MouseEventHandler(this.lblDragger_MouseUp);
      this.lblDragger.MouseMove += new System.Windows.Forms.MouseEventHandler(this.lblDragger_MouseMove);
      this.lblDragger.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lblDragger_MouseDown);
      // 
      // FakeDragAndDrop
      // 
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(292, 266);
      this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                      this.lblDragger});
      this.Name = "FakeDragAndDrop";
      this.Text = "Fake Drag And Drop";
      this.ResumeLayout(false);

    }
    #endregion

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main() 
    {
      Application.Run(new FakeDragAndDrop());
    }

    // Keep track of when fake "drag and drop" mode is enabled.
    private bool isDragging = false;

    // Store the location where the user clicked the control.
    private int clickOffsetX, clickOffsetY;

    // Start dragging.
    private void lblDragger_MouseDown(System.Object sender,
      System.Windows.Forms.MouseEventArgs e)
    {
      isDragging = true;
      clickOffsetX = e.X;
      clickOffsetY = e.Y;
    }

    // End dragging.
    private void lblDragger_MouseUp(System.Object sender,
      System.Windows.Forms.MouseEventArgs e)
    {
      isDragging = false;
    }

    // Move the control (during dragging).
    private void lblDragger_MouseMove(System.Object sender,
      System.Windows.Forms.MouseEventArgs e)
    {
      if (isDragging == true)
      {
        // The control coordinates are converted into form coordinates
        // by adding the label position offset.
        // The offset where the user clicked in the control is also
        // accounted for. Otherwise, it looks like the top-left corner
        // of the label is attached to the mouse.
        lblDragger.Left = e.X + lblDragger.Left - clickOffsetX;
        lblDragger.Top = e.Y + lblDragger.Top - clickOffsetY;
      }
    }

  }
}


           
          


FakeDragAndDrop.zip( 23 k)