У меня есть форма (Form1) и класс (classx). У меня проблема с чтением текста из comboBox2 из Form1 в classx. Когда я нажимаю любой текст из comboBox2 во время отладки, он показывает мне «o: oo: oo», как будто я ничего не нажимал из comboBox2. Я знаю, что проблема состоит в строке, если(), потому что, если я оставлю это нравится: form1.comboBox2.SelectedItem.ToString() или form1.comboBox2.SelectedText.ToString() или form1.comboBox. Текст или любой другой вариант (который я просмотрел здесь в stackoverflow.com и в Google), он все еще показывает мне 0:00:00. Но, если я напишу это как: if («Рим» == Места [i]), он вычисляет значение для Рима, показывая 01:07:30. Как прочитать текст из выпадающего списка, который будет работать в моем коде?Не удается прочитать текст из ComboBox
Вот мой класс:
public class classx
{
public string[] Places = new string[] { "Berlin", "Paris", "London", "Rome", "Tirana", "Istanbul" };
public int[] Kilometers = new int[] { 50, 30, 70, 110, 40, 90 };
public TimeSpan Times()
{
double length = 0; double hour = 0, minute = 0, seconds = 0; int hour1 = 0, minute1 = 0, second1 = 0;
Form1 form1 = new Form1();
for (int i = 0; i <= 5; i++)
{
//this is the row which doesn't work
if (form1.comboBox2.SelectedText.ToString() == Places[i])
{
length = Kilometers[i];
}
}
hour = (length/80);
hour1 = Convert.ToInt32(Math.Truncate(hour));
minute = (hour - Math.Truncate(hour)) * 60;
minute1 = Convert.ToInt32(Math.Truncate(minute));
second = (minute - Math.Truncate(minute)) * 60;
second1 = Convert.ToInt32(Math.Truncate(second));
TimeSpan time = new TimeSpan(Convert.ToInt32(hour), Convert.ToInt32(minute1), Convert.ToInt32(second1));
TimeSpan TimeLength = new TimeSpan(hour1, minute1, second1);
return TimeLength;
}
}
А вот мой Form1
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
public void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
classx duration = new classx();
MessageBox.Show("From " + comboBox1.Text + " to " + comboBox2.Text + " it takes around " + duration.Times());
}
}
Там нет ошибок показаны. Любая идея, как получить текст из comboBox2?
Edit: Для будущих visitiors, которые на вопрос samea, этот ответ помог мне: https://stackoverflow.com/a/34794775/5749161
SelectedText возвращает выделенную часть текущего текста. Вероятно, вы хотите 'comboBox2.SelectedItem.ToString()' – LarsTech
, если я не пишу form1.comboBox2.SelectedItem.ToString(), появляется ошибка, потому что combobox2 не будет существовать в текущем контексте. Если я напишу form1.comboBox2.SelectedItem.ToString(), мой результат показывает 0:00:00 – noviceprogrammer
Не похоже, что вы ссылаетесь на существующую форму. ClassX не должен знать ничего о вашей форме. Передайте ссылку на данные в свою функцию Times с соответствующими параметрами, исходящими из вашей формы. – LarsTech