using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Windows.Forms; class ImageDrop : Form { bool bIsTarget; Image image; public static void Main() { Application.Run(new ImageDrop()); } public ImageDrop() { AllowDrop = true; } protected override void OnDragOver(DragEventArgs dea) { if (dea.Data.GetDataPresent(DataFormats.FileDrop) || dea.Data.GetDataPresent(typeof(Metafile)) || dea.Data.GetDataPresent(typeof(Bitmap))) { if ((dea.AllowedEffect & DragDropEffects.Move) != 0) dea.Effect = DragDropEffects.Move; if (((dea.AllowedEffect & DragDropEffects.Copy) != 0) && ((dea.KeyState & 0x08) != 0)) // Ctrl key dea.Effect = DragDropEffects.Copy; } } protected override void OnDragDrop(DragEventArgs dea) { if (dea.Data.GetDataPresent(DataFormats.FileDrop)) { string[] astr = (string[])dea.Data.GetData(DataFormats.FileDrop); image = Image.FromFile(astr[0]); Invalidate(); } else { if (dea.Data.GetDataPresent(typeof(Metafile))) image = (Image)dea.Data.GetData(typeof(Metafile)); else if (dea.Data.GetDataPresent(typeof(Bitmap))) image = (Image)dea.Data.GetData(typeof(Bitmap)); bIsTarget = true; Invalidate(); } } protected override void OnMouseDown(MouseEventArgs mea) { if (image != null) { bIsTarget = false; DragDropEffects dde = DoDragDrop(image,DragDropEffects.Copy | DragDropEffects.Move); if (dde == DragDropEffects.Move && !bIsTarget) image = null; } } }
GUI Windows Form
Control Docking
/* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794 */ using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace Docking { /// <summary> /// Summary description for FormDocking. /// </summary> public class FormDocking : System.Windows.Forms.Form { private System.Windows.Forms.StatusBar statusBar1; private System.Windows.Forms.Label label1; private System.Windows.Forms.TextBox textBox1; /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.Container components = null; public FormDocking() { // // 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() { this.statusBar1 = new System.Windows.Forms.StatusBar(); this.textBox1 = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // statusBar1 // this.statusBar1.Location = new System.Drawing.Point(0, 253); this.statusBar1.Name = "statusBar1"; this.statusBar1.Size = new System.Drawing.Size(292, 20); this.statusBar1.TabIndex = 9; this.statusBar1.Text = "statusBar1"; // // textBox1 // this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; this.textBox1.Multiline = true; this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(292, 273); this.textBox1.TabIndex = 2; this.textBox1.Text = "Top Bottom Left Right"; // // label1 // this.label1.Dock = System.Windows.Forms.DockStyle.Top; this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(292, 16); this.label1.TabIndex = 10; this.label1.Text = "Docking Sample"; this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // FormDocking // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 273); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.label1, this.statusBar1, this.textBox1}); this.Name = "FormDocking"; this.Text = "FormDocking"; this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new FormDocking()); } } }
Docking Demo
/* 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 Docking { /// <summary> /// Summary description for Docking. /// </summary> public class Docking : System.Windows.Forms.Form { internal System.Windows.Forms.GroupBox GroupBox1; internal System.Windows.Forms.Button cmdUpdate; internal System.Windows.Forms.NumericUpDown udDockPaddingForm; internal System.Windows.Forms.NumericUpDown udDockPaddingPanel; internal System.Windows.Forms.ComboBox lstDockPanel; internal System.Windows.Forms.Label Label3; internal System.Windows.Forms.Label Label4; internal System.Windows.Forms.ComboBox lstDockTextBox; internal System.Windows.Forms.Label Label2; internal System.Windows.Forms.Label Label1; internal System.Windows.Forms.Panel pnlDock; internal System.Windows.Forms.TextBox txtDock; /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.Container components = null; public Docking() { // // 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() { this.GroupBox1 = new System.Windows.Forms.GroupBox(); this.cmdUpdate = new System.Windows.Forms.Button(); this.udDockPaddingForm = new System.Windows.Forms.NumericUpDown(); this.udDockPaddingPanel = new System.Windows.Forms.NumericUpDown(); this.lstDockPanel = new System.Windows.Forms.ComboBox(); this.Label3 = new System.Windows.Forms.Label(); this.Label4 = new System.Windows.Forms.Label(); this.lstDockTextBox = new System.Windows.Forms.ComboBox(); this.Label2 = new System.Windows.Forms.Label(); this.Label1 = new System.Windows.Forms.Label(); this.pnlDock = new System.Windows.Forms.Panel(); this.txtDock = new System.Windows.Forms.TextBox(); this.GroupBox1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.udDockPaddingForm)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.udDockPaddingPanel)).BeginInit(); this.pnlDock.SuspendLayout(); this.SuspendLayout(); // // GroupBox1 // this.GroupBox1.Controls.AddRange(new System.Windows.Forms.Control[] { this.cmdUpdate, this.udDockPaddingForm, this.udDockPaddingPanel, this.lstDockPanel, this.Label3, this.Label4, this.lstDockTextBox, this.Label2, this.Label1}); this.GroupBox1.Location = new System.Drawing.Point(192, 20); this.GroupBox1.Name = "GroupBox1"; this.GroupBox1.Size = new System.Drawing.Size(284, 224); this.GroupBox1.TabIndex = 12; this.GroupBox1.TabStop = false; this.GroupBox1.Text = "Configure"; // // cmdUpdate // this.cmdUpdate.Location = new System.Drawing.Point(160, 180); this.cmdUpdate.Name = "cmdUpdate"; this.cmdUpdate.Size = new System.Drawing.Size(84, 24); this.cmdUpdate.TabIndex = 10; this.cmdUpdate.Text = "Update"; this.cmdUpdate.Click += new System.EventHandler(this.cmdUpdate_Click); // // udDockPaddingForm // this.udDockPaddingForm.Increment = new System.Decimal(new int[] { 5, 0, 0, 0}); this.udDockPaddingForm.Location = new System.Drawing.Point(160, 32); this.udDockPaddingForm.Name = "udDockPaddingForm"; this.udDockPaddingForm.Size = new System.Drawing.Size(52, 21); this.udDockPaddingForm.TabIndex = 4; // // udDockPaddingPanel // this.udDockPaddingPanel.Increment = new System.Decimal(new int[] { 5, 0, 0, 0}); this.udDockPaddingPanel.Location = new System.Drawing.Point(160, 56); this.udDockPaddingPanel.Name = "udDockPaddingPanel"; this.udDockPaddingPanel.Size = new System.Drawing.Size(52, 21); this.udDockPaddingPanel.TabIndex = 5; this.udDockPaddingPanel.Value = new System.Decimal(new int[] { 20, 0, 0, 0}); // // lstDockPanel // this.lstDockPanel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.lstDockPanel.Location = new System.Drawing.Point(156, 100); this.lstDockPanel.Name = "lstDockPanel"; this.lstDockPanel.Size = new System.Drawing.Size(92, 21); this.lstDockPanel.TabIndex = 8; // // Label3 // this.Label3.Location = new System.Drawing.Point(16, 104); this.Label3.Name = "Label3"; this.Label3.Size = new System.Drawing.Size(136, 20); this.Label3.TabIndex = 6; this.Label3.Text = "Dock Panel To:"; // // Label4 // this.Label4.Location = new System.Drawing.Point(16, 128); this.Label4.Name = "Label4"; this.Label4.Size = new System.Drawing.Size(136, 20); this.Label4.TabIndex = 7; this.Label4.Text = "Dock TextBox To:"; // // lstDockTextBox // this.lstDockTextBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.lstDockTextBox.Location = new System.Drawing.Point(156, 124); this.lstDockTextBox.Name = "lstDockTextBox"; this.lstDockTextBox.Size = new System.Drawing.Size(92, 21); this.lstDockTextBox.TabIndex = 9; // // Label2 // this.Label2.Location = new System.Drawing.Point(16, 60); this.Label2.Name = "Label2"; this.Label2.Size = new System.Drawing.Size(136, 20); this.Label2.TabIndex = 3; this.Label2.Text = "Set Panel's DockPadding:"; // // Label1 // this.Label1.Location = new System.Drawing.Point(16, 36); this.Label1.Name = "Label1"; this.Label1.Size = new System.Drawing.Size(136, 20); this.Label1.TabIndex = 2; this.Label1.Text = "Set Form's DockPadding:"; // // pnlDock // this.pnlDock.Controls.AddRange(new System.Windows.Forms.Control[] { this.txtDock}); this.pnlDock.Dock = System.Windows.Forms.DockStyle.Left; this.pnlDock.DockPadding.All = 20; this.pnlDock.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.pnlDock.Name = "pnlDock"; this.pnlDock.Size = new System.Drawing.Size(224, 314); this.pnlDock.TabIndex = 11; // // txtDock // this.txtDock.Dock = System.Windows.Forms.DockStyle.Left; this.txtDock.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.txtDock.Location = new System.Drawing.Point(20, 20); this.txtDock.Multiline = true; this.txtDock.Name = "txtDock"; this.txtDock.Size = new System.Drawing.Size(108, 274); this.txtDock.TabIndex = 0; this.txtDock.Text = "I'm docked to the edge of this Panel. The Panel is docked to the edge of the f" + "orm. The Panel's DockPadding gives the necessary room to breathe."; // // Docking // this.AutoScaleBaseSize = new System.Drawing.Size(5, 14); this.ClientSize = new System.Drawing.Size(496, 314); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.GroupBox1, this.pnlDock}); this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.Name = "Docking"; this.Text = "Docking At Work"; this.Load += new System.EventHandler(this.Docking_Load); this.GroupBox1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.udDockPaddingForm)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.udDockPaddingPanel)).EndInit(); this.pnlDock.ResumeLayout(false); this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new Docking()); } private void Docking_Load(object sender, System.EventArgs e) { lstDockPanel.Items.AddRange(Enum.GetNames(Dock.GetType())); lstDockTextBox.Items.AddRange(Enum.GetNames(Dock.GetType())); } private void cmdUpdate_Click(object sender, System.EventArgs e) { this.DockPadding.All = (int)udDockPaddingForm.Value; pnlDock.DockPadding.All = (int)udDockPaddingPanel.Value; // Now we use some rather unusual code to translate the string // in the listbox into an enumeration object that can be used // to set the Dock property. // This looks quite strange, but is actually just one more // part of the shared class library. // First we get the converter that can do the job. TypeConverter converter; converter = TypeDescriptor.GetConverter(Dock.GetType()); // Then we use it to convert the string. pnlDock.Dock = (DockStyle)converter.ConvertFromString(lstDockPanel.Text); txtDock.Dock = (DockStyle)converter.ConvertFromString(lstDockTextBox.Text); } } }
Dock Style: Top
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; public class AnchorForm : System.Windows.Forms.Form { private System.Windows.Forms.Button button1; public AnchorForm() { InitializeComponent(); CenterToScreen(); } private void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.Controls.AddRange(new System.Windows.Forms.Control[] {this.button1}); this.Text = "Anchoring (and Docking) Controls"; // dock Top button1.Dock = DockStyle.Top; button1.Text = "Anchor: " + button1.Anchor.ToString() + " Dock: " + button1.Dock.ToString(); } static void Main() { Application.Run(new AnchorForm()); } }
Dock Style: Bottom
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; public class AnchorForm : System.Windows.Forms.Form { private System.Windows.Forms.Button button1; public AnchorForm() { InitializeComponent(); CenterToScreen(); } private void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.Controls.AddRange(new System.Windows.Forms.Control[] {this.button1}); this.Text = "Anchoring (and Docking) Controls"; //dock Bottom button1.Dock = DockStyle.Bottom; button1.Text = "Anchor: " + button1.Anchor.ToString() + " Dock: " + button1.Dock.ToString(); } static void Main() { Application.Run(new AnchorForm()); } }
Dock Style: Left
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; public class AnchorForm : System.Windows.Forms.Form { private System.Windows.Forms.Button button1; public AnchorForm() { InitializeComponent(); CenterToScreen(); } private void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.Controls.AddRange(new System.Windows.Forms.Control[] {this.button1}); this.Text = "Anchoring (and Docking) Controls"; // dock Left button1.Dock = DockStyle.Left; button1.Text = "Anchor: " + button1.Anchor.ToString() + " Dock: " + button1.Dock.ToString(); } static void Main() { Application.Run(new AnchorForm()); } }
Dock Style: Right
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; public class AnchorForm : System.Windows.Forms.Form { private System.Windows.Forms.Button button1; public AnchorForm() { InitializeComponent(); CenterToScreen(); } private void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.Controls.AddRange(new System.Windows.Forms.Control[] {this.button1}); this.Text = "Anchoring (and Docking) Controls"; //dock Right button1.Dock = DockStyle.Right; button1.Text = "Anchor: " + button1.Anchor.ToString() + " Dock: " + button1.Dock.ToString(); } static void Main() { Application.Run(new AnchorForm()); } }