0

我正在尝试拆分数字和字符串并将它们放在文本框上(仅限数字)

我能够做到这一点,但我只得到文本框上的 Last 值。这可能很简单,但因为我是 C# 的新手......所以我想做的是在不同的文本框中获取两个值。8对一个& 17对另一个。

 string Stack = "azersdj8qsdfqzer17";

        string[] digits = Regex.Split(Stack, @"\D+");

        foreach (string value in digits)
        {

            int number;
            if (int.TryParse(value, out number))
            {
                textoutput.Text = value.ToString();
            }
        }
4

5 回答 5

4
textoutput.Text = value.ToString();

此行用该值覆盖 textoutput 的文本值。如果您想要一个文本框中的所有数字,请使用:

textoutput.Text += value.ToString();

这会将下一个值添加到文本框中,而不是覆盖。

如果您希望数字位于不同的文本框中,那么您不能只将值添加到文本输出。您需要一个 if 语句或其他东西来交换您将用来显示数字的文本框。

于 2013-09-27T15:39:49.740 回答
3

您需要将字符串分配给两个文本框,而不是循环中的一个。

string[] digits = Regex.Split(Stack, @"\D+")
    .Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();
textoutput1.Text = digits[0];
textoutput2.Text = digits.ElementAtOrdefault(1);
于 2013-09-27T15:41:44.420 回答
0

现在,您有一个 for 循环,并且您只使用您的值设置一个文本框。有很多方法可以解决这个问题。这是我的建议,假设您的第二个文本框名为 textoutput2:(我采用 Tim Schmelter 的不使用 TryParse 的想法,获取一个 int,然后将其转换为字符串。)

string Stack = "azersdj8qsdfqzer17";
string[] digits = Regex.Split(Stack, @"\D+");

textoutput.Text = "replace";
textoutput2.Text = "replace";

foreach (string value in digits)
{
    if (textoutput.Text == "replace") { 
        textoutput.Text = value;
    } else {
        textoutput2.Text = value;
    }
}

这仍然有点糟糕,因为它设置了第一个的文本,然后对于找到的所有其他数字,它只设置第二个,但是您可以轻松地将其扩展到您拥有的任何数量的文本框,例如有 3 个盒子:

string Stack = "azersdj8qsdfqzer17";
string[] digits = Regex.Split(Stack, @"\D+");

textoutput.Text = "replace";
textoutput2.Text = "replace";
textoutput3.Text = "replace";

foreach (string value in digits)
{
    if (textoutput.Text == "replace") { 
        textoutput.Text = value;
    } else if (textoutput2.Text == "replace") {
        textoutput2.Text = value;
    } else {
        textoutput3.Text = value;
    }
}

还有其他方法可以做到这一点,使用文本框数组或动态创建的文本框,但这是一个基本的开始。

于 2013-09-27T15:43:42.873 回答
0

修改textoutput.Text = value.ToString();语句。

textoutput.Text += value.ToString(); // It will show all numbers present in string

textoutput.Text = value.ToString();  // This will only show the last number in string

代码中的问题是您将数字分配给 Textbox 的文本属性,该属性被最后一个值覆盖,因此您应该将其连接起来以显示所有数字。

于 2013-09-27T15:40:41.533 回答
0

根据评论,总是有两个数字,所以不需要循环,因为你没有附加到同一个文本框。

textoutput.Text = digits[0].ToString();
secondtextoutput.Text = digits[1].ToString();

要使其具有任意位数,您可以遍历您的 TextBoxes。例如,您可以将所有文本框添加到列表中。

List<TextBox> myTextBoxes = new List<TextBox>();
myTextBoxes.Add(myTB1);
myTextBoxes.Add(myTB2);
//...

然后遍历数字并在上面创建的 TextBox 列表中使用相同的索引。

for(int i = 0; i < digits.Length; i++)
{  
   myTextBoxes[i].Text = digits[i].ToString();
}  

您可以添加错误处理(例如,如果 TextBox 的数量小于位数),但这是向不同的 TextBox 添加值的一种方式。

于 2013-09-27T15:41:38.613 回答