Member 13765884 Ответов: 3

Выбранный элемент в списке становится текстом в метке


Я хочу, чтобы элемент, выбранный в списке, был отправлен на этикетку в виде текста. Однако я не хочу прямого перевода текста

то есть, если в тексте есть слово "растение", я хочу, чтобы на этикетке было написано "цветы". Я хочу, чтобы это постоянно менялось при нажатии кнопки next, когда next выбирает следующий элемент в списке.

private void NxtBtn_Click(object sender, EventArgs e)
{
    {
        if (listBox1.SelectedIndex == 0 || listBox1.SelectedIndex < listBox1.Items.Count - 1)
        {
            listBox1.SelectedIndex = listBox1.SelectedIndex + 1;

            if (listBox1.SelectedItems.Contains("plant"))
            {
                PgeTitleLbl.Text = "flowers";
            }

            else if (listBox1.SelectedItems.Contains("sugar"))
            {
                PgeTitleLbl.Text = "Sweets";
            }

            else if (listBox1.SelectedItems.Contains("eyes"))
            {
                PgeTitleLbl.Text = "face";
            }

       }
    }


Что я уже пробовал:

string[] Process = { "Flowers", "face"};
static int i = 0;


//   PgeTitleLbl.Text = Process[i];
// i = (i + 1);

#realJSOP

КАКОВА ВАША ПЛАТФОРМА?!!! Winforms или WPF?

3 Ответов

Рейтинг:
2

#realJSOP

Во-первых, вы не должны использовать событие нажатия кнопки для установки таких элементов управления. Вместо этого вы должны изменять выбор списка при нажатии кнопки и иметь отдельный обработчик для события selection changed для списка, который изменяет метку.


Рейтинг:
2

Dave Kreskowiak

Во-первых, вам не нужны все if заявления, чтобы сделать замены.

Вам, однако, нужен первый if утверждение, но оно неверно. Прочтите документацию по ListBox.SelectedIndex. Если в списке ничего не выбрано, то значение SelectedIndex будет равно -1. Там нет необходимости проверять, чтобы увидеть, если это 0 или меньше, чем количество коллекции. Ваше условие, как закодировано, всегда будет истинным, потому что SelectedIndex, будь то -1 или фактическое значение индекса, потому что оно всегда будет меньше количества коллекции.

if (listbox1.SelectedIndex >= 0)
{
    // Something is selected...
}


Что касается текстовых замен, то вам просто нужно использовать string.Replace() без if заявления. Я дам вам прочитать документацию по string.Замените, чтобы выяснить, как это работает.


Рейтинг:
0

Giridhari Mishra

Привет,
Вы можете легко достичь этого, установив пару Text &value в списке. Вам не нужно использовать здесь условие if. При выборе элемента на этикетке будет отображаться соответствующее значение. Вы можете использовать OnSelectedIndexChanged событие так, что когда вы измените свой выбор, значение изменится в метке.

Вот фрагмент кода для вас, если вы используете asp.net веб-форма.

<div>
          Selected Item: <asp:Label ID="PgeTitleLbl" runat="server"></asp:Label>
          <br /><br />

          <asp:ListBox ID="ListBox1" runat="server" OnSelectedIndexChanged="ShowValueInLabel"  AutoPostBack="true">
            <asp:ListItem Text="Plant" Value="Flowers"></asp:ListItem>
            <asp:ListItem Text="sugar" Value="sweet"></asp:ListItem>
            <asp:ListItem Text="eyes" Value="face"></asp:ListItem>
          </asp:ListBox>
        </div>


В коде позади файла для метода ShowValueInLabel:
protected void ShowValueInLabel(object sender, EventArgs e)
    {
        PgeTitleLbl.Text = ListBox1.SelectedValue;
    }


Это самый простой процесс. Если вы хотите отобразить элементы в списке из базы данных, вы можете использовать so. Если вы все еще хотите использовать кнопку click, вы можете это сделать.
Измените значение ListBox AutoPostBack=false.

Добавить кнопку в cshtml.
<asp:Button ID="NxtButton" runat="server" Text="Show Item" OnClick="ShowListItem" />


Добавьте метод ShowListItem в код позади файла:

protected void ShowListItem(object sender, EventArgs e)
    {
        PgeTitleLbl.Text = ListBox1.SelectedValue;
    }



Надеюсь, это поможет.