我想允许用户将任何项目从MenuStrip拖动到ListBox。 我在ListBoxes之间做过,但是不能用MenuStrip做到。 非常感谢你的帮助。
我使用WinForms,C#
对于目标ListBox,我修改了它的属性
this.listBox2.AllowDrop = true;
并创建了以下两个事件:
private void listBox2_DragOver(
object sender, System.Windows.Forms.DragEventArgs e)
{
e.Effect=DragDropEffects.All;
}
private void listBox2_DragDrop(
object sender, System.Windows.Forms.DragEventArgs e)
{
if(e.Data.GetDataPresent(DataFormats.StringFormat))
{
string str= (string)e.Data.GetData(
DataFormats.StringFormat);
listBox2.Items.Add(str);
}
}
我需要的是应该对源MenuStrip做什么来允许从ListBox中拖动项目,以及如何使MenuStrip可拖动。
感谢所有人的帮助。
答案 0 :(得分:1)
我找到了解决方案: 缺少的事件是我应该向ToolStripMenuItem_MouseDown添加事件,我更喜欢使用右键单击而不是左键单击以避免ToolStripMenuItem_Click和拖动事件之间的冲突,这个代码:
AllowDrop = true;
private void tsmi_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
DoDragDrop(sender, System.Windows.Forms.DragDropEffects.Copy);
}
将此代码添加到ListView:
private void lvAllowDropListView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
System.Windows.Forms.ToolStripMenuItem button = e.Data.GetData(typeof(System.Windows.Forms.ToolStripMenuItem))
as System.Windows.Forms.ToolStripMenuItem;
if (button != null)
{
try
{
SmallImageList = sysIcons.SmallIconsImageList;
LargeImageList = sysIcons.LargeIconsImageList;
System.Windows.Forms.ToolStripMenuItem item = e.Data.GetData(typeof(System.Windows.Forms.ToolStripMenuItem))
as System.Windows.Forms.ToolStripMenuItem;
if (item != null)
{
AddToolStripMenuItem(item.Text, item.Name);
}
}
catch { }
}
}
private void AddToolStripMenuItem(string name, string tag)
{
System.Windows.Forms.ListViewItem item = new System.Windows.Forms.ListViewItem(name);
int Index = -1;
for (int i = 0; i < Items.Count;i++ )
if(Items[i].Tag.ToString() == tag)
{
Index = i;
break;
}
if (Index == -1)
{
item.Tag = tag;
Items.Add(item);
}
}
答案 1 :(得分:0)
拖动菜单条项与ListBox
项相同。
检查你的代码...