2013-10-07 4 views
-2

Для моего приложения Windows Forms я попытался извлечь выбранную строку из спискаBox, и я хотел, чтобы она сравнивалась с заданной строкой, чтобы в случае сравнение, возвращающее true, я могу установить следующий listBox для конкретных значений, связанных с выбором.Как сравнить выбранную строку с listBox с другой строкой в ​​C#

namespace PhysCalc 
    { 
    public class Selectors 
    { 
    public static string[] topicContents = new string[] { "MECHANICS", "THEORY_OF_RELATIVITY" }; 
    public static string[] VarItemsMechanics = new string[] { "Test", "Wavelength" }; 

    public static void SetVarBox() 
    { 
     PhysCalc.Topic.DataSource = topicContents; 
     if PhysCalc.Topic.Items[PhysCalc.Topic.SelectedIndex].ToString() == "MECHANICS") 
     { 
      PhysCalc.Var.DataSource = VarItemsMechanics; 
     } 
    } 
} 
} 

Но как-то, когда я выбираю «механикой» в ListBox (в приведенном выше названный «Тема» кода), 2-й ListBox (вышеназванный «Var») просто остается пустым

любая помощь будет очень ценится

+1

Что 'VarItemsMechanics'? –

+0

Sry для того, чтобы не публиковать это; это массив, который должен быть установлен как DataSource для «Var» listBox –

+0

, вы уверены, что ваша 'VarItemsMechanics' не пуста? –

ответ

0

Я думаю, вам нужно установить DisplayMember и ValueMember свойства на элементе управления Var списка при использовании DataSource.

Если DataSource является объект, то DisplayMember является членом объекта он будет использовать в качестве текстового дисплея (в вашем случае в настоящее время пустое), и ValueMember используется для определения SelectedValue свойства управления списка, который полезен для связать против.

Например, если ваш VarItemsMechanics заполняется следующим классом:

public class Mechanic 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

Тогда вы, вероятно, хотите, чтобы установить DisplayMember в "Name" и вы могли хотите установить ValueMember к "ID" (субъективное).

+0

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

0

Попробуйте изменить

if (PhysCalc.Topic.GetItemText(PhysCalc.Topic.SelectedItem) == "MECHANICS") 

к этому:

if (PhysCalc.Topic.Items[PhysCalc.Topic.SelectedIndex].ToString() == "MECHANICS") 
+0

Все еще ничего, но спасибо за усилия :) –

+0

В этом случае см., что 'MessageBox.Show (PhysCalc.Topic.Items [PhysCalc.Topic.SelectedIndex] .ToString()) дает вам? –

+0

. Ошибка, скажем так: «Наилучшее перегруженное соответствие метода для * имеет некоторые недопустимые аргументы» –

0

1- Bind ваш первый список под названием "Тема" в Form_Load Event

2- в SelectedIndexChanged событие вашей первой Перечислите свои чеки о выбранном элементе

и заполните второй список

Вот полный код и он отлично работает для меня

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
     public static string[] topicContents = new string[] { "MECHANICS", "THEORY_OF_RELATIVITY" }; 
     public static string[] VarItemsMechanics = new string[] { "Test", "Wavelength" }; 


     private void Form1_Load(object sender, EventArgs e) 
     { 
      listBox1.DataSource = topicContents; 

     } 

     private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      string curItem = listBox1.SelectedItem.ToString(); 
      switch (curItem) 
      { 
       case "MECHANICS": 
        listBox2.DataSource = VarItemsMechanics; 
        break; 
      } 

     } 
    } 
} 
+0

Хм, я пробовал свой путь, но это тоже не сработало. Я опубликовал весь измененный класс на Google Диске с любым, у кого есть линк, который может комментировать, возможно, вы могли бы еще раз взглянуть на него и прокомментировать, что не так: https://docs.google.com/document/d/1nGGBEuaV8KAMBYfmUwdCOuLzxoj_g3jg6rNyGtf4P5k/ edit? usp = sharing –

+0

Я посмотрел ваш код, вы должны поместить свой код в форму, а также в случае, если слово MECHANICS не соответствует слову MECHANICS в вашем источнике данных, я попытался создать приложение для Windows и исправил этот переключатель и он отлично работает для меня –

+0

Не существует ли другой способ, чем положить его прямо в форму? Я в основном ставил его в разные классы для более простого обзора по всему, так как в дальнейшем будет еще больше кода для выбора. И я просто попытался поместить его в класс формы, это тоже не работает. Любые другие идеи? Во всяком случае, спасибо за вашу отличную помощь до сих пор :) –

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