1

我在 .Net 4.0 上开发的 PowerPoint VSTO 加载项中创建了一个任务窗格。在任务窗格上,我有一个文本框,用户必须在其中输入数字数据。要求如下:

用户可以通过在每一行输入一个数据来输入多个数字数据。每个数据最多可包含 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;
        }
    }

任何人都可以帮助我提供更好的解决方案吗?任何帮助都是最受欢迎的。谢谢。

4

1 回答 1

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;
    }
}
于 2014-07-14T06:17:11.837 回答