2016-01-11 3 views
0

Я создаю приложение, в котором у меня есть ListBox, у которого есть элементы, которые считываются из текстового файла, используя StreamReader. Я создал форму поиска, но я не уверен, что делать дальше. Может ли кто-нибудь дать мне некоторые предложения, пожалуйста? Вот мой код:Как найти элементы в ListBox?

Мой код для ListBox (жаль, что так долго)

public partial class frmSwitches : Form 
{ 
    public static ArrayList switches = new ArrayList(); 
    public static frmSwitches frmkeepSwitches = null; 
    public static string inputDataFile = "LeckySafe.txt"; 
    const int numSwitchItems = 6; 
    public frmSwitches() 
    { 
     InitializeComponent(); 
     frmkeepSwitches = this; 
    } 

    private void btnDevices_Click(object sender, EventArgs e) 
    { 
     frmDevices tempDevices = new frmDevices(); 
     tempDevices.Show(); 
     frmkeepSwitches.Hide(); 
    } 

    private bool fileOpenForReadOK(string readFile, ref StreamReader dataIn) 
    { 
     try 
     { 
      dataIn = new StreamReader(readFile); 
      return true; 
     } 
     catch (FileNotFoundException notFound) 
     { 
      MessageBox.Show("ERROR Opening file (when reading data in) - File could not be found.\n" 
       + notFound.Message); 
      return false; 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show("ERROR Opening File (when reading data in) - Operation failed.\n" 
       + e.Message); 
      return false; 
     } 

    } 

    private bool getNextSwitch(StreamReader inNext, string[] nextSwitchData) 
    { 
     string nextLine; 
     int numDataItems = nextSwitchData.Count(); 

     for (int i = 0; i < numDataItems; i++) 
     { 
      try 
      { 
       nextLine = inNext.ReadLine(); 
       if (nextLine != null) 
        nextSwitchData[i] = nextLine; 
       else 
       { 
        return false; 
       } 
      } 
      catch (Exception e) 
      { 
       MessageBox.Show("ERROR Reading from file.\n" + e.Message); 
       return false; 
      } 
     } 
     return true; 
    } 

    private void readSwitches() 
    { 
     StreamReader inSwitches = null; 
     Switch tempSwitch; 
     bool anyMoreSwitches = false; 
     string[] switchData = new string[numSwitchItems]; 

     if (fileOpenForReadOK(inputDataFile, ref inSwitches)) 
     { 
      anyMoreSwitches = getNextSwitch(inSwitches, switchData); 

      while (anyMoreSwitches == true) 
      { 
       tempSwitch = new Switch(switchData[0], switchData[1], switchData[2], switchData[3], switchData[4], switchData[5]); 

       switches.Add(tempSwitch); 

       anyMoreSwitches = getNextSwitch(inSwitches, switchData); 
      } 
     } 

     if (inSwitches != null) inSwitches.Close(); 
    } 

    public static bool fileOpenForWriteOK(string writeFile, ref StreamWriter dataOut) 
    { 
     try 
     { 
      dataOut = new StreamWriter(writeFile); 
      return true; 
     } 
     catch (FileNotFoundException notFound) 
     { 
      MessageBox.Show("ERROR Opening file (when writing data out)" + 
       "- File could not be found.\n" + notFound.Message); 
      return false; 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show("ERROR Opening File (when writing data out)" + 
       "- Operation failed.\n" + e.Message); 
      return false; 
     } 

    } 

    public static void writeSwitches() 
    { 
     StreamWriter outputSwitches = null; 

     if (fileOpenForWriteOK(inputDataFile, ref outputSwitches)) 
     { 
      foreach (Switch currSwitch in switches) 
      { 
       outputSwitches.WriteLine(currSwitch.getSerialNo()); 
       outputSwitches.WriteLine(currSwitch.getType()); 
       outputSwitches.WriteLine(currSwitch.getInsDate()); 
       outputSwitches.WriteLine(currSwitch.getElecTest()); 
       outputSwitches.WriteLine(currSwitch.getPatId()); 
       outputSwitches.WriteLine(currSwitch.getNumDevice()); 

      } 
      outputSwitches.Close(); 
     } 

     if (outputSwitches != null) outputSwitches.Close(); 
    } 

    private void showListOfSwitches() 
    { 
     lstSwitch.Items.Clear(); 

     foreach (Switch b in switches) 
      lstSwitch.Items.Add(b.getSerialNo() 
       + b.getType() + b.getInsDate() 
       + b.getElecTest() + b.getPatId() + b.getNumDevice()); 
    } 

Мой код поисковой формы:

private void btnSearch_Click(object sender, EventArgs e) 
    { 
     frmSearchSwitch tempSearchSwitch = new frmSearchSwitch(); 
     tempSearchSwitch.Show(); 
     frmkeepSwitches.Hide(); 
    } 
+0

Вы опубликовали только код, который работает. Попробуйте * что-то * и опубликуйте только код, который имеет отношение к проблеме. Пойдите на это. – SimpleVar

+0

Я честно понятия не имею, с чего начать, поэтому мне просто нужно указывать в правильном направлении, чтобы я мог попробовать что-то. –

+0

Посмотрите в 'ListBox.DataSource' и' DisplayMember'. Для поиска функциональности самым простым решением является текстовое поле и кнопка, чтобы активировать фильтрацию элементов. Там есть множество примеров того, как найти элементы и как фильтровать элементы в 'ListBox' – SimpleVar

ответ

0

При использовании List<T> и лямбда не представляется возможным для вас тогда не идти дальше.

Здесь я использую List<T> для источника данных ListBox, и издеваются данные, когда данные поступают, не важны, но здесь я сосредоточен на поиске свойства в классе, в котором используется выбор для индексации пункты, затем поиск где-то в этом случае) для определенного элемента, если найден, индекс используется для перемещения к элементу. Отсутствует код, если он не расположен, так как это легко сделать, если код здесь - это то, что можно сделать для вас.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Windows.Forms; 

namespace ListBoxSearch_cs 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Button1_Click(object sender, EventArgs e) 
     { 
      var results = 
       ((List<Item>)ListBox1.DataSource) 
        .Select((data, index) => new 
        { Text = data.SerialNumber, Index = index }) 
        .Where((data) => data.Text == "BB1").FirstOrDefault(); 
      if (results != null) 
      { 
       ListBox1.SelectedIndex = results.Index; 
      } 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      var items = new List<Item>() { 
      new Item {Identifier = 1, SerialNumber = "AA1", Type = "A1"}, 
      new Item {Identifier = 2, SerialNumber = "BB1", Type = "A1"}, 
      new Item {Identifier = 3, SerialNumber = "CD12", Type = "XD1"} 
     }; 
      ListBox1.DisplayMember = "DisplayText"; 
      ListBox1.DataSource = items; 
     } 
    } 
    /// <summary> 
    /// Should be in it's own class file 
    /// but done here to keep code together 
    /// </summary> 
    public class Item 
    { 
     public string SerialNumber { get; set; } 

     public string Type { get; set; } 

     public int Identifier { get; set; } 

     public string DisplayText 
     { 
      get 
      { 
       return SerialNumber + " " + this.Type; 
      } 
     } 
    } 
} 
+0

Можно ли назвать свойство «Тип»? – 3per

+0

@ 3per это просто пример, не стесняйтесь назвать это, как вам нравится –

+0

Спасибо за вашу помощь –

Смежные вопросы