3
這一個很難解釋,所以我只是告訴你我想實現什麼以及我如何做,所以也許有人會對我做錯的想法有所瞭解。C#TreeView Collapse/Expand on parent select
在我的winForm我有一個TreeView控件,我填充。所有的父母都有孩子(他們中的任何一個),但沒有孩子有自己的孩子。例如:
- Parent 1
Child 1
Child 2
Child 3
- Parent 2
Child 4
我想要的行爲如下:
- ,當用戶點擊一個孩子得到它的選擇(默認情況下完成)
- 當用戶點擊一個家長,應該要麼摺疊或展開但不改變任何選擇
點1是沒有問題的,因爲它是TreeView的默認行爲,點2卻是另一回事。
這是我迄今所做的:
爲了防止選擇我添加BeforeSelect事件處理程序的父,並把它下面的代碼:
if (e.Node.Parent == null)
e.Cancel = true;
這做這項工作完美。所以,現在我取消了我想要展開或摺疊的父項的選擇。因此,我改變上面的代碼:
if (e.Node.Parent == null)
{
if (e.Node.IsExpanded)
{
e.Node.Collapse();
}
else
{
e.Node.Expand();
}
e.Cancel = true;
}
這有些工作 - 除了不像點擊+符號,調用擴展()或摺疊()使得父節點被選擇,忽略e.Cancel =真;線。
我試着在調用Collapse()或Expand()之前獲取SelectedNode,然後將其設置回去 - 它可以工作,但是當我這樣做時它會再次展開父級以進行選擇。
某些+標誌確實是我想要發生的事情,當我點擊父母 - 我似乎無法讓它工作。
想法?
在此先感謝
方式復活吶老話題 - 洛爾 - 因爲我已經移出這個項目,但你的答案似乎是固體,所以我將它送給你 – 537mfb 2013-07-29 11:10:44
@你能解釋一下這裏發生了什麼嗎?我不完全確定。我的問題是,我的SelectedNodeChanged不會觸發,如果我點擊兩次相同的節點(一個用於展開,一個用於摺疊) – Ortund 2013-09-16 10:39:54
我沒有在TreeView中找到SelectedNodeChanged事件。你的意思是AfterSelect?實際上,當您單擊某個根(可展開)節點時,此代碼不會更改選擇。請注意,樹的結構應該遵循以下問題的陳述:「所有父母都有孩子(任何數量的孩子),但沒有孩子有自己的孩子」 – chiper 2013-10-24 16:02:53