Alex, 試試這個。 BeforeSelect處理程序事件參數取消與鼠標右鍵關閉有關。這會抑制SelectedIndex發生更改。 MouseDown跟蹤鼠標右鍵是否被按下並顯示上下文菜單。顯示可以安全移動到MouseUp而不是MouseDown。 MouseUp清除指示RightMouse按鈕被按下的標誌。
有關我如何完成此操作的所有信息均可在MSDN上找到。訣竅實際上是讀取所有事件的名稱 - 是的,我知道有很多 - 然後在您命名SelectedIndex變化的情況下列出「有趣的」列表,並單擊鼠標。這會立即限制您應詳細閱讀的事件名稱......如果您希望文本在您正確點擊時不突出顯示,那麼這完全是另一回事,我警告您不要這樣做,因爲這是寶貴的用戶反饋。
bool isRBut = false;
private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
isRBut = e.Button == MouseButtons.Right;
if (isRBut)
{
TreeViewHitTestInfo hti =treeView1.HitTest(e.Location);
if (hti.Location == TreeViewHitTestLocations.Label)
contextMenuStrip1.Show(treeView1, new Point(hti.Node.Bounds.Left, hti.Node.Bounds.Bottom));
}
}
private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
isRBut = e.Button == MouseButtons.Right;
}
private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
e.Cancel = isRBut;
}
此外,這裏有一些人類語言瑣事爲你。希望這會在未來幫助你。諸如「不,不,」等短語被母語爲英語的人解釋爲非常粗魯。只要盡力列出你所看到的行爲,以及你想要的行爲。即使人們誤解只是堅持事實,並且沒有明顯的挫折跡象。這將幫助你獲得你想要的。同樣,如果某人有習慣不接受答案,這裏的許多成員都有習慣不向這些成員提供未來的答案。
如果您需要澄清,請在答案下使用註釋。請保持話語公正。 –