2009-05-21 59 views
2

在我的應用程序中,我有一組3d對象,它們通過TreeView暴露給用戶。當用戶在TreeView中選擇一個項目時,會觸發SelectedItemChanged事件,相應的3d對象將被設置爲選中並在3d渲染窗口中突出顯示。這工作正常。選擇TreeView項目而不調用SelectedItemChanged?

我遇到的麻煩是相反的。在我的代碼的一部分,我編程設置場景中選定的3d對象。我想在TreeView中反映當前選中的對象,所以我會遍歷這些項目直到找到相應的項目。但是一旦我找到它,我就無法找到一種方法讓項目顯示被選中,而不需要調用SelectedItemChanged,這不是我想要的。

有沒有辦法做到這一點?

謝謝!

回答

3

我認爲你想壓制你的事件處理程序中的代碼?如果是這樣,這樣做的一個常用方法是使用一個布爾標誌(或有時一個int計數器):

bool updatingSelected; 

void SomeHandler(object sender, EventArgs args) { // or whatever 
    if(updatingSelected) return; 

    //... 
} 

void SomeCode() { 
    bool oldFlag = updatingSelected; 
    updatingSelected = true; 
    try { 
     // update the selected item 
    } finally { 
     updatingSelected = oldFlag; 
    } 
} 
+0

嗨,馬克! 這是我的第一個想法,但由於我可能有許多應該行爲相似的控件,它可能不能很好地擴展。我希望避免這樣的解決方案,但我可能不得不笑笑並忍受它。 – djcouchycouch 2009-05-21 20:08:38

0

它是否會因此暫時刪除TreeView的SelectedItemChanged事件處理程序,並重新添加它,一旦你」已經完成了必要的操作?我自己並沒有嘗試過,但這是我唯一能想到的其他事情(Marc Gravell打敗了我的原始答案 - 我之前完成了這個);)。

祝你好運!