none
TextBox输入回车后无法再输入的问题 RRS feed

  • 问题

  • ENV        : WIN8 RP

    APP TYPE: C# metro style

    碰到了一个很诡异的问题,忘高手解决。问题如下,将一个TextBox的maxlength设置成1,功能一切正常。自己在做任意测试的时候,发现一个特殊情况,如果我在textbox中输入回车,光标会换行,但是再也无法接受其他输入,此时只能接受‘backspace’或者右键‘撤销’动作,此后光标回复到上一行,可以继续输入。所以问题是:

    a. 回车如果也被算作一个char读入,那maxlength为1的条件已被满足,按照我所写的代码功能,下一个textbox会获得focus,但是结果却没有,光标没有跳转,只是回车换行到了下一行。

    b. 回车如果不算一个有效的输入,为什么textbox里的光标会换行,并且无法再接受新的输入?


    • 已编辑 cooIkid 2012年8月13日 7:29 打错字了
    2012年8月10日 6:49

答案

  • Hi,

    我看了你的代码,问题出在AcceptReturn上面,回车这个动作的Length是2,回车和换行。

    也就是说接受了回车之后,你TextBox的Text.Length就是2了。因此接受不了输入了。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年8月17日 9:55
    版主

全部回复

  • 顶一顶 咋没人来解决nie 是提的问题不够清晰明了么?


    2012年8月13日 7:30
  • Hi,

    回车实际上是两个动作,回车和换行,理论来说这个不算输入因为这种特殊字符会在路由的时候被预处理掉并且停止路由。

    TextBox实际上只有一行,不能换行的不太清楚你的程序为什么会换行,能把代码给我看看吗?


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年8月13日 8:19
    版主
  • 代码是指xmal里的代码吧?

    因为对应的.cs文件中关于该textbox的textchange函数,我尝试将其中代码全都注释,现象依然存在,所以问题应该不在.cs的实现代码方面,我更加怀疑的是textbox的属性设置方面。而xmal中与此textbox属性相关的也只有maxlength=1,具体的代码我待会儿贴上来。



    • 已编辑 cooIkid 2012年8月15日 5:52
    2012年8月15日 5:49
  • Hi,

    能把你的代码贴一下吗?在我这里TextBox不接受回车键换行,因为TextBox只有一行。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年8月16日 2:56
    版主
  • 抱歉 高手 回晚了

    xaml与之对应的代码:

    <TextBox x:Name="numInput1" Width="150" HorizontalAlignment="Center" Height="150" Margin="0,0,90,2" TextChanged="numInput1_TextChanged" FontSize="45" FontWeight="Bold" AcceptsReturn="True" VerticalAlignment="Center" MaxLength="1" TextAlignment="Center"  />

    与之对应的.cs代码:

            private void numInput1_TextChanged(object sender, TextChangedEventArgs e)
            {
                if (1 == numInput1.Text.Length)
                {
                    numInput2.Focus(Windows.UI.Xaml.FocusState.Keyboard);
                }
            }

    劳驾看一看这个问题,虽然是个小问题,但是我觉得很稀奇

    2012年8月17日 9:35
  • Hi,

    我看了你的代码,问题出在AcceptReturn上面,回车这个动作的Length是2,回车和换行。

    也就是说接受了回车之后,你TextBox的Text.Length就是2了。因此接受不了输入了。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年8月17日 9:55
    版主
  • 果然是这个问题,thx。

    附加有个问题,acceptreturn属性的设置会有什么效果?

    最开始之所以设置这个是因为想要在textbox输入数字之后会显示出来,但是刚刚把该属性取消后输入的数字也能显示出来。

    2012年8月18日 1:18
  • Hi,

    我没太看懂为什么输入数字之后显示出来要设置这个属性。不过在TextBox类似的控件中,是没有属性能够限定用户的输入的(inputScope属性也不行),而且我也不推荐这样做,我推荐的做法是在用户输入后对其输入内容进行检查。


    Aaron Xue [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年8月20日 1:53
    版主