如何通过textChanged-Event在treelistview中选择项目/子/对象?

时间:2015-05-20 07:38:10

标签: .net select treeview searchbar treelistview

我正在使用brightideassoftware的treelistview,并希望在我的树形图中选择一个特定的孩子。

我的对象类型是' MeasurementFile'。

public class MeasurementFile
{ 
    private string fileName = string.Empty;
    private List<SignalObjects> signals = new List<SignalObjects>();
    ...
}

孩子的类型是&#39; SelectObjects&#39;:

public class SignalObjects
    {
        private string signalName = string.Empty;
        public SignalObjects(string signalName)
        {
            this.signalName = signalName;
        }

        public string SignalName { get { return signalName; } }      
}

因此每个MeasurementFile都有一个信号列表。

我的treelistview看起来像:

MyWinForm:

name/signal                //Column

-myFile1
|_____signal1
|_____signal2
|_____signal3
-myFile2
-myFile3
-myFile4

现在我想在一个特定的孩子后搜索。如果MeasurementFileobject已展开并且我在searchTextEdit中输入了某些内容,则应选择所有匹配的子项。如果我输入&#34; al1&#34;在我的搜索栏中,名为&#34; signal1&#34;的孩子应该被选中。

我的问题是:如何选择匹配的孩子?

我试过......

 private void searchSignalTextEdit_TextChanged(object sender, EventArgs e)
        {                
            string text = searchSignalTextEdit.Text;                
            if (!String.IsNullOrEmpty(text))
            {
                foreach (MeasurementFile measurementFile in treeListView1.Objects)
                {
                    if (treeListView1.IsExpanded(measurementFile))
                    {    
                        foreach (SignalObjects signal in measurementFile.getSignals)
                        {
                            if (signal.SignalName.Contains(text))
                            {
                                treeListView1.SelectObject(signal);
                            }
                        }
                    }
                }
            }
        }       

......但没有选择任何东西。如果有人可以帮助我,我会很高兴:)

1 个答案:

答案 0 :(得分:0)

使用linq和正则表达式 像这样:

Regex regex = new Regex(...);

var signals = MeasurementFile.Signals.Select(x=>x.signalName).Asenumebrable;

var matchingsignals = signals.Where(x => regex.IsMatch(x)).ToList();

var matching = MeasurementFile.Signals.Where(d => matchingsignals.Contains(d.signalName));