C#中两个listBox双击与拖放共存的一种实现
2013-02-08 23:07
288 查看
今天做前台C#的同事,纠结在了,“拖拽事件使用的listBox1_MouseDown(s, e)会‘屏蔽掉’双击事件的使用的listBox1_DoubleClick”,这一问题上。查证多方资料,没好的解决方法。
于是笔者休息时实验了一下,使用e.Clicks这个属性可以解决。具体请参阅正文。
正文:
实现机理:((MouseEventArgs)e).Clicks通过值的{1, 2, ...}可以区分单击双击。于是可将双击事件实现写入e.Clicks > 1的语句,来达到预期效果。
细节不叨叨,直接上代码。
C#代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace C4PlusWForm
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
// 双击后触发动作
if (e.Clicks > 1)
{
listBox2.Items.Add(listBox1.SelectedItem);
listBox1.Items.Remove(listBox1.SelectedItem);
System.Console.WriteLine("listBox1_MouseDown...DoubleClick");
}
// 单击动作
else {
int index = listBox1.IndexFromPoint(e.X, e.Y);
string str = listBox1.Items[index].ToString();
DragDropEffects ddeLb1 = DoDragDrop(str, DragDropEffects.All);
if (ddeLb1 == DragDropEffects.All)
{
listBox1.Items.RemoveAt(listBox1.IndexFromPoint(e.X, e.Y));
}
}
System.Console.WriteLine("listBox1_MouseDown" + e.Clicks);
}
private void listBox2_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.StringFormat))
{
string str = (string)e.Data.GetData(
DataFormats.StringFormat);
listBox2.Items.Add(str);
}
}
private void listBox2_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.All;
}
private void listBox1_DoubleClick(object sender, EventArgs e)
{
System.Console.WriteLine("listBox1_DoubleClick");
}
}
}
实验效果图如下:
于是笔者休息时实验了一下,使用e.Clicks这个属性可以解决。具体请参阅正文。
正文:
实现机理:((MouseEventArgs)e).Clicks通过值的{1, 2, ...}可以区分单击双击。于是可将双击事件实现写入e.Clicks > 1的语句,来达到预期效果。
细节不叨叨,直接上代码。
C#代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace C4PlusWForm
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
// 双击后触发动作
if (e.Clicks > 1)
{
listBox2.Items.Add(listBox1.SelectedItem);
listBox1.Items.Remove(listBox1.SelectedItem);
System.Console.WriteLine("listBox1_MouseDown...DoubleClick");
}
// 单击动作
else {
int index = listBox1.IndexFromPoint(e.X, e.Y);
string str = listBox1.Items[index].ToString();
DragDropEffects ddeLb1 = DoDragDrop(str, DragDropEffects.All);
if (ddeLb1 == DragDropEffects.All)
{
listBox1.Items.RemoveAt(listBox1.IndexFromPoint(e.X, e.Y));
}
}
System.Console.WriteLine("listBox1_MouseDown" + e.Clicks);
}
private void listBox2_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.StringFormat))
{
string str = (string)e.Data.GetData(
DataFormats.StringFormat);
listBox2.Items.Add(str);
}
}
private void listBox2_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.All;
}
private void listBox1_DoubleClick(object sender, EventArgs e)
{
System.Console.WriteLine("listBox1_DoubleClick");
}
}
}
实验效果图如下:
相关文章推荐
- C#中两个listBox双击与拖放共存的一种实现【转】
- 在C#中实现两个listbox的项移动(winform)
- C#实现文件拖放并打开文件(使用ListBox)
- C#设置自定义文件图标实现双击启动(修改注册表)
- 两个 select 联动的一种实现方式
- c#如何实现在两个窗体(Form)间传输数据或变量
- 使用Ajax实现DropDownList和ListBox的联动以及两个ListBox之间数据的移动
- .net C# listbox的上下移动,拖动排序,两个listbox相互拖动
- C#实现无边框窗体拖动的两个方案
- C#的委托机制的C++的一种实现DIY版
- c# 实现 ListBox 每一列可以有各自的颜色
- C#实现窗体最小化到状态栏,双击运行时又能正常显示窗体
- C#代码中实现两个表(DataTable)的关联查询(JOIN)
- 一种C#的插件式实现(二)_从dll中读取插件信息
- C# ASP.NET B/S模式下,采用lock语法 实现多用户并发产生不重复递增单号的一种解决方法技术参考
- 一种多线程基于计数无锁实现(C#)(转载)
- 实现Textbox+listBoxControl拼音检索 C#(原)
- C#第十周任务之最后一项之创建一个如下的窗体,并在窗体上放置一个菜单、一个工具栏控件。菜单内容如第二个图所示。工具栏上有两个按钮,分别对应“打开文本文件”、“保存文本文件”。菜单和工具栏具体功能实现可
- 一种c#深拷贝方式完胜java深拷贝(实现上的对比)
- 一种历史浏览功能的实现(C#)