C# 将listview中的项目拖动到表单中
我有两种形式;其中一个包含listview,另一个只是表单 我想做一件事: 如果我将listview中的一个项目拖到表单中,就会弹出一个messagebox。 信息将是项目的文本 但是我不知道为什么'SelectedItem'为空。当我跟踪SelectedItem时,它是空的 我发现我必须使用MouseDown和DragDrop事件,但我不知道如何使用 第一个是listview的代码:C# 将listview中的项目拖动到表单中,c#,winforms,listview,drag-and-drop,telerik,C#,Winforms,Listview,Drag And Drop,Telerik,我有两种形式;其中一个包含listview,另一个只是表单 我想做一件事: 如果我将listview中的一个项目拖到表单中,就会弹出一个messagebox。 信息将是项目的文本 但是我不知道为什么'SelectedItem'为空。当我跟踪SelectedItem时,它是空的 我发现我必须使用MouseDown和DragDrop事件,但我不知道如何使用 第一个是listview的代码: rListCtrl.MouseDown += rListCtrl_MouseDown; rListCtrl.D
rListCtrl.MouseDown += rListCtrl_MouseDown;
rListCtrl.DragDrop += rListCtrl_DragDrop;
private void rListCtrl_MouseDown(object sender, MouseEventArgs e)
{
StringBuilder sb = new STringBuilder();
sb.Append(radListView1.SelectedItem.ToString());
testName = sb.ToString();
}
private void rListCtrl_DragDrop(object sender, DragEventArgs e){
{
MessageBox.Show(testName);
}
radListView1是listview的名称。之所以
SelectedItem
为空,是因为只有在实际执行单击时才选择该项,而不仅仅是鼠标向下
。
但是,您可以使用IndexFromPoint
方法获取在调用MouseDown
事件时鼠标放置的项目:
private void radListView1_MouseDown(object sender, MouseEventArgs e)
{
int index = radListView1.IndexFromPoint(e.Location);
radListView1.SelectedIndex = index;
testName = radListView1.Items[index].ToString();
}
private void rListCtrl_DragDrop(object sender, DragEventArgs e){
{
MessageBox.Show(testName);
}
表格1:
表格2:
public partial class Form2 : Form
{
public string data = string.Empty;
public Form2()
{
InitializeComponent();
listView1.ItemDrag += doDaragItem;
}
private void doDaragItem(Object sender, ItemDragEventArgs e)
{
data = e.Item.ToString();
}
}
罗恩
WinForms suite的Telerik UI中的RadListView通过其ListViewDragDropService处理整个拖放操作。它的PreviewDragOver事件允许您控制要拖动的项目可以放置在哪些目标上。PreviewDragDrop事件允许您获得拖放操作、源(拖动)列表视图、目标(目标)控件以及正在拖动的项的所有方面的句柄。以下帮助文章中提供了其他信息:
您还可以将RadDragDropService与OLE拖放功能结合使用:
至于特定的代码片段,实际上,如果您在RadListView中没有选定的项,MouseDown事件中的代码将不会提取该项的文本。您需要在鼠标下获取元素并将项目设置为选中:
private void radListView1_MouseDown(object sender, MouseEventArgs e)
{
SimpleListViewVisualItem elementUnderMouse = this.radListView1.ElementTree.GetElementAtPoint(e.Location) as SimpleListViewVisualItem;
if (elementUnderMouse != null)
{
this.radListView1.SelectedItem = elementUnderMouse.Data ;
}
StringBuilder sb = new StringBuilder();
sb.Append(radListView1.SelectedItem.Text.ToString());
{
testName = sb.ToString();
}
MessageBox.Show(testName);
}
我希望这些信息能有所帮助。什么是radListView1?这是listviewOk的名称,什么是rListCtrl?请阅读供应商的文档。可能在选择项目之前触发
MouseDown
。这就是为什么它仍然是空的。但是,应该有类似“SelectionChanged”(或类似)的事件;然后将项目从form2.listView1拖动到form1中,form1\u MouseEnter方法将处于活动状态。您还可以检查数据是否为空,然后在form1中显示noting。我已经更新了代码,以便在拖动后始终显示form1消息框。
private void radListView1_MouseDown(object sender, MouseEventArgs e)
{
SimpleListViewVisualItem elementUnderMouse = this.radListView1.ElementTree.GetElementAtPoint(e.Location) as SimpleListViewVisualItem;
if (elementUnderMouse != null)
{
this.radListView1.SelectedItem = elementUnderMouse.Data ;
}
StringBuilder sb = new StringBuilder();
sb.Append(radListView1.SelectedItem.Text.ToString());
{
testName = sb.ToString();
}
MessageBox.Show(testName);
}