亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

asp.net DoDragDrop 方法的使用

2024-07-10 13:24:32
字體:
來源:轉載
供稿:網友
在類庫中的定義為:

復制代碼 代碼如下:


[UIPermissionAttribute(SecurityAction.Demand, Clipboard = UIPermissionClipboard.OwnClipboard)]
public DragDropEffects DoDragDrop(
Object data,
DragDropEffects allowedEffects
)


其中data參數為要拖放的數據,如果拖動操作需要于另一個進程的應用程序相互操作,data代表的數據應該是基本托管類(String,BitMap,或MetaFile),或者是實現 ISerializable 或IDataObject的對象。 allowedEffects參數表示拖放的效果,為一個枚舉值(DragDropEffects).返回值也為DragDropEffects枚舉值。
  當開始調用DoDragDrop方法拖動一個數據對象時,DoDragDrops在拖放過程中,檢測當前光標位置下的控件是不是有效的放置目標。如果當前光標下的控件是有效的放置目標,則GiveFeedBack事件以指定的拖放效果引發。在檢測當前位置光標是否為有效的拖放目標時,DoDragDrops方法同時跟蹤光標位置,鍵盤狀態和鼠標狀態的更改。
   (1)如果用于移出了一個窗口,則引發DragLeave事件。
  (2)如果移入了另外一個控件,則引發該控件的DragEnter事件。
 ?。?)如果鼠標移動,但是停留在一個控件中,則引發DragOver事件。
如果檢測到更改了鍵盤或者鼠標狀態,則引發拖放源的QueryContinueDrag事件, 并根據事件的QueryContinueDragEventArgs的Action屬性值確定繼續拖動,放置數據或取消操作。
(1)如果Action屬性指定為Continue,則將引發DragOver事件。
(2)如果Action屬性指定為Drop,則將放置效果返回給源,以便應用程序對數據進行適當的操作;例如,如果是移動操作,則剪切數據。
(3)如果是DragAction的值為Cancel,則引發DragLeave事件
從csdn上摘抄一段示例代碼:
  下面的代碼示例演示在兩個 ListBox 控件之間的拖放操作。當拖動動作啟動時,該示例調用 DoDragDrop 方法。在 MouseDown 事件期間,如果從鼠標位置起鼠標移動的距離大于 SystemInformation..::.DragSize,則啟動拖動動作。IndexFromPoint 方法用于確定在 MouseDown 事件期間要拖動的項的索引。
  該示例還演示如何對拖放操作使用自定義光標。該示例要求應用程序目錄中存在兩個光標文件:3dwarro.cur 和 3dwno.cur,分別用于自定義拖動光標和禁止停放光標。如果選中 UseCustomCursorsCheckCheckBox,則使用自定義光標。自定義光標在 GiveFeedback 事件處理程序中設置。
  鍵盤狀態在右 ListBox 的 DragOver 事件處理程序中計算,以確定基于 Shift、Ctrl、Alt 或 Ctrl+Alt 鍵的狀態將發生哪種拖動操作。放置動作在 ListBox 中發生的位置也在 DragOver 事件期間確定。如果要放置的數據不是 String,則 DragDropEffects 中將把 DragEventArgs.sEffect 設置為 None。最后,停放狀態在 DropLocationLabelLabel 中顯示。
  要放置的用于右 ListBox 的數據在 DragDrop 事件處理程序中確定,并且在 ListBox 中的適當位置添加該 String 值。如果拖動操作移動到窗體邊框的外面,則 QueryContinueDrag 事件處理程序中將取消拖放操作

復制代碼 代碼如下:


