none
请问如何实现像Notepad++一样将选中的字母转为大写? RRS feed

  • 问题

  • 起初我的实现方式是:

    txtEdit.Text= txtEdit.SelectedText.ToUpper();

    但发现点击转为大写时,只是将选中的字母赋给了textEdit,未被选中的被覆盖了。我想实现的是选中的字母转为大写,没有选中的字母保持不变,而非删除掉。

    2014年11月8日 10:07

答案

  • 畫面上加入
    textbox: 命名txtInput
    button: 命名btnUpper

            private void btnUpper_Click(object sender, EventArgs e)
            {
                //------test----------------
                string msg = "";
                msg = "start:" + txtInput.SelectionStart + ",length:" +txtInput.SelectionLength;
                MessageBox.Show(msg);
                //------end of test------------
    
                string input = txtInput.Text; //輸入字串
                int start = txtInput.SelectionStart; //選擇起始
                int len = txtInput.SelectionLength;//選擇長度
    
                
                int rightStrStart = start + len;//右邊字串起始
                string rightStr; //右邊字串
    
                rightStr="";
                if (rightStrStart== txtInput.Text.Length)  
                    rightStr="";//右邊字串起始超過輸入字串長, 則為空白
                else
                    rightStr = txtInput.Text.Substring(rightStrStart, txtInput.Text.Length - rightStrStart); //取出右邊字串
    
                // 左邊字串 + 選擇字串 + 右邊字串
                txtInput.Text = input.Substring(0, start) + txtInput.SelectedText.ToUpper() + rightStr;
    
            }


    Myblog: 松露筆管麵


    2014年11月9日 17:25

全部回复

  • 畫面上加入
    textbox: 命名txtInput
    button: 命名btnUpper

            private void btnUpper_Click(object sender, EventArgs e)
            {
                //------test----------------
                string msg = "";
                msg = "start:" + txtInput.SelectionStart + ",length:" +txtInput.SelectionLength;
                MessageBox.Show(msg);
                //------end of test------------
    
                string input = txtInput.Text; //輸入字串
                int start = txtInput.SelectionStart; //選擇起始
                int len = txtInput.SelectionLength;//選擇長度
    
                
                int rightStrStart = start + len;//右邊字串起始
                string rightStr; //右邊字串
    
                rightStr="";
                if (rightStrStart== txtInput.Text.Length)  
                    rightStr="";//右邊字串起始超過輸入字串長, 則為空白
                else
                    rightStr = txtInput.Text.Substring(rightStrStart, txtInput.Text.Length - rightStrStart); //取出右邊字串
    
                // 左邊字串 + 選擇字串 + 右邊字串
                txtInput.Text = input.Substring(0, start) + txtInput.SelectedText.ToUpper() + rightStr;
    
            }


    Myblog: 松露筆管麵


    2014年11月9日 17:25
  • 谢谢了,我通过记录选择字符串的起始位置和选择字符串的长度,然后截取被选择字符串转换为大写,再通过insert方法插入记录下来的起始位置。关键思路基本和您的一样,不过最后我使用了字符串的插入方法。
    2014年11月14日 13:20