WinForms 드래그 앤 드 롭 초기
6230 단어 WinForm
드래그 앤 드 롭 작업 이 주 목 받 고 있 습 니 다. 조작 이 간단 하고 Windows 사용자 의 조작 습관 에 부합 되 기 때문에 WinForms 에서 드래그 앤 드 롭 을 어떻게 실현 합 니까?다음은 가장 간단 한 두 개의 PictureBox 컨트롤 간 의 그림 을 서로 끌 어 다 놓 고 설명 하 겠 습 니 다.
두 개의 PictureBox 컨트롤 간 의 그림 을 서로 끌 어 다 놓 으 려 면 다음 과 같은 4 단계 만 필요 합 니 다. (1) 먼저 두 개의 PictureBox 컨트롤 의 Allow Drop 속성 을 설정 하 십시오. (주의: PictureBox 컨트롤 의 속성 목록 에 Allow Drop 속성 이 없 으 면 코드 를 통 해 설정 할 수 있 습 니 다. 그러나 코드 를 설정 할 때 점 이 나 오지 않 습 니 다. 이것 은 정상 적 인 것 입 니 다. 억지로 설정 합 니 다.)핵심 코드 는:
this.picLeft.AllowDrop = true;
this.picRight.AllowDrop = true;
(2) 두 개의 PictureBox 컨트롤 의 Mouse Down 이벤트 에서 데 이 터 를 끌 어 다 놓 기 시작 합 니 다. (여 기 는 PictureBox 에 표 시 된 그림 입 니 다.)핵심 코드 는:
//
if (e.Button == MouseButtons.Left)
{
// sender PictureBox
PictureBox picTemp = sender as PictureBox;
//
if (picTemp.Image != null)
{
// , ( )
picTemp.DoDragDrop(picTemp.Image,DragDropEffects.Move | DragDropEffects.Copy);
}
}
(3) PictureBox DragEnter 。
:
// ; , 。
if (e.Data.GetDataPresent(DataFormats.Bitmap)) {
// Ctrl
if (e.KeyState == Ctrl) {
// Ctrl ,
e.Effect = DragDropEffects.Copy;
}
else
{
// Ctrl ,
e.Effect = DragDropEffects.Move;
}
}
else
{
// ,
e.Effect = DragDropEffects.None;
}
(4) 두 개의 PictureBox 컨트롤 의 DragDrop 이벤트 에서 데이터 드래그 를 완료 합 니 다.핵심 코드 는:
// sender PictureBox
PictureBox picTemp = sender as PictureBox;
// ,
picTemp.Image = e.Data.GetData(DataFormats.Bitmap) as Bitmap;
//
if (e.KeyState != Ctrl)
{
// picLeft , picRight ; 。
if (picTemp.Name == "picLeft")
{
this.picRight.Image = null;
}
else
{
this.picLeft.Image = null;
}
}
전체 드래그 앤 드 롭 작업 의 전체 코드 는:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;
namespace ActionDemo{ public partial class frmAction : Form { private const byte Ctrl = 8; / / 는 Ctrl 키 를 눌 렀 음 을 나타 낸다. public frmAction() { InitializeComponent(); }
//창 불 러 오기 이벤트 private void frmAction_Load(object sender, EventArgs e) { this.picLeft.Image = Image.FromFile("01.jpg"); this.picLeft.AllowDrop = true; this.picRight.AllowDrop = true;
//바 인 딩 알림 정보 this. tlPMessage. SetToolTip (this. picLeft, "Ctrl 키 를 동시에 누 르 면 그림 복사"); this. tlPMessage. SetToolTip (this. picRight, "Ctrl 키 를 동시에 누 르 면 그림 복사"); }
//마우스 누 르 기 이벤트 private void picLeft_MouseDown(object sender, MouseEventArgs e) { //마우스 왼쪽 단 추 를 눌 렀 는 지 판단 if (e.Button == MouseButtons.Left) { //sender 대상 에서 원본 이벤트 PictureBox 컨트롤 꺼 내기 PictureBox picTemp = sender as PictureBox; //이벤트 원본 대상 이 그림 을 표시 하고 있 는 지 판단 합 니 다. if (picTemp.Image != null) { //드래그 앤 드 롭 작업 을 시작 하고 드래그 할 데이터 와 드래그 앤 드 롭 형식 을 전달 합 니 다. (이동 작업 입 니까? 복사 작업 입 니까?) picTemp.DoDragDrop(picTemp.Image,DragDropEffects.Move | DragDropEffects.Copy); } } }
//이 컨트롤 의 작업 공간 에 마우스 로 끌 어 다 놓 을 때 발생 합 니 다. private void picLeft_DragEnter(object sender, DragEventArgs e) { //드래그 한 데이터 가 대상 공간 형식 에 적합 한 지 확인 하고, 적합 하지 않 으 면 방치 하지 않 습 니 다. if (e.Data.GetDataPresent(DataFormats.Bitmap)) { //Ctrl 키 가 눌 렸 는 지 확인 if (e.KeyState == Ctrl) { //Ctrl 키 를 누 르 면 드래그 앤 드 롭 형식 을 복사 로 설정 합 니 다. e.Effect = DragDropEffects.Copy; } else { //Ctrl 키 가 눌 리 지 않 으 면 드래그 앤 드 롭 형식 을 이동 으로 설정 합 니 다. e.Effect = DragDropEffects.Move; } } else { //드래그 된 데이터 가 대상 컨트롤 에 적합 하지 않 으 면 드래그 앤 드 롭 형식 을 설정 합 니 다. e.Effect = DragDropEffects.None; } }
//드래그 앤 드 롭 작업 완료 시 발생 private void picLeft_DragDrop(object sender, DragEventArgs e) { //sender 대상 에서 대상 이벤트 PictureBox 컨트롤 꺼 내기 PictureBox picTemp = sender as PictureBox; //이벤트 매개 변수 에서 드래그 된 데 이 터 를 꺼 내 이미지 대상 으로 변환 합 니 다. picTemp.Image = e.Data.GetData(DataFormats.Bitmap) as Bitmap; //실행 중인 복사 작업 이 아니라면 if (e.KeyState != Ctrl) { //또한 그림 을 picLeft 컨트롤 에 놓 으 면 picRight 컨트롤 에 표 시 된 그림 이 삭 제 됩 니 다. 반대로 도 마찬가지 입 니 다. if (picTemp.Name == "picLeft") { this.picRight.Image = null; } else { this.picLeft.Image = null; } } } }}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WinForm Read Excel텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.