using System;
using System.Drawing;
using System.Windows.Forms;
namespace Snip_DragNDrop
{
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.ListBox ListDragSource;
private System.Windows.Forms.ListBox ListDragTarget;
private System.Windows.Forms.CheckBox UseCustomCursorsCheck;
private System.Windows.Forms.Label DropLocationLabel;
private int indexOfItemUnderMouseToDrag;
private int indexOfItemUnderMouseToDrop;
private Rectangle dragBoxFromMouseDown;
private Point screenOffset;
private Cursor MyNoDropCursor;
private Cursor MyNormalCursor;
/// The main entry point for the application.
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
public Form1()
{
this.ListDragSource = new System.Windows.Forms.ListBox();
this.ListDragTarget = new System.Windows.Forms.ListBox();
this.UseCustomCursorsCheck = new System.Windows.Forms.CheckBox();
this.DropLocationLabel = new System.Windows.Forms.Label();
this.SuspendLayout();
// ListDragSource
this.ListDragSource.Items.AddRange(new object[] {"one", "two", "three", "four",
"five", "six", "seven", "eight",
"nine", "ten"});
this.ListDragSource.Location = new System.Drawing.Point(10, 17);
this.ListDragSource.Size = new System.Drawing.Size(120, 225);
this.ListDragSource.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ListDragSource_MouseDown);
this.ListDragSource.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.ListDragSource_QueryContinueDrag);
this.ListDragSource.MouseUp += new System.Windows.Forms.MouseEventHandler(this.ListDragSource_MouseUp);
this.ListDragSource.MouseMove += new System.Windows.Forms.MouseEventHandler(this.ListDragSource_MouseMove);
this.ListDragSource.GiveFeedback += new System.Windows.Forms.GiveFeedbackEventHandler(this.ListDragSource_GiveFeedback);
// ListDragTarget
this.ListDragTarget.AllowDrop = true;
this.ListDragTarget.Location = new System.Drawing.Point(154, 17);
this.ListDragTarget.Size = new System.Drawing.Size(120, 225);
this.ListDragTarget.DragOver += new System.Windows.Forms.DragEventHandler(this.ListDragTarget_DragOver);
this.ListDragTarget.DragDrop += new System.Windows.Forms.DragEventHandler(this.ListDragTarget_DragDrop);
this.ListDragTarget.DragEnter += new System.Windows.Forms.DragEventHandler(this.ListDragTarget_DragEnter);
this.ListDragTarget.DragLeave += new System.EventHandler(this.ListDragTarget_DragLeave);
// UseCustomCursorsCheck
this.UseCustomCursorsCheck.Location = new System.Drawing.Point(10, 243);
this.UseCustomCursorsCheck.Size = new System.Drawing.Size(137, 24);
this.UseCustomCursorsCheck.Text = "Use Custom Cursors";
// DropLocationLabel
this.DropLocationLabel.Location = new System.Drawing.Point(154, 245);
this.DropLocationLabel.Size = new System.Drawing.Size(137, 24);
this.DropLocationLabel.Text = "None";
// Form1
this.ClientSize = new System.Drawing.Size(292, 270);
this.Controls.AddRange(new System.Windows.Forms.Control[] {this.ListDragSource,
this.ListDragTarget, this.UseCustomCursorsCheck,
this.DropLocationLabel});
this.Text = "drag-and-drop Example";
this.ResumeLayout(false);
}
private void ListDragSource_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
// Get the index of the item the mouse is below.
indexOfItemUnderMouseToDrag = ListDragSource.IndexFromPoint(e.X, e.Y);
if (indexOfItemUnderMouseToDrag != ListBox.NoMatches) {
// Remember the point where the mouse down occurred. The DragSize indicates
// the size that the mouse can move before a drag event should be started.
Size dragSize = SystemInformation.DragSize;
// Create a rectangle using the DragSize, with the mouse position being
// at the center of the rectangle.
dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width /2),
e.Y - (dragSize.Height /2)), dragSize);
} else
// Reset the rectangle if the mouse is not over an item in the ListBox.
dragBoxFromMouseDown = Rectangle.Empty;
}
private void ListDragSource_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) {
// Reset the drag rectangle when the mouse button is raised.
dragBoxFromMouseDown = Rectangle.Empty;
}
private void ListDragSource_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if ((e.Button & MouseButtons.Left) == MouseButtons.Left) {
// If the mouse moves outside the rectangle, start the drag.
if (dragBoxFromMouseDown != Rectangle.Empty &&
!dragBoxFromMouseDown.Contains(e.X, e.Y)) {
// Create custom cursors for the drag-and-drop operation.
try {
MyNormalCursor = new Cursor("3dwarro.cur");
MyNoDropCursor = new Cursor("3dwno.cur");
} catch {
// An error occurred while attempting to load the cursors, so use
// standard cursors.
UseCustomCursorsCheck.Checked = false;
}finally {
// The screenOffset is used to account for any desktop bands
// that may be at the top or left side of the screen when
// determining when to cancel the drag drop operation.
screenOffset = SystemInformation.WorkingArea.Location;
// Proceed with the drag-and-drop, passing in the list item.
DragDropEffects dropEffect = ListDragSource.DoDragDrop(ListDragSource.Items[indexOfItemUnderMouseToDrag], DragDropEffects.All | DragDropEffects.Link);
// If the drag operation was a move then remove the item.
if (dropEffect == DragDropEffects.Move) {
ListDragSource.Items.RemoveAt(indexOfItemUnderMouseToDrag);
// Selects the previous item in the list as long as the list has an item.
if (indexOfItemUnderMouseToDrag > 0)
ListDragSource.SelectedIndex = indexOfItemUnderMouseToDrag -1;
else if (ListDragSource.Items.Count > 0)
// Selects the first item.
ListDragSource.SelectedIndex =0;
}
// Dispose of the cursors since they are no longer needed.
if (MyNormalCursor != null)
MyNormalCursor.Dispose();
if (MyNoDropCursor != null)
MyNoDropCursor.Dispose();
}
}
}
}
private void ListDragSource_GiveFeedback(object sender, System.Windows.Forms.GiveFeedbackEventArgs e)
{
// Use custom cursors if the check box is checked.
if (UseCustomCursorsCheck.Checked) {
// Sets the custom cursor based upon the effect.
e.UseDefaultCursors = false;
if ((e.Effect & DragDropEffects.Move) == DragDropEffects.Move)
Cursor.Current = MyNormalCursor;
else
Cursor.Current = MyNoDropCursor;
}
}
private void ListDragTarget_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
{
// Determine whether string data exists in the drop data. If not, then
// the drop effect reflects that the drop cannot occur.
if (!e.Data.GetDataPresent(typeof(System.String))) {
e.Effect = DragDropEffects.None;
DropLocationLabel.Text = "None - no string data.";
return;
}
// Set the effect based upon the KeyState.
if ((e.KeyState & (8+32)) == (8+32) &&
(e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) {
// KeyState 8 + 32 = CTL + ALT
// Link drag-and-drop effect.
e.Effect = DragDropEffects.Link;
} else if ((e.KeyState & 32) == 32 &&
(e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) {
// ALT KeyState for link.
e.Effect = DragDropEffects.Link;
} else if ((e.KeyState & 4) == 4 &&
(e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) {
// SHIFT KeyState for move.
e.Effect = DragDropEffects.Move;
} else if ((e.KeyState & 8) == 8 &&
(e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) {
// CTL KeyState for copy.
e.Effect = DragDropEffects.Copy;
} else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) {
// By default, the drop action should be move, if allowed.
e.Effect = DragDropEffects.Move;
} else
e.Effect = DragDropEffects.None;
// Get the index of the item the mouse is below.
// The mouse locations are relative to the screen, so they must be
// converted to client coordinates.
indexOfItemUnderMouseToDrop =
ListDragTarget.IndexFromPoint(ListDragTarget.PointToClient(new Point(e.X, e.Y)));
// Updates the label text.
if (indexOfItemUnderMouseToDrop != ListBox.NoMatches){
DropLocationLabel.Text = "Drops before item #" + (indexOfItemUnderMouseToDrop + 1);
} else
DropLocationLabel.Text = "Drops at the end.";
}
private void ListDragTarget_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
// Ensure that the list item index is contained in the data.
if (e.Data.GetDataPresent(typeof(System.String))) {
Object item = (object)e.Data.GetData(typeof(System.String));
// Perform drag-and-drop, depending upon the effect.
if (e.Effect == DragDropEffects.Copy ||
e.Effect == DragDropEffects.Move) {
// Insert the item.
if (indexOfItemUnderMouseToDrop != ListBox.NoMatches)
ListDragTarget.Items.Insert(indexOfItemUnderMouseToDrop, item);
else
ListDragTarget.Items.Add(item);
}
}
// Reset the label text.
DropLocationLabel.Text = "None";
}
private void ListDragSource_QueryContinueDrag(object sender, System.Windows.Forms.QueryContinueDragEventArgs e) {
// Cancel the drag if the mouse moves off the form.
ListBox lb = sender as ListBox;
if (lb != null) {
Form f = lb.FindForm();
// Cancel the drag if the mouse moves off the form. The screenOffset
// takes into account any desktop bands that may be at the top or left
// side of the screen.
if (((Control.MousePosition.X - screenOffset.X) < f.DesktopBounds.Left) ||
((Control.MousePosition.X - screenOffset.X) > f.DesktopBounds.Right) ||
((Control.MousePosition.Y - screenOffset.Y) < f.DesktopBounds.Top) ||
((Control.MousePosition.Y - screenOffset.Y) > f.DesktopBounds.Bottom)) {
e.Action = DragAction.Cancel;
}
}
}
private void ListDragTarget_DragEnter(object sender, System.Windows.Forms.DragEventArgs e) {
// Reset the label text.
DropLocationLabel.Text = "None";
}
private void ListDragTarget_DragLeave(object sender, System.EventArgs e) {
// Reset the label text.
DropLocationLabel.Text = "None";
}
}
}


