0

選択した単語 (フィルター) を含む行のみを表示するrichTextBoxフィルター (たとえば、に接続) のようなものを実装するにはどうすればよいですか?combobox

私は他の行を削​​除することについて話しているのではなく、「隠す」だけです。

出来ますか?

最終的には別のタイプのコントロールを使用することもできますが、それが必要ない場合は、richTextBox を使用したいと考えています。

私は今、データを何らかの構造に格納することを考え、この使用された構造に基づいてフィルタリングを行いました。しかし、それが効率的な解決策であるかどうかはわかりません。

4

5 に答える 5

1

このようなものを作ってみてください

    public string[] RtbFullText;

    private void button7_Click(object sender, EventArgs e)
    {
        RtbFullText = richTextBox1.Text.Split('\n');
    }

    private void button8_Click(object sender, EventArgs e)
    {
        //Filter
        richTextBox1.Text = "";
        foreach (string _s in RtbFullText)
        {
            if (_s.Contains("Filter"))
                richTextBox1.Text += _s + "\n";
        }
    }
于 2012-04-17T09:59:16.517 に答える
1

だからあなたはこれを行うことができます

public class NewRichTextBox : RichTextBox
{
    public string[] TotalText;
    private bool filter = false;
    protected override void OnTextChanged(EventArgs e)
    {
        base.OnTextChanged(e);
        if (!filter)
            TotalText = Text.Split('\n');
    }
    public void Filter(string sf)
    {
        filter = true;
        Text = "";
        foreach (string _s in TotalText)
        {
            if (_s.Contains(sf))
                Text += _s + "\n";
        }
        filter = false;
    }
}

    public Form1()
    {
        InitializeComponent();
        NewRichTextBox myrtb = new NewRichTextBox();
        myrtb.Name = "NRTB";
        Controls.Add(myrtb);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        NewRichTextBox mtrb = (NewRichTextBox)Controls.Find("NRTB", false)[0];
        mtrb.Filter("Filter");
    }
于 2012-04-17T11:32:42.960 に答える
1

OMG私はそれを行います、このクラスを使用します:

    public class ListWithRTB : IList
    {
        private List<string> _contents = new List<string>();
        private int _count;
        string lastsearch = "";

        public ListWithRTB()
        {
            _count = 0;
        }

        public object rtb;

        private void UpdateRtb(string search)
        {
            lastsearch = search;
            if (rtb is RichTextBox)
            {
                ((RichTextBox)rtb).Text = "";
                List<string> help_contents;
                if (search != "")
                    help_contents = _contents.Where(s => s.Contains(search)).ToList();
                else
                    help_contents = _contents;
                for (int i = 0; i < help_contents.Count; i++)
                {
                    ((RichTextBox)rtb).Text += help_contents[i] + "\n";
                }
            }
        }

        public void Filter(string search)
        {
            UpdateRtb(search);
        }

        public int Add(object value)
        {
            if (_count < _contents.Count + 1)
            {
                _contents.Add((string)value);
                _count++;
                UpdateRtb(lastsearch);
                return (_count);
            }
            else
            {
                return -1;
            }
        }

        public void RemoveAt(int index)
        {
            _contents.RemoveAt(index);
            _count--;
            UpdateRtb(lastsearch);
        }

        public void Clear()
        {
            _contents.Clear();
            UpdateRtb(lastsearch);
            _count = 0;
        }

        public bool Contains(object value)
        {
            return _contents.Contains((string)value);
        }

        public int IndexOf(object value)
        {
            return _contents.IndexOf((string)value);
        }

        public void Insert(int index, object value)
        {
            _contents.Insert(index,(string) value);
            _count++;
        }

        public bool IsFixedSize
        {
            get
            {
                return false;
            }
        }

        public bool IsReadOnly
        {
            get
            {
                return false;
            }
        }

        public void Remove(object value)
        {
            RemoveAt(IndexOf(value));
        }

        public object this[int index]
        {
            get
            {
                return _contents[index];
            }
            set
            {
                _contents[index] = value.ToString();
            }
        }

        public void CopyTo(Array array, int index)
        {
            int j = index;
            for (int i = 0; i < Count; i++)
            {
                array.SetValue(_contents[i], j);
                j++;
            }
        }

        public int Count
        {
            get
            {
                return _count;
            }
        }

        public bool IsSynchronized
        {
            get
            {
                return false;
            }
        }

        public object SyncRoot
        {
            get
            {
                return this;
            }
        }

        public IEnumerator GetEnumerator()
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public void PrintContents()
        {
            Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Count, _count);
            Console.Write("List contents:");
            for (int i = 0; i < Count; i++)
            {
                Console.Write(" {0}", _contents[i]);
            }
            Console.WriteLine();
        }

    }

そして、これはあなたがそれをどのように使用できるかです

ListWithRTB _mlrtb = new ListWithRTB();

    private void button1_Click(object sender, EventArgs e)
    {
        _mlrtb.rtb = richTextBox1;
        _mlrtb.Add("Filter");
        _mlrtb.Add("123");
        _mlrtb.Add("111 Filter");
    }

    private void button2_Click(object sender, EventArgs e)
    {
        _mlrtb.Filter("Filter");
    }

    private void button3_Click(object sender, EventArgs e)
    {
        _mlrtb.Filter("");
    }
于 2012-04-18T13:01:20.530 に答える