我的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个小时试图找出如何解决这个问题而没有运气。
有谁能告诉我我做错了什么/失踪了?
答案 0 :(得分: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 =>
,其中==
个标记=>
标记=>
中的第一个获取其值{。}}。