Winforms 拖放不';行不通
在windows窗体中,我有Listview和FlowLayoutPanel 我想从Listview拖动到FlowLayoutPanel,以便 在listview中,我使用DragEnter事件Winforms 拖放不';行不通,winforms,c#-3.0,Winforms,C# 3.0,在windows窗体中,我有Listview和FlowLayoutPanel 我想从Listview拖动到FlowLayoutPanel,以便 在listview中,我使用DragEnter事件 private void listViewGUI_DragEnter(object sender, DragEventArgs e) { } 在FlowLayoutPanel中,我激活了DragDrop private void fpnlDisplayedGUI_DragDrop(ob
private void listViewGUI_DragEnter(object sender, DragEventArgs e)
{
}
在FlowLayoutPanel中,我激活了DragDrop
private void fpnlDisplayedGUI_DragDrop(object sender, DragEventArgs e)
{
}
问题是,如果他们中的任何一个人不输入任何事件,那么它就不起作用了。你知道如何让他们输入吗?我是否缺少任何属性
致意以下是一个简单的示例,展示您所需的基本知识:
public Form1()
{
InitializeComponent();
panel1.MouseDown += new MouseEventHandler(panel1_MouseDown);
panel2.AllowDrop = true;
panel2.DragEnter += new DragEventHandler(panel2_DragEnter);
panel2.DragDrop += new DragEventHandler(panel2_DragDrop);
}
void panel2_DragDrop(object sender, DragEventArgs e)
{
//handle the drop here.
}
void panel2_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
void panel1_MouseDown(object sender, MouseEventArgs e)
{
panel1.DoDragDrop("whatever you want draged.", DragDropEffects.Move);
}
以下是一个简单的示例,展示了您所需的基本知识:
public Form1()
{
InitializeComponent();
panel1.MouseDown += new MouseEventHandler(panel1_MouseDown);
panel2.AllowDrop = true;
panel2.DragEnter += new DragEventHandler(panel2_DragEnter);
panel2.DragDrop += new DragEventHandler(panel2_DragDrop);
}
void panel2_DragDrop(object sender, DragEventArgs e)
{
//handle the drop here.
}
void panel2_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
void panel1_MouseDown(object sender, MouseEventArgs e)
{
panel1.DoDragDrop("whatever you want draged.", DragDropEffects.Move);
}
如果将DragEnter事件置于错误的控件上,则必须使用面板的。我想我知道你是怎么陷入这个麻烦的,ListView没有任何事件表明用户开始拖动项目。你需要自己综合这些。基本方法是记录鼠标的向下位置,并使用MouseMove事件检查用户是否已将鼠标移动到足以开始拖动的程度。像这样:
private Point dragMousePos;
private void listView1_MouseDown(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Left) dragMousePos = e.Location;
}
private void listView1_MouseMove(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Left) {
int dx = Math.Abs(e.X - dragMousePos.X);
int dy = Math.Abs(e.Y - dragMousePos.Y);
if (dx >= SystemInformation.DoubleClickSize.Width ||
dy >= SystemInformation.DoubleClickSize.Height) {
var item = listView1.GetItemAt(dragMousePos.X, dragMousePos.Y);
if (item != null) listView1.DoDragDrop(item, DragDropEffects.Move);
}
}
}
如果将DragEnter事件置于错误的控件上,则必须使用面板的。我想我知道你是怎么陷入这个麻烦的,ListView没有任何事件表明用户开始拖动项目。你需要自己综合这些。基本方法是记录鼠标的向下位置,并使用MouseMove事件检查用户是否已将鼠标移动到足以开始拖动的程度。像这样:
private Point dragMousePos;
private void listView1_MouseDown(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Left) dragMousePos = e.Location;
}
private void listView1_MouseMove(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Left) {
int dx = Math.Abs(e.X - dragMousePos.X);
int dy = Math.Abs(e.Y - dragMousePos.Y);
if (dx >= SystemInformation.DoubleClickSize.Width ||
dy >= SystemInformation.DoubleClickSize.Height) {
var item = listView1.GetItemAt(dragMousePos.X, dragMousePos.Y);
if (item != null) listView1.DoDragDrop(item, DragDropEffects.Move);
}
}
}