Windows Formada dizaynda ishlash murakkab. Drag&Drop - dasturga o`zgacha ko`rinish beradi va bu ajoyib imkoniyat ham. Uning tayyor kodini olib ishlatish esa undanda ko`proq zavq-shavq beradi :-) Oldingi versiyada aytilganidek biror paneldan boshqasiga ko`chirib o`tkazilganini tutib qolinadi va unga Action bajartiriladi. DragDropContainerdan TaskList yasashda foydalanish mumkin bo`ldi. Shuningdek har bir panel tepasiga sarlavha ko`rinishida soha nomini yozib qo`yish mumkin, hamda sohalarga border rangini ham tanlash mumkin bo`ldi.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
namespace Library.Controls
{
public class DragDropContainer : Control
{
private readonly Panel _content = new Panel
{
Dock = DockStyle.Fill,
Padding = new Padding(0)
};
private readonly Panel _header = new Panel
{
Padding = new Padding(0),
Height = 20,
Dock = DockStyle.Top
};
private Action _action;
private bool _mouseDown;
private string _oldPosition;
private Point _point = new Point(0, 0);
public DragDropContainer()
{
Controls.Add(_header);
Controls.Add(_content);
_content.BringToFront();
}
public int ColumnCount { get; set; }
public Color BorderColor { get; set; } = Color.FromArgb(202, 210, 214);
public IEnumerable> Child => _content.Controls.OfType().Select(x => x.Child);
public IEnumerable
public IEnumerable Panels => _content.Controls.OfType();
for (var i = 0; i < ColumnCount; i++)
{
var panel = new DragDropPanel
{
Name = "" + i,
Width = Width/ColumnCount,
Dock = DockStyle.Right,
Padding = new Padding(5)
};
var label = new Label
{
AutoSize = false,
Width = panel.Width,
Padding = new Padding(0),
Dock = DockStyle.Right,
Name = "" + i,
TextAlign = ContentAlignment.MiddleCenter
};
_content.Controls.Add(panel);
_header.Controls.Add(label);
dragDropContainer1.ColumnCount = 5;
var linkLabel = new LinkLabel
{
Name ="test1",
Text = "Ism Familiya"
};
dragDropContainer1.Add(linkLabel, 1);
dragDropContainer1.Headers.FirstOrDefault().Text = "1-soha";
dragDropContainer1.Headers.ToArray()[2].Text = "2- soha";
dragDropContainer1.SetHandler((i, control) =>
{
MessageBox.Show(string.Format("{0},{1}", i, (control as LinkLabel)?.Text));
var position = dragDropContainer1.Child;
});
Bu versiyada panellar tartiblandi. Tartib chapdan o`ngga davom etadi. DragDropContainer ga kiritilgan controllar qaysi o`rinda turgani ham ko`rish mumkin.
Keyingi versiyada har bir harakatni, biror paneldan boshqasiga ko`chirib o`tkazilganini tutib qolamiz va unga Action bajartiramiz. So`ng bu DragDropContainerdan TaskList yasashda foydalanish mumkin bo`ladi.
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace ControlsLibrary.Controls
{
public class DragDropContainer : Control
{
private bool _mouseDown;
private Point _point = new Point(0, 0);
public int ColumnCount { get; set; }
public IEnumerable> Child => Controls.OfType().Select(x => x.Child);