如何在TextBox中使用不间断的空格

时间:2016-05-23 17:37:18

标签: c# winforms textbox

我有一个WinForms项目,我将波斯文本输入到TextBox控件中。我见过HMTL页面的用法。但是我需要的是我想要设置一个键盘快捷键,这样当按下快捷键时,TextBox会在文本中附加一个不间断的空格,用户可以继续输入其余部分。这个元素对于像波斯语这样的语言非常重要,如下所示:

普通文字:

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

有不间断的空间:

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

如何在WinForms中使用它?

2 个答案:

答案 0 :(得分:1)

您可以处理KeyPress事件,然后例如,如果用户按 Ctrl + 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);
    }
}

答案 1 :(得分:1)

您可以捕获<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <GetQuoteResponse xmlns="http://www.echo.com/"> <GetQuoteResult> <TotalRateQuotes>1</TotalRateQuotes> <RateQuote> <QuoteId>0</QuoteId> <Request> <TotalWeight>0</TotalWeight> <Items/> <Accessorials/> <Origin/> <Destination/> <PickupDate>2002-09-24T01:00:00-05:00</PickupDate> <PalletQty>12</PalletQty> <ReturnMultipleCarriers>true</ReturnMultipleCarriers> <SaveQuote>true</SaveQuote> </Request> <RateDetails/> <Messages> <Status>-999</Status> <Errors> <Error xsi:type="xsd:string">Unexpected Error has occured.</Error> </Errors> <Warnings/> </Messages> </RateQuote> </GetQuoteResult> </GetQuoteResponse> </soap:Body> </soap:Envelope> 事件并在插入点插入所需的字符,如下所示:

KeyPress

请注意,虽然Word使用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; } } ,但此组合也可以在Ctl-Shift-SpaceRight-To-Left之间切换。因此,让我们使用Left-To-Right代替。

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