如何使用C#限制PowerPoint TaskPane上多行文本框中每行的长度?

时间:2014-04-25 12:33:24

标签: c# vsto powerpoint-2010

我在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;
        }
    }

任何人都可以帮我找到更好的解决方案吗? 我们非常欢迎任何帮助。 感谢。

1 个答案:

答案 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;
    }
}