将字符串中的字符替换为另一个字符并切换回来

时间:2013-10-06 07:27:07

标签: c# visual-studio

快速注意 - 我对c#很新,所以如果这很简单,我道歉。

我很难在书中完成一个简单的c#任务。

伪代码 -

文本框文字=用户输入

如果单击按钮1   用星号替换文本框中的所有大写字母

否则,如果单击按钮2   用原始字符替换星号(恢复正常)

这是我到目前为止所拥有的

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
            button1.Click += new System.EventHandler(ClickedButton);
            button2.Click += new System.EventHandler(ClickedButton);
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        public void ClickedButton(object sender, EventArgs e)
        {


            string orignalText = textBox1.Text;


            if (sender == button1)

            {
                string replaced = Regex.Replace(orignalText, @"[A-Z]", "*");
                textBox1.Text = (replaced);

            }

            else if (sender == button2)

            {
                textBox1.Text = (orignalText);
            }


        }


    }
}

问题是button2显示带有星号的文本。它应该显示(我希望它显示)原始字符。

4 个答案:

答案 0 :(得分:3)

originalText应该是类字段而不是局部变量。此外,如果有人点击button2,您也不应存储文本框的值。尝试将此ClickedButton方法替换为:

    string orignalText;

    public void ClickedButton(object sender, EventArgs e)
    {
        if (sender == button1)
        {
            orignalText = textBox1.Text;

            string replaced = Regex.Replace(orignalText, @"[A-Z]", "*");
            textBox1.Text = replaced;
        }
        else if (sender == button2)
        {
            textBox1.Text = orignalText;
        }
    }

答案 1 :(得分:1)

你有2个问题。首先,您在知道按下哪个按钮之前设置了原始文本。其次,originalText是一个局部变量,所以当你想要重新替换它时,它将不再包含原始文本。

答案 2 :(得分:1)

您只需要全球化originaltext变量并移动行

string orignalText = textBox1.Text;

进入第一次if检查。

答案 3 :(得分:1)

试试这个:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace WindowsFormsApplication1
{
  public partial class Form1 : Form
  {

    public Form1()
    {
        InitializeComponent();
        button1.Click += new System.EventHandler(ClickedButton);
        button2.Click += new System.EventHandler(ClickedButton);
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    string orignalText = null; //you should define this var outside of ClickedButton method to keep its value during button1/2 clicks

    public void ClickedButton(object sender, EventArgs e)
    {

        if (sender == button1)
        {
            orignalText = textBox1.Text;
            string replaced = Regex.Replace(orignalText, @"[A-Z]", "*");
            textBox1.Text = replaced;
        }
        else if (sender == button2)
        {
            if (orignalText != null) textBox1.Text = orignalText;
        }

    }

  }
}