如何在 TextBox 中附加一个不间断的 space?
How to append a non-breaking space in a TextBox?
我有一个 WinForms 项目,我在其中将波斯语文本输入到 TextBox 控件中。我在 HMTL 页面中看到过这种用法。但是我在这里需要的是我想设置一个键盘快捷键,这样当按下快捷键时,TextBox 会在文本中附加一个不间断的 space ,用户可以继续输入其余部分。这个元素对于波斯语等某些语言非常重要,如下所示:
普通文本:
کتابخانههاو ال带
不间断 Space :
کتابخانههاو الکترونیکی
如何在 WinForms 中使用它?
您可以处理 KeyPress
事件,例如,如果用户按下 Ctrl+Space,将 space 替换为 \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);
}
}
您可以捕获 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 使用 I Ctl-Shift-Space
,但此组合也可以在 Right-To-Left
和 Left-To-Right
之间切换。所以让我们使用 Ctrl-Space
代替。
另请注意,虽然 KeyDown
确实有一个 e.Handled
参数,但将其设置为 true
不会抑制输入的字符。所以我们需要使用KeyPress
事件..
我有一个 WinForms 项目,我在其中将波斯语文本输入到 TextBox 控件中。我在 HMTL 页面中看到过这种用法。但是我在这里需要的是我想设置一个键盘快捷键,这样当按下快捷键时,TextBox 会在文本中附加一个不间断的 space ,用户可以继续输入其余部分。这个元素对于波斯语等某些语言非常重要,如下所示:
普通文本:
کتابخانههاو ال带
不间断 Space :
کتابخانههاو الکترونیکی
如何在 WinForms 中使用它?
您可以处理 KeyPress
事件,例如,如果用户按下 Ctrl+Space,将 space 替换为 \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);
}
}
您可以捕获 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 使用 I Ctl-Shift-Space
,但此组合也可以在 Right-To-Left
和 Left-To-Right
之间切换。所以让我们使用 Ctrl-Space
代替。
另请注意,虽然 KeyDown
确实有一个 e.Handled
参数,但将其设置为 true
不会抑制输入的字符。所以我们需要使用KeyPress
事件..