728x90
반응형
728x170
▶ MainForm.cs
using System;
using System.Drawing;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
Load += Form_Load;
this.animalListBox.MouseDown += listBox_MouseDown;
this.animalListBox.DragEnter += listBox_DragEnter;
this.animalListBox.DragOver += listBox_DragOver;
this.animalListBox.DragDrop += listBox_DragDrop;
this.foodListBox.MouseDown += listBox_MouseDown;
this.foodListBox.DragEnter += listBox_DragEnter;
this.foodListBox.DragOver += listBox_DragOver;
this.foodListBox.DragDrop += listBox_DragDrop;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 폼 로드시 처리하기 - Form_Load(sender, e)
/// <summary>
/// 폼 로드시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Form_Load(object sender, EventArgs e)
{
this.animalListBox.AllowDrop = true;
}
#endregion
#region 리스트 박스 마우스 DOWN 처리하기 - listBox_MouseDown(sender, e)
/// <summary>
/// 리스트 박스 마우스 DOWN 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void listBox_MouseDown(object sender, MouseEventArgs e)
{
ListBox listBox = sender as ListBox;
if(e.Button != MouseButtons.Right)
{
return;
}
int index = listBox.IndexFromPoint(e.Location);
listBox.SelectedIndex = index;
if(index < 0)
{
return;
}
DragItem dragItem = new DragItem(listBox, index, listBox.Items[index]);
listBox.DoDragDrop(dragItem, DragDropEffects.Move);
}
#endregion
#region 리스스 박스 드래그 진입시 처리하기 - listBox_DragEnter(sender, e)
/// <summary>
/// 리스스 박스 드래그 진입시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void listBox_DragEnter(object sender, DragEventArgs e)
{
ListBox listBox = sender as ListBox;
if(!e.Data.GetDataPresent(typeof(DragItem)))
{
e.Effect = DragDropEffects.None;
}
else if((e.AllowedEffect & DragDropEffects.Move) == 0)
{
e.Effect = DragDropEffects.None;
}
else
{
DragItem dragItem = (DragItem)e.Data.GetData(typeof(DragItem));
if(dragItem.ListBox != listBox)
{
e.Effect = DragDropEffects.None;
}
else
{
e.Effect = DragDropEffects.Move;
}
}
}
#endregion
#region 리스트 박스 드래그 오버시 처리하기 - listBox_DragOver(sender, e)
/// <summary>
/// 리스트 박스 드래그 오버시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void listBox_DragOver(object sender, DragEventArgs e)
{
if(e.Effect != DragDropEffects.Move)
{
return;
}
ListBox listBox = sender as ListBox;
listBox.SelectedIndex = listBox.GetIndexFromScreenPoint(new Point(e.X, e.Y));
}
#endregion
#region 리스트 박스 드래그 DROP 처리하기 - listBox_DragDrop(sender, e)
/// <summary>
/// 리스트 박스 드래그 DROP 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void listBox_DragDrop(object sender, DragEventArgs e)
{
ListBox listBox = sender as ListBox;
DragItem dragItem = (DragItem)e.Data.GetData(typeof(DragItem));
int newIndex = listBox.GetIndexFromScreenPoint(new Point(e.X, e.Y));
if(newIndex == -1)
{
newIndex = listBox.Items.Count - 1;
}
listBox.Items.RemoveAt(dragItem.Index);
listBox.Items.Insert(newIndex, dragItem.Item);
listBox.SelectedIndex = newIndex;
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM] Graphics 클래스 : DrawEllipse 메소드를 사용해 포인트 채우기 (0) | 2020.07.27 |
---|---|
[C#/WINFORM] Graphics 클래스 : FillEllipse 메소드를 사용해 포인트 그리기 (0) | 2020.07.27 |
[C#/WINFORM] Point 구조체 : 거리 구하기 (0) | 2020.07.27 |
[C#/WINFORM] PictureBox 클래스 : 배경 이미지 위에 그리기 (0) | 2020.07.27 |
[C#/WINFORM] 햇살(Sunburst) 차트에서 마우스 아래 섹션 찾기 (0) | 2020.07.27 |
[C#/WINFORM] ListBox 클래스 : 사용자 항목 드래그하기 (0) | 2020.07.26 |
[C#/WINFORM] ListBox 클래스 : 사용자 항목 배열하기 (0) | 2020.07.26 |
[C#/WINFORM] GraphicsPath 클래스 : 라운드 사각형 패스 구하기 (0) | 2020.07.24 |
[C#/WINFORM] 핀터레스트 스타일 대각선 그림 몽타지 사용하기 (0) | 2020.07.24 |
[C#/WINFORM] Bitmap 클래스 : 색상 영역 설정하기 (0) | 2020.07.23 |
[C#/WINFORM] Bitmap 클래스 : 모노크롬 비트맵 구하기 (0) | 2020.07.23 |
댓글을 달아 주세요