0

宣言されたオブジェクトのリストをコンテンツ ソースとして使用するために、winform でリストボックスを作成しようとしています。オブジェクトを選択すると、そのオブジェクトのプロパティから読み取られる近くのテキスト ボックスにそのプロパティが一覧表示されます。リストのオブジェクトは次のようになります。

public Form1()
{
    Element gold = new Element();
    gold.Property = "Soft";
    gold.Metal = true;
    gold.Name = "Gold";

    InitializeComponent();
}

これをメインフォームに入れるのがこれで行く方法だと言われました。私がこれまでに試みたのは、ユーザーが選択するオブジェクトに名前を付けるためにリストボックスが使用する名前文字列と、他の 2 つのプロパティ (gold.Property = "Soft"; および gold.Metal = true; を指定することです) です。リストボックスで項目が選択されている場合は、近くのテキストボックスに移動します)。これを行う方法が本当にわからないので、これに関するあらゆる種類の助けをいただければ幸いです。基本的に、リストボックスを取得して、作成したオブジェクトを見つけてリストする方法を知っているだけで素晴らしいでしょう。

また、はい、これは課題用です。したがって、私が概説したことはそのように行う必要があります... 課題自体にはさらに多くのことがありますが、私が行き詰まっているのはここです。

4

2 に答える 2

0

を使用List<Element> elementsして要素を保存し、各要素でループを実行して、その名前をリストボックスに追加します。

イベント ハンドラーをリストボックスの選択したインデックスに追加します。このコードでそれを行う必要があります。(選択したインデックスが -1 かどうかを忘れずに確認してください)

txtName.Text = elements[listbox.SelectedIndex].Name;
txtProperty.Text = elements[listbox.SelectedIndex].Property;
于 2013-05-13T03:17:16.053 に答える
0

要件の詳細を知らなくても、割り当てでは Element() のインスタンスを ListBox に直接追加する必要があると推測できます。Element() クラスで ToString() をオーバーライドして、ListBox がこれらのインスタンスを表示する方法を制御できます。Name() プロパティを返すと、非常にうまく機能します。ListBox の SelectedIndexChanged() イベントを接続し、SelectedItem() を Element() にキャストして、他の 2 つの値を抽出できるようにします。これは次のようになります。

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
        listBox1.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);

        Element element = new Element();
        element.Property = "Soft";
        element.Metal = true;
        element.Name = "Gold";
        listBox1.Items.Add(element);

        element = new Element();
        element.Property = "Indestructible";
        element.Metal = true;
        element.Name = "Adamantium";
        listBox1.Items.Add(element);

        element = new Element();
        element.Property = "Liquid";
        element.Metal = true;
        element.Name = "Mercury";
        listBox1.Items.Add(element);

        element = new Element();
        element.Property = "Fluffy";
        element.Metal = false;
        element.Name = "Kitten";
        listBox1.Items.Add(element);
    }

    void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex != -1)
        {
            Element element = (Element)listBox1.SelectedItem;
            label1.Text = "Property: " + element.Property;
            label2.Text = "Metal: " + element.Metal.ToString();
        }
    }
}

public class Element
{
    public string Property;
    public bool Metal;
    public string Name;

    public override string ToString()
    {
        return Name;
    }
}
于 2013-05-13T03:17:22.323 に答える