拖拽直接运行功能 c# winform我想知道 比如 我把flash 直接拖到 flashplayer上 就能自动播放flash的功能咋实现?我指拖动 到播放器快捷方式上 播放 这个功能。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 已经搞定,重载了下main函数以为没参数悲剧~~ Winform初步拖放 拖放操作向来比较受青睐,因为它操作简单,符合Windows用户的操作习惯,那么在WinForms里如何实现拖放呢?下面我将以最简单的两个PictureBox控件间的图片相互拖放来讲解。要实现两个PictureBox控件间的图片相互拖放,只需要以下4步: (1) 先设置两个PictureBox控件的AllowDrop属性(注意:PictureBox控件的属性列表里没有AllowDrop属性,我们可以通过代码来设置。但是在代码设置的时候,还是发现点不出来,这是正常的,我们硬设置进去)。关键代码为: this.picLeft.AllowDrop = true; this.picRight.AllowDrop = true;(2) 在两个PictureBox控件的MouseDown事件里开始拖放数据(这里是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键(类似的还有Alt、Shift、鼠标左键、鼠标右键等键的常数定义,请查看MSDN) 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; } } } }} /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(String[] args) { if (args.Length > 0) { Play(args[0]); } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); }其实楼主要的只是这个功能而已 怎样用接口来定义泛型的类型 在线求C#响铃语句... 支持退格的把输入的符号变成*号的程序怎么写? c# 关于继承多态的问题 字符串的编码,怎么做也不对,帮帮忙吧 有什么办法让 Encoding 强制完全解码 急!!控制台程序设为开机启动程序不能正常运行 WEB中使用GridEX怎么进行汇总?默认不分页(即显示所有记录) ? c#怎样使隐藏的窗体再次显示 早上的验证码问题(还是算法) C# 读取配置文件 谢谢各位大侠!!!!! 关于创建XML问题,十分感谢各位了!!!!!!!
拖放操作向来比较受青睐,因为它操作简单,符合Windows用户的操作习惯,那么在WinForms里如何实现拖放呢?下面我将以最简单的两个PictureBox控件间的图片相互拖放来讲解。要实现两个PictureBox控件间的图片相互拖放,只需要以下4步:
(1) 先设置两个PictureBox控件的AllowDrop属性(注意:PictureBox控件的属性列表里没有AllowDrop属性,我们可以通过代码来设置。但是在代码设置的时候,还是发现点不出来,这是正常的,我们硬设置进去)。
关键代码为:
this.picLeft.AllowDrop = true;
this.picRight.AllowDrop = true;(2) 在两个PictureBox控件的MouseDown事件里开始拖放数据(这里是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键(类似的还有Alt、Shift、鼠标左键、鼠标右键等键的常数定义,请查看MSDN)
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;
}
}
}
}
}
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(String[] args)
{
if (args.Length > 0)
{
Play(args[0]);
} Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}其实楼主要的只是这个功能而已