gpt4 book ai didi

c# - 如何修复 c# 屏蔽文本框从右到左的输入行为?

转载 作者:太空宇宙 更新时间:2023-11-03 15:55:26 27 4
gpt4 key购买 nike

我使用WinForms 屏蔽文本框以hh:mm:ss 格式输入时间。我的掩码是 99:99:99,我使用 right-to-left 输入模式。

问题是,当我在其中键入 123 时,我希望它输入 1:23,但它却这样做:__:12: 3_(因此值为 12:3x,并且它将 x 替换为键入的下一个值)。

我该怎么做才能让它只将文本推到左边而不是将整个 ss block 复制到 mm

编辑:这里有一个说明:我的客户需要以这样的方式输入时间值:
12[Enter] 接受为 12 秒
123[Enter] 是 1 分 23 秒
1234[Enter] 将是 12 分 34 秒
12345[Enter] 将是 1 小时 23 分 45 秒,依此类推...

问题是,当 123 被输入到一个屏蔽的文本框中时,它会将 12 移动到 minutes 字段,而不仅仅是 1seconds 字段中只剩下 3

编辑 2:任何使用过屏蔽文本框的人都知道,将 TextAlign 设置为 Right 并不能像您期望的那样工作,就像在任何普通的文本编辑器中一样。相反,它只是将整个掩码放在控件的右侧,但值的插入方式仍与 TextAligh 为 Left 时相同。
这就是我尝试使用 RightToLeft 的原因。

最佳答案

您想要的似乎几乎是不可能的。除非您键入冒号以显示分隔,否则掩码文本框如何知道您是指 1 位还是 2 位应用于您键入的第一个字段?

我认为对于您似乎想要的具有 hh:mm:ss 自定义格式的 DateTimePicker 会更好。输入自动从 hours 字段开始。用户可以键入 1 位或 2 位数字,然后输入冒号,输入将自动移至下一个字段。您还可以选择 UpDown 按钮,用户可以单击这些按钮来更改突出显示的字段。

几乎不可能,我指的是原生行为。通过创建一个继承自文本框的自定义文本框,您可以做您想做的事:

public class TimeTextBox : TextBox
{
public TimeTextBox()
{
this.KeyPress += TimeTextBox_KeyPress;
}
public DateTime timeValue = new DateTime();
private void TimeTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
if(char.IsDigit(e.KeyChar))
{
Text += e.KeyChar;
SelectionStart = Text.Length;
}
else
{
MessageBox.Show("Wrong input");
return;
}
FixText();
if(Text.Length > 3 && !DateTime.TryParse(Text, out timeValue))
{
MessageBox.Show("Wrong input");
Text = Text.Remove(Text.Length - 1);
FixText();
timeValue = DateTime.Parse(Text);
}
}
private void FixText()
{
Text = Text.Replace(":", "");
for(int i = Text.Length - 3; i > -1; i -= 2)
{
Text = Text.Insert(i + 1, ":");
SelectionStart = Text.Length;

}
}
}

这将格式化和验证输入,总是从右边开始计数,每 2 个字符插入一个冒号。有简单的验证,但尚未针对所有场景进行测试。

关于c# - 如何修复 c# 屏蔽文本框从右到左的输入行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23860448/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com