C# 如何有效地处理已编辑的字符串?

C# 如何有效地处理已编辑的字符串?,c#,winforms,validation,C#,Winforms,Validation,我注意到VS/C中有一些东西,这对我来说有点灰色?希望有人能解释。我已经按照在线指南设置了一个Treeview控件,并复制和粘贴了表示它处理了标签并通过了某些验证的代码,正如您将在下面看到的,但是所需的结果并不完全存在 正在发生的事情: 似乎代码只是在检查编辑,而不是标签?因为如果标签没有更改,我开始看到MessageBox出现,即使值不是null,长度>0并且不包含特殊字符。。这让我相信它只是在检查新值 private void TreeSlabs_AfterLabelEdit

我注意到VS/C中有一些东西,这对我来说有点灰色?希望有人能解释。我已经按照在线指南设置了一个Treeview控件,并复制和粘贴了表示它处理了标签并通过了某些验证的代码,正如您将在下面看到的,但是所需的结果并不完全存在

正在发生的事情: 似乎代码只是在检查编辑,而不是标签?因为如果标签没有更改,我开始看到MessageBox出现,即使值不是null,长度>0并且不包含特殊字符。。这让我相信它只是在检查新值

        private void TreeSlabs_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
        {
            if (e.Label != null)
            {
                if (e.Label.Length > 0)
                {
                    if (e.Label.IndexOfAny(new char[] { '@', '.', ',', '!' }) == -1)
                    {

                        // Stop editing without canceling the label change.
                        e.Node.EndEdit(false);   


                    }
                    else
                    {
                        /* Cancel the label edit action, inform the user, and 
                            place the node in edit mode again. */
                        e.CancelEdit = true;
                        MessageBox.Show("Invalid tree node label.\n" +
                           "The invalid characters are: '@','.', ',', '!'",
                           "Node Label Edit");
                        e.Node.BeginEdit();
                    }
                }
            }
            else
            {
                /* Cancel the label edit action, inform the user, and 
                    place the node in edit mode again. */
                e.CancelEdit = true;
                MessageBox.Show("Invalid tree node label.\nThe label cannot be blank",
                   "Node Label Edit");
                e.Node.BeginEdit();
            }
        }
有人能证实我的理论吗

使用此代码测试值的更好方法是什么?我知道进入树中的值是根据上述条件“验证”的。。所以,如果标签没有改变,它应该仍然允许编辑,但它不会

如有任何建议,将不胜感激

非常感谢SO社区


杰克

你的问题是什么?您是在试图弄清楚代码在做什么还是有特定的要求?我不知道您是否照样复制了代码,无论如何,请更改第一个条件:
if(e.Label==null)return
else
部分属于外部
if
条件,它需要是
if(e.Label.Trim().Length>0){if(e.Label.IndexOfAny(…)…}else{e.CancelEdit=true;…}
。内部
如果/else
条件正常,会准确显示什么消息框?您确定您的验证过程正确吗?您想实现什么?您好,感谢响应者(整天都在工作),因此,可以确认,这是最后一个异常“null”,因为它只返回“标签不能为空”MessageBox。我想实现什么?我只是想启用标题编辑功能,但要确保值没有错误。老实说,我还没有以最好的方式实现这一点。(如果你说不出来,我是新来的)最终,我希望能够从树视图中提取所有数据,并将其转换为HTML Texpart电子邮件正文。你的问题是什么?你是在试图弄清楚代码在做什么还是有特定的要求?我不知道你是否照样复制了代码,无论如何,改变第一个条件:
if(e.Label==null)返回;
else
部分属于外部
if
条件,它需要是
if(e.Label.Trim().Length>0){if(e.Label.IndexOfAny(…)…}else{e.CancelEdit=true;…}
。内部
如果/else
条件正常,会准确显示什么消息框?您确定您的验证过程正确吗?您想实现什么?您好,感谢响应者(整天都在工作),因此,可以确认,这是最后一个异常“null”,因为它只返回“标签不能为空”MessageBox。我想实现什么?我只是想启用标题编辑功能,但要确保值没有错误。老实说,我还没有以最好的方式实现这一点。(如果你说不出来,我是新来的)最终,我希望能够从树视图中提取所有数据,并将其转换为HTML Texpart电子邮件正文。