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 に入力された値を保存します。次に、これをノードのリストを含むディクショナリに渡します (カスタム クラスであり、ツリービュー ノードと混同しないでください。申し訳ありません)。

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 時間も費やしましたが、うまくいきませんでした。

私が間違っている/欠けていることを誰かに教えてもらえますか?

4

1 に答える 1

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を見てください。=>=>

于 2013-05-22T13:48:00.640 に答える