簡體   English   中英

如何在 C# 中將 ListBox 中的名稱顯示到 TextBox 上?

[英]How Do I Display a Name from a ListBox onto a TextBox in C#?

我正在嘗試將我選擇的狗的名字顯示到 C# 中的 WPF 應用程序的文本框中。 這是我到目前為止的代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;

namespace DogAdoption_Form
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
    public partial class MainWindow : Window
    {
    const string DISPLAY_NAME = "Name will display here...";

    public MainWindow()
    {
        InitializeComponent();

        //DisplayLstBoxDogNames();    
    }

    public void DisplayLstBoxDogNames() 
    {
        lstBoxDogNames.Items.Add("Chloe");
        lstBoxDogNames.Items.Add("Daisy");
        lstBoxDogNames.Items.Add("Emmett");
        lstBoxDogNames.Items.Add("Jack");
        lstBoxDogNames.Items.Add("Lucy");
        lstBoxDogNames.Items.Add("Nala");
        lstBoxDogNames.Items.Add("Peach");
        lstBoxDogNames.Items.Add("Rocky");
        lstBoxDogNames.Items.Add("Shiloh");
        lstBoxDogNames.Items.Add("Toby");

        foreach (string dogName in lstBoxDogNames.Items) 
        {
            if (txtBoxName.Text == DISPLAY_NAME)
            {
                //txtBoxName.Text.Replace(DISPLAY_NAME, dogName);
                txtBoxName.Text = dogName;
                txtBoxName.Foreground = Brushes.Black;
            }

            else if ((txtBoxName.Text != DISPLAY_NAME) || (txtBoxName.Text == "")) 
            {
                //txtBoxName.Text.Replace(txtBoxName.Text, dogName);
                txtBoxName.Text = dogName;
                txtBoxName.Foreground = Brushes.Black;
            }
        }
   
    }

    private void txtBoxName_GotFocus(object sender, RoutedEventArgs e)
    {
        DisplayLstBoxDogNames();
    }

    private void txtBoxName_LostFocus(object sender, RoutedEventArgs e)
    {
        if (txtBoxName.Text == DISPLAY_NAME)
        {
            txtBoxName.Foreground = Brushes.Gray;
        }

        else if (txtBoxName.Text != DISPLAY_NAME)
        {
            txtBoxName.Foreground = Brushes.Gray;
        }
    }
  }
}

想法是,當我將焦點放在文本框上時,文本框的字體將從灰色變為黑色,文本框內的內容將從“名稱將在此處顯示...”切換為從列表框。 目前,window 僅顯示列表框的最后一個元素 Toby。 注釋掉的代碼是我嘗試用列表框中的選定項目替換 DISPLAY_NAME,但它不起作用。 我試過使用 lstBoxDogNames.SelectedItems.ToString();,但這也沒有用。

您使用lstBoxDogNames.SelectedItem.ToString()的方法實際上並沒有那么糟糕。 但如果你調試,你會看到返回的字符串不僅包含正在顯示的內容,還包含附加信息。

相反,試試這個:

string[] tmp = this.lstBoxDogNames.SelectedItem.ToString().Split(' ');
txtBoxName.Text = tmp[tmp.Length - 1];

tmp會將所選項目中由空格分隔的所有元素轉換為字符串。 由於這些元素中的最后一個是實際內容,因此它包含選定的名稱。

如果您不明白或有什么需要澄清的,請隨時提出問題。

我找到了解決方案。 這很簡單。 我所要做的就是將DisplayLstBoxDogNames()中的代碼放在 Listbox 的 SelectionChanged 事件下。 謝謝大家的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM