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;                }            }        }    }}

좋은 웹페이지 즐겨찾기