Combobox и SelectionChanged проблема - PullRequest
3 голосов
/ 21 мая 2011

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

Возможно непреднамеренное сравнение ссылок;чтобы получить сравнение значений, приведите левую сторону к типу 'string'

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

        if (((ComboBox)sender).SelectedValue == "Floyd-Warshall")
        {
            MessageBox.Show("foobar");

Спасибо.

Ответы [ 3 ]

2 голосов
/ 21 мая 2011

Тип SelectedValue равен object, поэтому, даже если он совпадает со значением, равная операция вернет false, поэтому вместо этого необходимо сравнить строку со строкой, как показано ниже:

    if (((ComboBox)sender).SelectedValue.ToString() == "Floyd-Warshall")
2 голосов
/ 21 мая 2011

Существуют различные способы исправить: один, если привести к строке, другой - вызвать ToString для SelectedValue.

Поскольку вы заявили, что некоторые из других предложенных ответов не работают, вы уверены, что элемент в поле со списком на самом деле является строкой?

Например, это будет работать с предлагаемыми исправлениями:

<Window x:Class="ExerciseOne.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" xmlns:extern="clr-namespace:System;assembly=mscorlib">
    <Grid>
    <ComboBox SelectionChanged="ComboBox_SelectionChanged">
        <ComboBox.Items>
                <extern:String>Hello</extern:String>
                <extern:String>Floyd-Warshall</extern:String>
            </ComboBox.Items>
    </ComboBox>
    </Grid>
</Window>

Но это не так:

<Window x:Class="ExerciseOne.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" xmlns:extern="clr-namespace:System;assembly=mscorlib">
    <Grid>
    <ComboBox SelectionChanged="ComboBox_SelectionChanged">
        <ComboBox.Items>
                <ComboBoxItem>Hello</ComboBoxItem>
                <ComboBoxItem>Floyd-Warshall</ComboBoxItem>
            </ComboBox.Items>
    </ComboBox>
    </Grid>
</Window>

Вы можете быстро определить, так ли это, запустив следующий код в существующем обработчике событий:

   MessageBox.Show(((ComboBox)sender).SelectedValue.GetType().ToString());
0 голосов
/ 21 мая 2011

предупреждение для выбранного значения, которое вы должны добавить .toString ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...