1

我正在使用来自brightideassoftware 的treelistview,并想在我的treelist 中选择一个特定的孩子。

我的对象的类型是“MeasurementFile”。

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

孩子的类型是“SelectObjects”:

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

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

所以每个MeasurementFile都有一个信号列表。

我的树列表视图看起来像:

MyWinForm:

name/signal                //Column

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

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

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

我试过了 ...

 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);
                            }
                        }
                    }
                }
            }
        }       

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

4

1 回答 1

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));
于 2020-01-24T12:55:23.560 回答