转换代码从Windows窗体应用程序到WPF
本文关键字:应用程序 WPF 窗体 Windows 代码 转换 | 更新日期: 2023-09-27 18:18:39
我正试图将代码从WFA (Windows窗体应用程序)转换为WPF。然而,我遇到了很多困难。没有。maxlength。当使用Windows窗体应用程序时,也没有。text。我该如何为WPF重写以下代码?
xbox指的是聊天窗口中的一个框,用户在其中输入文本....
p。下面的代码确实适用于WFA....
private void BoxChatAreaKeyPress(object sender, KeyPressEventArgs e)
{
var xBox = (RichTextBox) sender;
//setting a limit so the user cannot type more than 4000 characters at once
xBox.MaxLength = 4000;
if ((xBox.Text.Length > 1) && (e.KeyChar == (char) Keys.Enter))
{
WriteMessage(xBox);
}
}
private static void WriteMessage(RichTextBox xBox)
{
var writer = new StreamWriter(_client.GetStream());
String message = xBox.Text.TrimEnd(''n') + "|" + _font.Name;
writer.WriteLine(message);
writer.Flush();
xBox.Text = null;
}
我是这么想的:
private void BoxChatAreaKeyPress(object sender, KeyEventArgs e)
{
var xBox = (RichTextBox)sender;
// Setting a limit so the user cannot type more than 4000 characters at once
var textRange = new TextRange(xBox.Document.ContentStart, xBox.Document.ContentEnd);
var textLen = textRange.Text.Trim();
if (textLen.Length <= 4000)
{
if ((textLen.Length > 1) && (e.Key == Key.Enter))
{
WriteMessage(xBox);
}
}
else
{
e.Handled = true;
}
}
根据应用程序的复杂性,直接从WinForm转换到WPF可能不是那么简单。来回答你的两个具体问题。
1)如你所知,在WPF的RichTextBox上没有MaxLength
属性。解决这个问题的一种方法是在用户输入一个字符后记录字符数,并检查它是否大于您的限制。例如(从这里):
private void xBox_KeyDown(object sender, KeyEventArgs e)
{
TextRange tr = new TextRange(xBox.Document.ContentStart ,
xBox.Document.ContentEnd);
if (tr.Text.Length >= 4000 || e.Key == Key.Space || e.Key == Key.Enter)
{
e.Handled = true;
return;
}
}
2)同样,您可以使用TextRange
属性来获取RTB中的文本:
TextRange xBoxTR = new TextRange(xBox.Document.ContentStart,
xBox.Document.ContentEnd);
string xBoxText = xBoxTR.Text;