RichTextBox选择向上/向下箭头

时间:2017-08-28 13:33:04

标签: c# richtextbox

我有一个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();无效。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我添加了以下内容:

if ((e.KeyData == Keys.Up) || (e.KeyData == Keys.Down)) {
    scrollThroughSentMessages(e);
    e.Handled = true;
    e.SuppressKeyPress = true;
    rtb_inputField.SelectAll();
}

我不知道e.Handlede.SupressKeyPress做了什么,但它确实有效。所以现在我的代码在“滚动历史记录”之后成功选择了文本。