我有一个RichTextBox,我已经创建了一个"滚动已发送的消息"特征。这意味着如果用户(通过按Enter键)发送任何消息(最多20个),则用户可以通过按键盘上的向上/向下箭头按顺序滚动它们。这部分按预期工作。
问题是:我想在每次按箭头后选择RichTextBox中的所有文本。
这是我的代码:
private void rtb_inputField_KeyDown(object sender, KeyEventArgs e) {
RichTextBox inputField = (RichTextBox)sender;
string userInput = inputField.Text.Trim();
string[] clientScriptString = userInput.Split(' ');
string modifiedInput = string.Empty;
string macroString = string.Empty;
//Other code...
if (e.KeyData == Keys.Enter) {
//Other code..
if ((client != null) && (client.Connected)) {
macroString = runInputThroughMacroDictionary(userInput);
sendInputToServer(macroString); //Sent message
}
addSentMessageToHistory(userInput); //Added sent message to history
e.Handled = true;
e.SuppressKeyPress = true;
hasUpBeenPressed = false;
}
if ((e.KeyData == Keys.Up) || (e.KeyData == Keys.Down)) {
scrollThroughSentMessages(e);
rtb_inputField.SelectAll();
}
}
private void scrollThroughSentMessages(KeyEventArgs e) {
if (sentMessageHistory.Count > 0) {
if (e.KeyData == Keys.Up) {
if (!hasUpBeenPressed) {
scrollThroughMsgHist = sentMessageHistory.Count - 1;
}
else {
scrollThroughMsgHist--;
if (scrollThroughMsgHist < 0) {
scrollThroughMsgHist = sentMessageHistory.Count - 1;
}
}
hasUpBeenPressed = true;
}
if ((e.KeyData == Keys.Down) && (hasUpBeenPressed)) {
scrollThroughMsgHist++;
if ((scrollThroughMsgHist >= 20) || (scrollThroughMsgHist > (sentMessageHistory.Count - 1))) {
scrollThroughMsgHist = 0;
}
}
rtb_inputField.Text = sentMessageHistory[scrollThroughMsgHist];
}
}
private void addSentMessageToHistory(string message) {
int currentAmountOfMessage = sentMessageHistory.Count;
if (!string.IsNullOrWhiteSpace(message)) {
if (currentAmountOfMessage == 0) {
sentMessageHistory.Add(message);
}
else {
if (sentMessageHistory[currentAmountOfMessage - 1] != message) {
if (currentAmountOfMessage == 20) {
sentMessageHistory.RemoveAt(0);
}
sentMessageHistory.Add(message);
}
}
}
}
第一种方法做了很多事情。 (我删除了一些不相关的代码。)它通过第三种方法将最后发送的消息添加到sentMessageHistory(这是一个List)。它还会侦听Up / Down,并调用第二种方法。
第二种方法&#34;滚动浏览&#34; sentMessageHistory -List中的每个条目,并将其写入RichTextBox。所有这一切都很好。
第二种方法运行后,rtb_inputField.SelectAll();
无效。
答案 0 :(得分:0)
我找到了解决方案。我添加了以下内容:
if ((e.KeyData == Keys.Up) || (e.KeyData == Keys.Down)) {
scrollThroughSentMessages(e);
e.Handled = true;
e.SuppressKeyPress = true;
rtb_inputField.SelectAll();
}
我不知道e.Handled
和e.SupressKeyPress
做了什么,但它确实有效。所以现在我的代码在“滚动历史记录”之后成功选择了文本。