更改文本框中的存储值

本文关键字:存储 文本 | 更新日期: 2023-09-27 18:14:43

我的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;
    }
}

当我的treeview上的任何节点(不是我的类节点,树节点(抱歉,如果这令人困惑))被选中时,调用上述方法。这将返回存储的值,并将其重新输入到适当的文本框中。

现在,这是我试图改变和更新与我的屏幕相关联的标签文本框上的值的当前尝试:

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个小时看,试图找出如何解决这个问题,没有运气。

谁能告诉我我做错了什么?

更改文本框中的存储值

我不确定这是想要实现什么

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 =>,其中键==标签=>从列表中获得第一个=>获得其值。