我在PowerPoint VSTO加载项中创建了一个任务窗格,我在.Net 4.0上开发了该窗格。 在任务窗格中,我有一个文本框,用户只需输入数字数据。 要求如下:
用户可以通过在每行键入一个数据来输入多个数字数据。 每个数据最多可包含8个字符,包括:数字,小数和逗号。如果一行超过8个字符,则应截断为8个字符。
以下是我正在使用的代码:
public void splitString(string[] strText)
{
string[] arr = txtEntryField.Lines;
for (int n = 0; n < arr.Length; n++)
{
if (arr[n].Length > 8)
{
arr[n] = arr[n].Substring(0, 8);
}
}
txtEntryField.Lines = arr;
if (txtEntryField.Lines.Length > 0)
{
txtEntryField.SelectionStart = txtEntryField.Text.Length;
}
}
我在txtEntryField_TextChanged事件上调用此方法。虽然我几乎在那里,但我认为操作和用户体验并不是那么顺利。
更新了代码,以便用户无法在文本框中输入字符。这可以通过以下代码完成:
void txtEntryField1_KeyPress(object sender, KeyPressEventArgs e)
{
const char Delete = (char)8;
var regex = new Regex(@"[^.,0-9\s]");
if (regex.IsMatch(e.KeyChar.ToString()) && e.KeyChar != Delete && e.KeyChar != (char)Keys.Enter && e.KeyChar != (char)Keys.Back)
{
e.Handled = true;
}
}
任何人都可以帮我找到更好的解决方案吗? 我们非常欢迎任何帮助。 感谢。
答案 0 :(得分:0)
这对我有用:
public void splitString(string[] strText)
{
string[] arr = txtEntryField.Lines;
for (int n = 0; n < arr.Length; n++)
{
if (arr[n].Length > 8)
{
arr[n] = arr[n].Substring(0, 8);
}
}
txtEntryField.Lines = arr;
if (txtEntryField.Lines.Length > 0)
{
txtEntryField.SelectionStart = txtEntryField.Text.Length;
}
}
以下代码也允许用户只输入所需的字符:
void txtEntryField1_KeyPress(object sender, KeyPressEventArgs e)
{
const char Delete = (char)8;
var regex = new Regex(@"[^.,0-9\s]");
if (regex.IsMatch(e.KeyChar.ToString()) && e.KeyChar != Delete && e.KeyChar != (char)Keys.Enter && e.KeyChar != (char)Keys.Back)
{
e.Handled = true;
}
}