我尽量再现你的问题。我想我至少能帮你解决你列出的三个问题中的两个。
1。列表视图中的项目并非总是正确选择的。换句话说,当选中该项时,标签控件中将显示详细字符串值。
当您通过
ListView.ItemSelectionChanged
事件:
//
// this handler's only responsibility is updating the item info label:
//
void lstModules_ItemSelectionChanged(object sender,
ListViewItemSelectionChangedEventArgs e)
{
if (e.IsSelected)
{
// an item has been selected; update the label, e.g.:
lblModuleDetails.Text = e.Item.Text;
}
else
{
// some item has been de-selected; clear the label:
lblModuleDetails.Text = string.Empty;
}
}
三。上下文菜单位置短暂地显示在旧的鼠标位置,然后移动到新的鼠标位置。
我相信你做的太多了。让框架处理通过
ListView.ContextMenuStrip
财产。您所体验到的效果是由您的手动调用引起的
ContextMenuStrip.Show(...)
这将导致框架显示上下文菜单,然后在另一个位置再次执行相同的操作。
因此,尽量不要调用此函数;上下文菜单应该仍然出现。
//
// this handler's only responsibility is setting the correct context menu:
//
void lstModules_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
var hitTest = lstModules.HitTest(e.Location);
if (hitTest != null && hitTest.Item != null)
{
lstModules.ContextMenuStrip = mnuContext_Module;
}
else
{
lstModules.ContextMenuStrip = mnuContext_Desktop;
}
}
}
顺便说一句,如果这有效的话,你也可以摆脱你的
lstModules_MouseMove
事件处理程序和
mouse
位置对象。