【问题标题】:How to append a non-breaking space in a TextBox?如何在 TextBox 中添加不间断空格?
【发布时间】:2016-09-20 16:52:07
【问题描述】:

我有一个 WinForms 项目,我在其中将波斯文本输入到 TextBox 控件中。我在 HMTL 页面中看到了用法。但是,我在这里需要的是我想设置一个键盘快捷键,所以当按下快捷键时,TextBox 会在文本中附加一个不间断的空格,用户可以继续输入其余部分。正如您在下面看到的那样,这个元素对于某些语言(例如波斯语)确实很重要:

普通文本:

کتابخانه های الکترونیکی

有不间断的空间:

کتابخانه‌های الکترونیکی

如何在 WinForms 中使用它?

【问题讨论】:

  • 但是两个字是一样的,什么意思?
  • 改用 RichTextBox 吗?尤其是使用快捷方式。
  • @mohsen 它们在进行搜索时特别不同。不间断空间不是完整的空间。
  • 你想阻止在按下快捷键时输入它们吗?
  • 哪个快捷方式会进入不间断空格?

标签: c# winforms textbox


【解决方案1】:

您可以捕获KeyPress 事件并在插入点插入您想要的字符,如下所示:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Space &&
        ModifierKeys == Keys.Control)
    {
        char nbrsp = '\u2007';                 // non-breaking space
        char zerospace = '\u200B';            // zero space
        char zerospacenobinding = '\u200C';  //zero space no character binding
        char zerospacebinding = '\u200D';   // zero space with character binding

        int s = textBox1.SelectionStart;
        textBox1.Text = textBox1.Text.Insert(s, nbrsp.ToString() );
        e.Handled = true;
        textBox1.SelectionStart = s + 1;
    }
}

请注意,虽然Word 使用我Ctl-Shift-Space这个组合也可以在Right-To-LeftLeft-To-Right 之间切换。所以让我们改用Ctrl-Space

另请注意,虽然KeyDown 确实有一个e.Handled 参数,但将其设置为true 不会抑制输入的字符。所以我们需要使用KeyPress事件..

【讨论】:

  • 这个直接的答案没有用。使用它时,我刚刚收到了 nbrsp 的正常空间和 slimnbrsp 的“i”后裔。但是,我使用的技巧是这样的:我在 Microsft 单词中输入了一个 nbsp,将其复制到一个字符串变量中,并将其替换为 nbrsp.toString()。好吧,它现在就像我想要的那样工作。谢谢。
  • 还有一件事我最好提一下。看来我错误地使用了 NBSP 而不是Zero-width space。不过我还不确定。希望有人可以使用这个答案。
  • 对不起,错误的字符代码。请看我的更新。我不确定你真正需要哪个角色,或者如果你选择绑定零空间,你是否应该选择不同的捷径..
  • 顺便说一句:我发现 Windows 工具程序 CharacterMap 对于查找密钥及其代码非常有用。
  • 我理解这在波斯语等语言中通常很重要。这个也行不通,因为我得到了一个正方形的快捷方式。我将不得不坚持我之前提到的评论。现在唯一的问题是我的语言是 RTL,但是当按下 Ctrl+Shift 文本框时会变成 LTR。无法通过代码重新 RTL。
【解决方案2】:

您可以处理KeyPress 事件,然后例如如果用户按下Ctrl+空格,则将空格替换为\u200B 字符:

using System.Windows.Forms;
public class ExTextBox : TextBox
{
    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        if(e.KeyChar==' ' && ModifierKeys== Keys.Control)
            e.KeyChar='\u200B';
        base.OnKeyPress(e);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 2011-08-19
    • 2020-06-01
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多