我有2个列表框,一个是DataBound,它有DisplayMeber和ValueMember。我需要将条目从DataBound ListBox拖放到其他。
我试过,可以获取显示文字。但不是价值。如何将显示文本+值显示到目的地。
private void lbFav_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.StringFormat))
{
string selectedManufacturer = e.Data.GetData(DataFormats.StringFormat) as string;
if (!string.IsNullOrEmpty(selectedManufacturer))
{
if (selectedManufacturer.StartsWith("M_"))
{
selectedManufacturer = selectedManufacturer.Substring(2, (selectedManufacturer.Length - 2));
int found = lbFavSupp.FindString(selectedManufacturer);
if (found < 0)
{
lbFav.Items.Add(selectedManufacturer);
}
}
}
}
}
答案 0 :(得分:2)
您可以将发件人转换为列表框并读取其选定的值。 如果您正在处理从MouseDown事件中的onelistbox拖动,那么类似下面的内容应该有效。
int index = listBox1.IndexFromPoint(e.X, e.Y);
var s = listBox1.Items[index]; //Putting item instead of
DragDropEffects dde1 = DoDragDrop(s, DragDropEffects.All);
if (dde1 == DragDropEffects.All)
{
listBox1.Items.RemoveAt(listBox1.IndexFromPoint(e.X, e.Y));
}
}
在这种情况下,我的列表框数据源是System.Collections.DictionaryEntry的集合。
因此在dragdrop事件中,我可以读取所选的值,如下所示。
if (e.Data.GetDataPresent("System.Collections.DictionaryEntry"))
{
System.Collections.DictionaryEntry r = (System.Collections.DictionaryEntry)e.Data.GetData("System.Collections.DictionaryEntry");
//Use r.Key or r.Value.
lbFav.Items.Add(r.Key);!
}