Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从文本框提取十六进制值并将其存储在整数变量中_C#_Wpf_Mvvm_Textbox - Fatal编程技术网

C# 无法从文本框提取十六进制值并将其存储在整数变量中

C# 无法从文本框提取十六进制值并将其存储在整数变量中,c#,wpf,mvvm,textbox,C#,Wpf,Mvvm,Textbox,我有一个文本框 <TextBox Height="23" Grid.Column="1" PreviewTextInput="AddressBox_PreviewTextInput" HorizontalAlignment="Right" Margin="0,27,13,0" Name="AddressI2C" Text="{Binding Path=AddressMessage, Mode=TwoWay}" VerticalAlignment="Top" Width="128" />

我有一个文本框

<TextBox Height="23" Grid.Column="1" PreviewTextInput="AddressBox_PreviewTextInput" HorizontalAlignment="Right" Margin="0,27,13,0" Name="AddressI2C" Text="{Binding Path=AddressMessage, Mode=TwoWay}" VerticalAlignment="Top" Width="128" />

    private string _AddressMessage = string.Empty;
    public string AddressMessage
    {
        get
        {
            return _AddressMessage;
        }
        set
        {
            _AddressMessage = value;
            NotifyPropertyChanged("AddressMessage");
        }
    }
我试着做了以下几点:

string strValue = AddressMessage;
if(strValue.StartsWith("0x"))
{
    strValue = strValue.Remove(0,2);
    int address = Convert.ToInt32(strValue);         
}
但AddressMessage始终为空,即使在调试代码时输入“0x23”。控件没有进入循环。现在我如何才能做到这一点呢???

试试这个:

int address = int.Parse(MyTextBox.Text, System.Globalization.NumberStyles.HexNumber);

由于该值绑定到
AddressMessage
属性,因此只需获取该值即可。另外,您的示例刚刚从十六进制字符串中去掉了“0x”,所以只需使用
string.SubString()

例如:

int address = int.Parse(AddressMessage.Substring(2));
如果需要将十六进制字符串实际转换为它所表示的实际整数,请使用
System.convert

int address = Convert.ToInt32(AddressMessage, 16);

请不要只是把代码作为一个答案,添加一两句解释为什么这个代码应该有效。我试过了。它不起作用。MyTextBox.text似乎不起作用。我已经更新了question@Sam,对于一个C#程序员来说,这段C#代码几乎是不言自明的。我很欣赏你的回答。这个代码中没有火箭科学。@vulcanraven代码的唯一答案通常是。虽然这个答案很基本,但问题也是如此,OP显然在与这个概念作斗争。了解火箭科学对火箭科学家来说并不令人难以置信,一两句话不会让你丧命,它甚至可以解释为什么“
MyTextBox.text
似乎不起作用”。嘿@Bryan谢谢你的回答:)我试过使用它,调试它时会抛出以下错误:“startIndex不能大于字符串的长度。参数名称:startIndex“我实际上需要从textbox中获取0x12并将oly 12存储到address变量中。我尝试了您上面提到的方法,但它抛出了错误,如上所述是textbox的值”0x12"? 听起来您的属性没有正确绑定,而AddressMessage是一个空字符串。请确保您为视图正确设置了数据上下文。
int address = Convert.ToInt32(AddressMessage, 16);