對用這種拖放操作和微軟的服務,容器模式的關系,留在以后再學習。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91在线精品视频| 国产成人福利视频| 日韩av大片免费看| 一区二区在线免费视频| 欧美日韩福利在线观看| 黄色成人av网| 久久久久久久一区二区三区| 日韩视频亚洲视频| 91精品国产91久久久久福利| 成人欧美一区二区三区黑人孕妇| 国产精品久久77777| 欧美激情xxxx性bbbb| 国产精品专区第二| 亚洲精品电影在线观看| 色综合久久88色综合天天看泰| 久久久久久久久久亚洲| 在线中文字幕日韩| 国产精品免费网站| 欧美在线免费观看| 国产成人精品久久二区二区91| 国内精品国产三级国产在线专| 2019日本中文字幕| 国产精品免费看久久久香蕉| 欧美日韩一区二区三区| 欧美亚洲国产日韩2020| 欧美午夜www高清视频| 亚洲香蕉伊综合在人在线视看| 久久人人爽人人爽爽久久| 成人福利视频网| 538国产精品一区二区在线| 午夜精品久久久99热福利| 欧洲亚洲妇女av| 中文字幕亚洲综合久久筱田步美| 欧美亚洲激情在线| 日本三级韩国三级久久| 免费不卡欧美自拍视频| 欧美成人中文字幕在线| 国产精品久久久久久久一区探花| 久久精品国产欧美亚洲人人爽| 久久久久久一区二区三区| 久久艳片www.17c.com| 2019中文在线观看| 欧美片一区二区三区| 91成人精品网站| 成人免费激情视频| 亚洲国产精品久久久| 久久久在线观看| 成人激情av在线| 韩国精品美女www爽爽爽视频| 尤物九九久久国产精品的分类| 欧美性猛交xxxx| 91免费版网站入口| 少妇激情综合网| 久久久久久久久国产| 日韩三级成人av网| 亚洲欧洲日本专区| 成人精品网站在线观看| 久久久999国产精品| 国产欧美精品在线播放| www欧美日韩| 亚洲在线免费观看| 久久综合免费视频| 91精品视频一区| 日韩精品极品在线观看播放免费视频| 不卡伊人av在线播放| 日韩欧美国产激情| 成人在线精品视频| 国产精品亚洲аv天堂网| 在线电影中文日韩| 久久精品99久久香蕉国产色戒| 亚洲一区精品电影| 国产精品久久久久久搜索| 国产va免费精品高清在线观看| 久久精品国产欧美亚洲人人爽| 久久夜色撩人精品| 国产精品女人久久久久久| 亚洲国语精品自产拍在线观看| 欧美夫妻性视频| 91色视频在线导航| 亚洲第一网站男人都懂| 国产精品视频公开费视频| 日韩电影中文字幕av| 亚洲日本成人网| 国产亚洲欧美日韩美女| 久久精品视频网站| 57pao国产成人免费| 激情成人中文字幕| 国产欧美一区二区三区视频| 日韩av在线不卡| 久久国产精品电影| 伊人亚洲福利一区二区三区| 91免费电影网站| 日韩高清免费观看| 国产手机视频精品| 国产亚洲xxx| 伦伦影院午夜日韩欧美限制| 国产精品久久久久久av| 中文字幕av一区二区| 久久青草精品视频免费观看| 国产精品扒开腿做爽爽爽视频| 亚洲国内精品在线| 国产一区二区黑人欧美xxxx| 2019国产精品自在线拍国产不卡| 日韩不卡中文字幕| 国产精品久久久久久av| 亚洲最大av网| 人人澡人人澡人人看欧美| 国产噜噜噜噜久久久久久久久| 91久久国产精品91久久性色| 亚洲国产成人精品久久| 国产精品成人aaaaa网站| 一区二区日韩精品| 国产免费久久av| 亚洲新中文字幕| 国产女精品视频网站免费| 久久久久久国产免费| 国产精品自在线| 国产一区香蕉久久| 国产亚洲精品激情久久| 国内精品伊人久久| 91天堂在线视频| 91av在线播放| 亚洲色图第三页| 欧美日韩国产色视频| 亚洲精品一区二区三区不| 中文字幕一精品亚洲无线一区| 亚洲在线一区二区| 亚洲字幕一区二区| 日av在线播放中文不卡| 亚洲人成啪啪网站| 欧美一级视频在线观看| 欧美美最猛性xxxxxx| 欧美激情aaaa| 国产成人鲁鲁免费视频a| 66m—66摸成人免费视频| 国自产精品手机在线观看视频| 亚洲四色影视在线观看| 欧美日韩中文字幕在线视频| 91高清视频在线免费观看| 国产精品一久久香蕉国产线看观看| 亚洲综合在线做性| 国产精品综合不卡av| 成人av在线网址| 国产精品久久网| 欧美日本国产在线| 日韩久久精品成人| 精品久久久久久久大神国产| 国产午夜精品一区二区三区| 国产成人精品av在线| 成人激情视频小说免费下载| 97涩涩爰在线观看亚洲| 中文字幕视频在线免费欧美日韩综合在线看| 在线看欧美日韩| 亚洲精品国精品久久99热| 三级精品视频久久久久| 成人黄色短视频在线观看| 精品久久久久久久久久| 国产69久久精品成人| 日韩精品一区二区三区第95| 亚洲欧美999| 欧美极品第一页| 国产精品白丝jk喷水视频一区| 精品亚洲精品福利线在观看| 亚洲欧美精品一区二区|