我有一个WinForms项目,我将波斯文本输入到TextBox控件中。我见过HMTL页面的用法。但是我需要的是我想要设置一个键盘快捷键,这样当按下快捷键时,TextBox会在文本中附加一个不间断的空格,用户可以继续输入其余部分。这个元素对于像波斯语这样的语言非常重要,如下所示:
普通文字:
کتابخانههایالکترونیکی
有不间断的空间:
کتابخانههایالکترونیکی
如何在WinForms中使用它?
答案 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-Space
和Right-To-Left
之间切换。因此,让我们使用Left-To-Right
代替。
另请注意,虽然Ctrl-Space
确实有KeyDown
参数,但将其设置为e.Handled
并不会抑制输入的字符。所以我们需要使用true
事件..