2016-05-22 2 views
1

Хорошо, вы, ребята, были удивительны для меня в прошлом, и я не могу поблагодарить вас всех достаточно. Я работаю над программой, помогающей людям, играющим в ARK: Survival Evolved для управления выделенными серверами.разделительные и совпадающие значения из строки

В файле .map есть два значения строки, на которые мы будем фокусироваться прямо сейчас; TamerName, которое является именем пользователя, который приручил динозавра, а затем есть DinoName, которое, как вы можете догадаться, является именем динозавра.

Строки не настроены таким образом, что вы можете просто искать экземпляр TamerName, а затем перечислить Dino под этим одним пользователем, вместо этого они перечислены в самом файле. То, что я хочу сделать, - это TabControl, который создает отдельные вкладки, названные в честь пользователя, а затем внутри этой вкладки заполняется панель с динозаврами, прирученными этим пользователем.

Файл всегда хранит информацию, как TamerName -DinoName

поэтому он может выглядеть следующим образом (в качестве примера)

Brandon -Derp Кэти -Derpette Brandon -Derp2 Brandon -Derp3 Katie -Derpette2

и так далее. Я хочу, чтобы перечислить как этот

Tab1 (TABNAME = Brandon) -Derp -Derp2 -Derp3 Таб2 (TABNAME = Katie) -Derpette -Derpette2

и так далее.

Я в настоящее время метод, предназначенный для дампа результатов в список, как имя-Дино

и я могу предоставить код, который при необходимости. Надеюсь, я объяснил, что все правильно !!!

+0

Да, это помогло бы, если бы вы могли предоставить код для сброса результатов, чтобы я мог сосредоточиться только на том, чтобы реализовать функцию TabControl. –

ответ

1

Поскольку у вас уже есть Список, отформатированный как «Name-Dino», одним из способов сделать это было бы создание нового массива или списка Укротителей. В этом примере listOfNamesAndDinos - это уже существующий список.

List<string> tamerList = new List<string>(); 

foreach(string tamerDino in listOfNamesAndDinos) 
{ 
    string tamerName = tamerDino.Split("-")[0].Trim(); 
    if(!tamerList.Contains(tamerName)) 
    { 
     tamerList.Add(tamerName); 
    } 
} 

//Create tabs using each name from list of tamers 

foreach(string tamer in tamerList) 
{ 
    List<string> fullDinosForTamer = listOfNamesAndDinos.Where(e => e.StartsWith(tamer)).ToList(); 
    //Populate your panel with the newly found dinos 
} 

Этот метод требует, чтобы выusing System.Linqв своих декларациях пространства имен

1

Большое спасибо @Alfie Гудакру, которые дали мне основание, чтобы выяснить это :) Я должен был настроить код немного, что я представил ниже. Если кто-нибудь может подумать о более качественном, более компактном способе написания этого, я открыт для предложений! Спасибо!!

private void openToolStripMenuItem2_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog ark = new OpenFileDialog(); 
     ark.Filter = "ARK Map (*.ark)|*.ark"; 
     int p = 0; 
     if (ark.ShowDialog() == DialogResult.OK) 
     { 
      List<string> findings = new List<string>(); 
      for (int i = 0; i < 15; i++) 
      { 
       findings.Add(string.Format("{0}-{1}", Tamed_Dino(ark.FileName, Dino_Tamer, 37)[i], Tamed_Dino(ark.FileName, Dino_Name, 35)[i])); 

      } 
      List<string> tamerList = new List<string>(); 

      foreach (string tamerDino in findings) 
      { 
       string tamerName = tamerDino.Split('-')[0].Trim(); 
       if (!tamerList.Contains(tamerName)) 
       { 
        tamerList.Add(tamerName); 
        Console.WriteLine(tamerName); 
       } 
      } 
      for (int l = 0; l < tamerList.Count; l++) 
      { 
       string title = tamerList[l]; 
       TabPage tabPage = new TabPage(title); 
       multi_prof.TabPages.Add(title); 
       Panel np = new Panel(); 
       np.BorderStyle = BorderStyle.None; 
       np.Location = new Point(10, 10); 
       np.Dock = DockStyle.Fill; 
       np.Name = tamerList[l]; 
       multi_prof.SelectedIndex = l; 
       multi_prof.SelectedTab.Invoke((Action)(() => multi_prof.SelectedTab.Controls.Add(np))); 

       foreach (string tamer in tamerList) 
       { 
        List<string> fullDinosForTamer = findings.Where(r => r.StartsWith(tamer)).ToList(); 
        //Populate your panel with the newly found dinos 
        Label lbl; 
        p = 0; 
        for (int i = 0; i < fullDinosForTamer.Count; i++) 
        { 
         if (fullDinosForTamer[i].StartsWith(tamerList[l])) 
         { 
          lbl = new Label(); 
          lbl.Text = fullDinosForTamer[i].Split('-')[1]; 
          lbl.Name = fullDinosForTamer[i]; 
          lbl.AutoSize = true; 
          lbl.Location = new Point(10, p * 20); 
          np.Invoke((Action)(() => np.Controls.Add(lbl))); 
          p++; 
         } 
        } 
       } 
      } 
     } 
    } 
Смежные вопросы