2013-05-22 52 views
0

我的winform能夠存儲輸入到文本框中的值,然後當在樹視圖上選擇適當的節點時,這些值將返回到它們輸入的文本框。但是,我在嘗試修改程序時遇到問題,以便用戶可以重寫他們存儲的值。更改文本框中的存儲值

這是怎麼了,此刻設置:

private void tagTextBox_TextChanged(object sender, EventArgs e) 
{ 
    _screenTag = tagTextBox.Text; 

    if (_selectedNode > -1) 
    { 
     Node n = _nodeList[_nodeList.Count - 1]; 
     n.Tag = _screenTag; 
    } 
} 

上述方法首先將值進入我的tagTextbox。接下來,我通過這個到包含節點列表的字典(與TreeView節點相混淆的自定義類,而不是,不好意思):

foreach (KeyValuePair<string, Entry> pair in n.nodeDictionary) 
{    
    if (pair.Key == "Tag ") 
    { 
     tagTextBox.Text = (string)pair.Value.value; 
    } 
} 

上述方法被調用時,任何一個節點(不是我的等級節點,一個樹節點(抱歉,如果這是令人困惑的))在我的樹視圖被選中。這將帶回存儲的值並將其重新輸入到正確的文本框中。現在

,這是我在試圖對與我的屏幕相關聯的標記文本框改變和更新值電流的嘗試:

private void tagTextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
{ 
    // Update the name when enter is pressed 
    if (e.KeyCode == Keys.Enter) 
    { 
     if (_selectedNode > -1) 
     { 
      HV_Screen s = _screenList[_screenList.Count - 1]; 
      s.Tag = _screenTag; 
     } 
    } 
} 

但它不工作。我檢查過了,這個方法正在調用,但沒有更新。我知道這通常是一件簡單的事情,但我在這裏非常困惑,我花了8個小時的時間試圖找出如何解決這個問題,但沒有運氣。

任何人都可以告訴我我做錯了什麼/失蹤?

+0

如果你的'textbox'值沒有得到更新,那麼我認爲你應該嘗試'textbox.Update()'或強制GUI更改。 –

+0

試過了,它不起作用。謝謝你。 – N0xus

+0

A)使用調試器斷點檢查事件觸發的順序。 B)檢查調試器中似乎沒有更新的值以及顯示的值。 –

回答

0

我不知道這是什麼正在努力實現

if (_selectedNode > -1) 
{ 
    Node n = _nodeList[_nodeList.Count - 1]; 
    n.Tag = _screenTag; 
} 

它不應該是這樣的:

if (_selectedNode > -1) 
    _nodeList[_selectedNode].Tag = _screenTag; 

這可能嗎?但我不確定,很難看到你想要達到的目標。 原因是你沒有使用_selectedNode,只知道它更多。你如何設置你的_selectedNode,這可能會影響。我誤解了嗎?

我將重新編寫循環:

foreach (KeyValuePair<string, Entry> pair in n.nodeDictionary) 
{    
    if (pair.Key == "Tag ") 
    { 
     tagTextBox.Text = (string)pair.Value.value; 
    } 
} 

爲:

tagTextBox.Text = n.nodeDictionary.Where(x => x.Key.Equals("Tag")).value; 

它可能是這個(我做了我的頭頂部):

tagTextBox.Text = n.nodeDictionary.Where(x => x.Key.Equals("Tag")).FirstOrDefault().value; 

我這樣做,只是因爲我更容易閱讀和操作恕我直言,但真的取決於你。有利條件下,我只將7行減少到1.其次,可讀性沒有受到影響。它讀得很好:看看nodictionary =>其中鍵==標記=>從列表中獲得第一個=>獲取它的值。

+0

你是什麼工作流程,你能寫出來嗎? –