从后面从文本框中删除字符串

时间:2013-04-21 08:01:06

标签: c# string textbox keyboard windows-phone

我在C#中有一个要求,我有一个文本框,其中包含由;分隔的数字,例如: (205)33344455;918845566778;

现在,当用户按←Backspace (删除号码)时,一次删除一个字符。我想一次删除整个号码。

因此,当用户第一次按时,该数字将突出显示 即如果文本为(205)33344455;918845566778;918845566778;部分将以黑色突出显示,当用户再次按时,整个数字即918845566778;将被删除

那么可以突出显示文本框中的特定部分,并删除整数吗?

我使用了for循环,如:

for{back=txtPhone.Text.Length;back<=txtPhone.Text.indexOf(';');back--)

但我无法达到预期的效果。

对此的任何帮助都会很棒。

3 个答案:

答案 0 :(得分:0)

想要实现的几种想法让你想到:

  • 将文本框预订到Control.Keydown事件,该事件将检查按钮并使用TextBox.SelectionLength含义执行突出显示到最后一个分隔符(;) a ←Backspace 将清除它。

        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode != Keys.Left)
                return;
    
            e.SuppressKeyPress = true;
    
            //Select up to previous delimeter (;) here
        }
    
  • 使用列表框(或类似的东西)存储输入的分隔数据。这将允许用户选择他们需要的内容,并通过您将提供的按钮将其删除。

答案 1 :(得分:0)

您可以按照以下所示实现您的要求

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (textBox1.Text.Length == 0) return;

    if ((e.KeyChar == (char)Keys.Back) && (textBox1.SelectionLength == 0))
    {
        textBox1.SelectionStart = Math.Max(0, textBox1.Text.Substring(0,textBox1.Text.Length-1).LastIndexOf(';'));
        if (textBox1.Text.Substring(textBox1.SelectionStart, 1) == ";") textBox1.SelectionStart++;
        textBox1.SelectionLength = textBox1.Text.Length-textBox1.SelectionStart ;
        e.Handled = true;
        return;
    }

    if ((e.KeyChar == (char)Keys.Back) && textBox1.SelectionLength >= 0)
    {
        textBox1.Text = textBox1.Text.Substring(0, textBox1.SelectionStart );
        textBox1.SelectionStart = textBox1.Text.Length;
        e.Handled = true;
    }
}

答案 2 :(得分:0)

你可以:

  1. 选择包含光标的令牌(即数字以;结尾)(方法selectToken())
  2. 退格时删除它     第二次按下

  3. 实施例: 你的文本框包含'(205)33344455; 918845566778; 8885554443;“

    在9188455和66778之间用鼠标左键单击; (第二个数字)

    然后按退格键

    字符串918845566778;被选中

    您再次按退格键并删除该字符串


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Remove_String_from_Text_Box_from_back
    {
        public partial class Form1 : Form
        {
        //selects token that contains caret/cursor      
        private void selectToken() {
            string str0 = textBox1.Text;
            int caretPosition = textBox1.SelectionStart;
            int tokenEndsAtIndex = str0.IndexOf(';', caretPosition, (textBox1.Text.Length - caretPosition));
            string prefix = "";
            if (tokenEndsAtIndex == -1)
            {
                tokenEndsAtIndex = str0.IndexOf(';');
            }
    
            prefix = str0.Substring(0, tokenEndsAtIndex);
            int tokenStartsAtIndex = 0;
            tokenStartsAtIndex = prefix.LastIndexOf(';');
            if (!(tokenStartsAtIndex > -1)) { tokenStartsAtIndex = 0; } else { tokenStartsAtIndex++; }
            textBox1.SelectionStart = tokenStartsAtIndex;
            textBox1.SelectionLength = tokenEndsAtIndex - tokenStartsAtIndex + 1;//may be off by one
    
        }
     private void selectLastToken(string str0)
            {
                Regex regex = new Regex(@"([\d()]*;)$");
                var capturedGroups = regex.Match(str0);
    
                int idx0 = 0;
                if (capturedGroups.Captures.Count > 0)
                {
                    idx0 = str0.IndexOf(capturedGroups.Captures[0].Value, 0);
                    textBox1.Select(idx0, textBox1.Text.Length);
                }
            }
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                textBox1.Text = "(205)33344455;918845566778;";
                textBox1.Select(0, 0);
            }
    
            //selects last token terminated by ;
            private void selectTextOnBackSpace()
            {
                string str0 = textBox1.Text;
                int idx0 = str0.LastIndexOf(';');
                if (idx0<0)
                {
                    idx0 = 0;
                }
                string str1 = str0.Remove(idx0);
                int idx1 = str1.LastIndexOf(';');
                if (idx1 < 0)
                {
                    idx1 = 0;
                }
                else
                {
                    idx1 += 1;
                }
                textBox1.SelectionStart = idx1;
                textBox1.SelectionLength = str0.Length - idx1;
            }
    
    
            private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)Keys.Back )
                {
                    if (textBox1.SelectionLength==0)
                    {
                        selectToken();
                        e.Handled = true;
                    }
                    else
                    {
                        e.Handled = false;
                    }
                }
            }
        }
    }