-1

我有这个表格:

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 GatherLinks
{
    public partial class ChangeLink : Form
    {


        public ChangeLink()
        {
            InitializeComponent();

        }

        public string getText()
        {
            return textBox1.Text;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(textBox1.Text))
            {
                DialogResult = DialogResult.OK;
            }
            else
            {

            }

        }

        private void ChangeLink_Load(object sender, EventArgs e)
        {
            this.AcceptButton = button1;
        } 

    }
}

Form1中的这段代码:

public void KeysValuesUpdate()
        {
            DialogResult dr = DialogResult.None;
            using (var w = new StreamWriter(keywords_path_file))
            {

                crawlLocaly1 = new CrawlLocaly(this);
                crawlLocaly1.StartPosition = FormStartPosition.CenterParent;
                if (FormIsClosing != true)
                {
                    dr = crawlLocaly1.ShowDialog(this);
                }
                if (dr == DialogResult.OK)
                {
                    if (LocalyKeyWords.ContainsKey(mainUrl))
                    {
                        LocalyKeyWords[mainUrl].Clear();
                        LocalyKeyWords[mainUrl].Add(crawlLocaly1.getText());
                    }
                    else
                    {
                        LocalyKeyWords[mainUrl] = new List<string>();
                        LocalyKeyWords[mainUrl].Add(crawlLocaly1.getText());
                    }
                    Write(w);
                    ClearListBox();
                }
                if (dr == DialogResult.Cancel)
                {
                    Write(w);
                }
                if (dr == DialogResult.None)
                {
                    Write(w);
                }
            }
        }

这个 KeysValuesUpdate() 函数在这里被调用:

private void button2_Click(object sender, EventArgs e)
        {
            cl = new ChangeLink();
            cl.StartPosition = FormStartPosition.CenterParent;
            DialogResult dr = cl.ShowDialog(this);
            if (dr == DialogResult.Cancel)
            {
                cl.Close();
            }
            else if (dr == DialogResult.OK)
            {
                label4.Text = cl.getText();
                mainUrl = cl.getText();
                if (!LocalyKeyWords.ContainsKey(mainUrl))
                {
                    newUrl = true;
                    KeysValuesUpdate();
                }
                else
                {
                    newUrl = false;
                    KeysValuesUpdate();
                }
                OptionsDB.set_changeWebSite(cl.getText());
                cl.Close();
                listBox1.SelectedIndex = listBox1.Items.Count - 1;
            }
        }

当我单击 button2 时,它会打开带有文本框的新表单,然后在里面我可以输入文本。然后我检查里面的文本是否已经存在,那么 newUrl 是 false 还是 true。然后,当我单击新表单中的确定按钮时,它会检查我输入的文本是否包含/存在。

我希望当用户在输入的同时在文本框中键入内容时,如果它是包含/存在键,然后将文本框中的文本着色为红色,用户一直在输入并且文本不是包含/EXist,将其颜色变回黑色但每次如果文本框包含/存在中的文本已经将其着色为红色,并且仅当它匹配大小写而不是文本在其他文本内时:

这是黑色的:例如:Danny hello all

但是如果我只在文本框中输入:你好,那么你好这个词将是红色的,那么如果我在你好之后继续输入,那么文本框中的所有文本都是黑色的,如果我删除文本并只保留单词你好,那么它将是又红了。

当我在文本框中输入文本时,这应该是根据上面的代码和实时的。

使用 textBox1 文本更改事件更新代码的新表单再次:

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 GatherLinks
{
    public partial class ChangeLink : Form
    {
        Form1 f1;

        public ChangeLink(Form1 f)
        {
            InitializeComponent();

            f1 = f;
        }

        public string getText()
        {
            return textBox1.Text;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(textBox1.Text))
            {
                DialogResult = DialogResult.OK;
            }
            else
            {

            }

        }

        private void ChangeLink_Load(object sender, EventArgs e)
        {
            this.AcceptButton = button1;
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (f1.mainUrl.Contains(textBox1.Text))
            {
                textBox1.ForeColor = Color.Red;
            }
            else
                textBox1.ForeColor = Color.Black;
        } 

    }
}
4

2 回答 2

1
private void textBox_TextChanged(object sender, EventArgs e)
        {
            if (Regex.IsMatch(yourtext, @"\b" + textBox.Text + @"\b"))
            {
                textBox.ForeColor = Color.Red;
            }
            else
                textBox.ForeColor = Color.Black;
        }

将包含变量名称的数据放在yourtext.

我已经编辑了答案。正如您要求的那样,它与整个单词完美匹配。要使用Regex类,请包含System.Text.RegularExpressions命名空间。

于 2013-02-21T17:09:24.457 回答
0

您只需定义一个方法即可实现 textBox1 TextChanged事件处理程序

private void textBox1_TextChanged(object sender, EventArgs e)
{
    var textBox = sender as TextBox;
    String text = textBox.Text;
    if (SomeCheck(text))
    {
        textBox.ForeColor = Color.Red;
    }
    else
    {
        textBox.ForeColor = Color.Black;
    }
}

并将方法分配给textBox1_TextChanged文本OnTextChanged框的属性

于 2013-02-21T16:55:33.130 回答