【问题标题】:How to add text from textbox into a list如何将文本框中的文本添加到列表中
【发布时间】:2016-12-01 12:52:24
【问题描述】:

我创建了一个空列表,当用户输入新曲目时将使用该列表,并且我的界面有列表框和 texbox 以及添加和删除按钮。

我的目标是当我将新项目添加到列表框时,相同的按钮使用该功能将该项目添加到列表中,而不是它们只是添加到列表框而不是存储它。

trackListbox.Items.Add(newTracktextBox.Text);
List<Songs> NewSongs = newTracktextBox.Text ().ToList(); ; this is not correct

有什么不同的想法吗?

class Songs
{
    private string trackName;
    private int trackLength;
    public Songs (string trackName, int trackLength)
    {
        this.trackName = trackName;
        this.trackLength = trackLength;
    }
}

【问题讨论】:

  • 这里的歌曲是什么?请也显示该课程
  • Songs 是一个存储有关曲目名称及其长度的数据的类
  • @Mobster007 你能把它添加到 OP 中吗?
  • 抱歉没有收到你的问题
  • 如何将文件名(假设是文本中的内容)转换为歌曲?

标签: c# list arraylist textbox listboxitem


【解决方案1】:

试试这个

Songs objSong = new Songs(newTracktextBox.Text,0); // define your length instead of 0

List<Songs> NewSongs = new List<Songs>();
NewSongs.Add(objSong);

【讨论】:

  • 看他的类,constructor不带0参数,属性是私有的,这个解决方案行不通
  • 相应地改变了:)
【解决方案2】:

最好将类命名为Song 而不是Songs,因为它只代表一首歌曲。


手动添加歌曲到listBox

private List<Song> SongList;

public Form1()
{
    InitializeComponent();

    SongList = new List<Song>();
}

private void button1_Click(object sender, EventArgs e)    
{
    Song song = new Song(newTracktextBox.Text, 100);
    SongList.Add(song);
    listBox1.Items.Add(song); // The trackName will be shown because we are doing a override on the ToString() in the Song class
}

class Song
{
    private string trackName;
    private int trackLength;

    public Song(string trackName, int trackLength)
    {
        this.trackName = trackName;
        this.trackLength = trackLength;
    }

    public override string ToString()
    {
        return trackName;
        // Case you want to show more...
        // return trackName + ": " +  trackLength;
    }
}

使用BindingList&lt;Song&gt;自动绑定

private BindingList<Song> SongList;

public Form1()
{
    InitializeComponent();

    // Initialise a new list and bind it to the listbox
    SongList = new BindingList<Song>();
    listBox1.DataSource = SongList;
}


private void button1_Click(object sender, EventArgs e)
{
    // Create a new song and add it to the list, 
    // the listbox will automatically update accordingly
    Song song = new Song(newTracktextBox.Text, 100);
    SongList.Add(song);
}

class Song
{
    private string trackName;
    private int trackLength;

    public Song(string trackName, int trackLength)
    {
        this.trackName = trackName;
        this.trackLength = trackLength;
    }

    public override string ToString()
    {
        return trackName;
    }
}

结果

【讨论】:

    【解决方案3】:

    您的 newTracktextBox 变量不是 Song 类型的对象。

    您应该使用 newTracktextBox 中的文本创建一个 Song 类型的新对象,并将新对象添加到列表中

    【讨论】:

      【解决方案4】:
      public class Songs{
          String TrackName;
          int TrackLength;
          public Songs(string trackName, int trackLength){
             this.TrackName = trackName;
             this.TrackLength = trackLength;
         }
         //methods
      }
      

      制作歌曲列表

      List<Songs> NewSongs = new List<Songs>();
      

      将新歌添加到列表中

      int tracklength = 50; // set the tracklength where you need
      NewSongs.Add(new Songs(TextBox.Text.ToString(),tracklegnth));
      

      请注意,ToString() 方法可能是多余的。

      希望我能帮上忙

      【讨论】:

      • 我认为你的东西不错。我会尽快给您回复。谢谢
      • 我创建了第二个文本框来替换你的 tracklength 但我唯一的问题是我需要将文本从文本框转换为 int
      • 从现在开始,您需要进行一些搜索,但在发布问题之前,您需要的是stackoverflow.com/questions/2709253/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 2018-04-29
      相关资源
      最近更新 更多