C# 字符串值传递不正确
在我的程序中,我有一个C# 字符串值传递不正确,c#,wpf,string,header,treeviewitem,C#,Wpf,String,Header,Treeviewitem,在我的程序中,我有一个TreeViewItem,它的标题设置为一个数值整数值。为了将标题转换为直接的int值,我将传递给名为getNumber的函数 MygetNumber函数: 此函数来自 我在程序中的几个不同区域以相同的方式传递此函数,但其中一个区域的字符串传递不正确。在调试器中(parentNodeHeader)将“System.Windows.Controls.StackPanel”显示为它的值而不是数字。我不知道为什么会这样 对于函数的工作调用和非工作调用,我使用相同的代码 int c
TreeViewItem
,它的标题
设置为一个数值整数
值。为了将标题
转换为直接的int
值,我将传递给名为getNumber
的函数
MygetNumber
函数:
此函数来自
我在程序中的几个不同区域以相同的方式传递此函数,但其中一个区域的字符串
传递不正确。在调试器中(parentNodeHeader
)将“System.Windows.Controls.StackPanel”
显示为它的值而不是数字。我不知道为什么会这样
对于函数的工作调用和非工作调用,我使用相同的代码
int curNumber = getNumber(SelectedItem.Header.ToString());
为什么会发生这种情况?我如何修复它
更新:
通过添加以下内容,我更改了对getNumber
函数的调用
var selectedHeader = (TextBlock)SelectedItem.Header; //The header is now a TextBlock
int curNumber = getNumber(selectedHeader.Text);
理论上,这应该是可行的,但我得到了一个InvalidCastException
,它说它不能将StackPanel
转换为TextBlock
。StackPanel
从哪里来
谢谢您的帮助。我没有使用
getNumber()
函数,而是使用Regex
从字符串中提取整数
要使用Regex
,需要包含System.Text.regular表达式代码>
然后像这样实现它:var data=Regex.Match(stringValue,@“\d+”).Value代码>你还记得我什么时候告诉过你,你不应该阅读UI元素的属性吗?如果你听从了我的建议,而不是像黑客那样的可怕的winforms,那么你现在已经完成了你的申请(两次)。我相信你刚刚完成了scolded@HighCore我认为你是一个能说出心中想法的人,我很感激。然而,对我来说,你怎么称呼我的代码并不重要。我明白你的意思,但我已经取得了比从最底层学习MVVM更大的进步。我现在知道了我的程序,我知道如何引用其中的元素,所以这就是我所关心的。@Ericafterdark plus,盲目地编写越来越多的代码,而不是应用适当的模式,导致糟糕的设计,完全膨胀,可能90%的代码可以被简单的绑定替换。您正在传入一个StackPanel
对象,并在其上调用ToString()
StackPanel
没有有意义的“文本”或“字符串”概念,因此使用报告其类型名称的默认行为。您需要访问并传递某种类型的TextBox
控件(或者包含在StackPanel
中的任何UI控件,其中包含您要解析的文本)。此外,您不应将0
作为默认值分配给curNumber
;它被Int32.TryParse
方法丢弃。
var selectedHeader = (TextBlock)SelectedItem.Header; //The header is now a TextBlock
int curNumber = getNumber(selectedHeader.Text);