0

リストに一連のオブジェクトを作成し、そのリストで特定の結果を検索して (0、1、または多数のヒットがある可能性があります)、結果をテキスト ボックスに表示できるようにしたいと考えています。

これは私がこれまでに持っているものですが、最後に入力したオブジェクトしか表示できないようです。

public partial class OrganiserWindow : Form
{
    public OrganiserWindow()
    {
        InitializeComponent();
    }

    List<Album> AlbumList = new List<Album>();

    private void createAlbum_Click(object sender, EventArgs e)
    {
        AlbumList.Add(new Album(albumBox.Text, artistBox.Text));
    }

    private void searchAlbum_Click(object sender, EventArgs e)
    {
        var albumResult = from album in AlbumList
                          where album.AlbumName != null// == albumBox.Text
                          select new { Name = album.AlbumName, Artist = album.ArtistName };

        foreach (var item in albumResult)
        {
            albumResultBox.Text = String.Join(Environment.NewLine, item.Name + " " + item.Artist);
        }
    }
}

public class Album
{
    private string albumName;
    private string artistName;

    public Album(string album, string artist)
    {
        albumName = album;
        artistName = artist;
    }

    public string AlbumName
    {
        get 
        { 
            return albumName; 
        }
        set 
        { 
            albumName = value; 
        }
    }

    public string ArtistName
    {
        get 
        { 
            return artistName; 
        }
        set 
        { 
            artistName = value; 
        }
    }
}
4

3 に答える 3

2

+=代わりに使用するのを忘れました=

albumResultBox.Text += String.Join(Environment.NewLine, item.Name + " " + item.Artist);
于 2013-04-09T05:43:46.143 に答える
0

各反復で、テキスト ボックス内のテキストを上書きします。それに追加する必要があります。また、TextBox.Text が null になることはありません。

この行は、AlbumName == null のアルバムを追加しません

AlbumList.Add(new Album(albumBox.Text, artistBox.Text));

したがって、このクエリを実行すると、常にすべてのアルバムが返されます

var albumResult = from album in AlbumList
                  where album.AlbumName != null
                  select new { Name = album.AlbumName, Artist = album.ArtistName };
于 2013-04-09T05:44:53.767 に答える