2016-06-27 21 views
1

ですから、コンボボックスに特定の情報だけを追加するにはどうすればよいですか?私の同僚と私は犬を買うか、犬を寄付することができる犬のポンドプログラムを作っています(実際の犬のポンドではなく、ちょうど楽しみのために作られた)。だから、ユーザーが犬を買うことを決めたとき、コンボボックスから品種を選ぶことができます(これは成功しました、btw)。次に、ユーザーが次のボタンをクリックすると、ユーザーはコンボボックス内のリストから1つを選択できます(問題は、コンボボックスの項目がテキストファイルから取得されることです)。テキストファイルの特定の値だけをコンボボックスに表示するにはどうすればよいですか?

たとえば、ユーザーは品種としてブルドッグを選択し、次に「次へ」をクリックします。次に、次のウィンドウに、テキストファイル内のブルドッグであるすべての犬をリストするコンボボックスが表示されます(dog-int-のタグ番号、dog-stringの名前と価格-decimal-)

テキストファイルこのように書きます:

1-Chihuahua+YY=625.00 
3-Boxer+Rad=875.00 
25-Terrier+Micky=1500.00 
10-Bulldog+Mary=1997.500 
4-Pug+Charlie=562.50 
6-Bulldog+Cayne=2062.50 

*(tagNumber-ブリード+ nameOfTheDog =価格) ** 1つの犬の情報= 1行は、テキスト

とコードの構造で何が起こったのかわかりませんこれまでのところ、次のようになります。

string [email protected]"C:\\Users\\LMCPENA98\\Desktop\\MilleniumPaws\\bin\\Debug\\Files.txt"; 
     string[] temp = File.ReadAllLines(location); 
     int[] TagNumber = new int[temp.Length]; 
     string[] Breed = new string[temp.Length]; 
     string[] Name = new string[temp.Length]; 
     decimal[] Price = new decimal[temp.Length]; 

     for (int i = 0; i < TagNumber.Length; i++) 
     { 
      TagNumber[i] = int.Parse(temp[i].Substring(0, temp[i].IndexOf("-"))); 
      Breed[i] = temp[i].Substring(0, temp[i].IndexOf("+")); 
      Breed[i] = Breed[i].Substring(Breed[i].LastIndexOf("-") + 1); 
      Name[i] = temp[i].Substring(0, temp[i].IndexOf("=")); 
      Name[i] = Name[i].Substring(Name[i].LastIndexOf("+") + 1); 
      Price[i] = decimal.Parse(temp[i].Substring(temp[i].LastIndexOf("=") + 1)); 

MaryとCayneという名前の2つのブルドッグのみをコンボボックスに表示するにはどうすればいいですか(タグ番号と価格が含まれます)?

+0

[]はそこからあなたは、あなたがあなたにも.Containsメソッドを使用することができSUBSTRINGまたはIndexOfメソッドを使用することができます使用することができます。..そこかどうかを確認しようと文字列にテキストファイルの行を読んでみてくださいテキストファイルレイアウトのパターンであり、ファイル構造を模倣し、そのように動作するクラスを作成します。 – MethodMan

答えて

0

試してみてください。

if (Breed[i] == BreedChosen) 
{ 
    TagNumber[i] = int.Parse(temp[i].Substring(0, temp[i].IndexOf("-"))); 
    Breed[i] = temp[i].Substring(0, temp[i].IndexOf("+")); 
    Breed[i] = Breed[i].Substring(Breed[i].LastIndexOf("-") + 1); 
    Name[i] = temp[i].Substring(0, temp[i].IndexOf("=")); 
    Name[i] = Name[i].Substring(Name[i].LastIndexOf("+") + 1); 
    Price[i] = decimal.Parse(temp[i].Substring(temp[i].LastIndexOf("=") + 1)); 
} 

...私が誤解していない限り。

1

まず、最も便利な形式でデータを取得:私は匿名クラスを使用しますが、このようなクエリ場合ましフィルタリングと

myComboBox.Items.AddRange(data 
    .Where(item => (item.breed == "Bulldog") && 
        ((item.name == "Mary") || (item.name == "Cayne")))) 
    .Select(item => String.Format("tag: {0}; price: {1}", item.tagNumber, item.price))); 

を表し、その後

var data = File 
    .ReadLines(location) 
    .Select(line => Split('-', '+', '=')) 
    .Select(items => new { 
     tagNumber = int.Parse(items[0]), 
     breed = items[1], 
     name = items[2], 
     price = Decimal.Parse(items[3]) 
    }); 

頻繁に使用される場合は、ファイル内にレコード用の特別なクラスを実装することができます。

public class Dog { 
    public int TagNumber {get; private set} 
    ... 
    public decimal Price {get; private set} 
    ... 
    public static Dog Parse(String value) {...} 
    ... 
    public override String ToString() { 
    return String.Fromat("tag: {0}; price: {1}", TagNumber, Price); 
    } 
} 


var data = File 
    .ReadLines(location) 
    .Select(line => Dog.Parse(line)); 

... 
myComboBox.Items.AddRange(data 
    .Where(dog => (dog.Breed == "Bulldog") && 
       ((dog.Name == "Mary") || (dog.Name == "Cayne")))) 
    .Select(dog => dog.ToString())); 
0

私はコード全体の再構築を提案します。あなたの犬のためのすべてのデータを保持するクラスを作成した場合、それはのようにかなった、最高のようになります。

public class Dog 
    { 
     public int tagNumber; 
     public string Breed; 
     public string Name; 
     public decimal Price; 

     public Dog() 
     { 
      tagNumber = 0; 
      Breed = "None"; 
      Name = "Nameless"; 
      Price = 0; 
     } 
    } 

あなたは、このようなコンストラクタで必要な機能のどんな種類追加することができ、それは非常にあなたのニーズに適した簡単です一緒に働く あなたは単純なリストにあなたの犬をロードし、好きなようにデータを並べ替えることができます。例:

string [email protected]"C:\\Users\\LMCPENA98\\Desktop\\MilleniumPaws\\bin\\Debug\\Files.txt"; 
     string[] temp = File.ReadAllLines(location); 

     //Now we'll get all the dogs from our text file 
     List<Dog> listOfDogs = temp 
           .Select(line => line.Split('-', '+', '='))//selecting an array of arrays with the parts of each line 
           .Select(parts => new Dog{ tagNumber = int.Parse(parts[0]), 
                  Breed = parts[1], 
                  Name = parts[2], 
                  Price = Decimal.Parse(parts[3])})//we're converting those arrays of parts to an instance of our Dog class 
           .ToList();//making it list 

     //Now you have your list of dogs 

     //You can get all the breeds (if you need them for a combobox e.g.). Will be using hashset, so that all the equal strings would be gone 
     HashSet<string> hsOfDogBreeds = new HashSet<string>(listOfDogs.Select(dog => dog.Breed)); 

     //Afterwards you can do quite much everything you want with the info and it's more comfortable in this way. 
関連する問題