Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从列表中填充组合框_C#_List_Class_Combobox_Populate - Fatal编程技术网

C# 从列表中填充组合框

C# 从列表中填充组合框,c#,list,class,combobox,populate,C#,List,Class,Combobox,Populate,这里是新手, 我目前正在制作一个表单,它有一个组合框,它将显示几个查理·布朗电视特辑,你可以点击这些特辑来选择并查看对它的描述、评级、运行时间等。我很接近,但我还没有填充组合框,我希望能得到一些帮助和指导。我看过其他人做过的几件事,但我的知识还不够渊博,无法从我目前所看到的情况中推断出答案 现在我也在努力: 1.从load方法获取列表 2.循环通过它们 3.访问我的组合框,用列表中的时间填充框 表格1.cs using System; using System.Collections.Gener

这里是新手, 我目前正在制作一个表单,它有一个组合框,它将显示几个查理·布朗电视特辑,你可以点击这些特辑来选择并查看对它的描述、评级、运行时间等。我很接近,但我还没有填充组合框,我希望能得到一些帮助和指导。我看过其他人做过的几件事,但我的知识还不够渊博,无法从我目前所看到的情况中推断出答案

现在我也在努力: 1.从load方法获取列表 2.循环通过它们 3.访问我的组合框,用列表中的时间填充框

表格1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Globalization;//Used for Sting.ToUpperCase...
using System.Threading;

using System.Threading.Tasks;// Needed for Streaming...
using System.IO;// Needed for Streaming...


namespace a100___GUI___VideoStoreSelections
{
public partial class FormMovieLookUp : Form
{
    private const String FILE_NAME = "txt_movieDescriptions.txt";//connect to text file in debug

    private List<Listing> films { get; set; }

    public FormMovieLookUp()
    {
        InitializeComponent();
    }

    private void cmbMovieListingBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        txtTitleBox.Text = cmbMovieListingBox.SelectedItem.ToString();
    }

    //ToolBox -- my program specific tools
    public List<Listing> LoadListings()//load movie descriptions as list
    {
        StreamReader fileIn = new StreamReader(FILE_NAME);
        List<Listing> entries = new List<Listing>();

        //loop through every line of the file
        while (!fileIn.EndOfStream)
        {
            String line = fileIn.ReadLine();
            String[] pieces = line.Split(':');

            if (pieces.Length < 4) continue;//error handling - set to length of text items

            Listing myListing = new Listing(pieces[0], pieces[1], pieces[2], pieces[3]);
            entries.Add(myListing);
        }
        fileIn.Close();
        return entries;
    }

    private void FormMovieLookUp_Load_1(object sender, EventArgs e)
    {
        films = LoadListings();
        foreach (Listing film in films)
        {
            Console.WriteLine(film);
            cmbMovieListingBox.Items.Add(film.GetFilmTitle());
        }
    }
}
}
}


这就是我试图填充我的组合框的方法。感谢您的帮助。

如果您问的是我认为您在问的问题,那么您的表单中需要类似的内容:

foreach(Listing listing in LoadListings()){
    cmbMovieListingBox.Items.Add(listing.GetFilmTitle());
}
我会在类级别保留
列表
,这样当用户单击它时,您就可以访问它。我也会在它自己的线程上抛出它,而不是直接在加载事件中抛出它。如果这是一个漫长的过程,你会挂起用户界面

private List<Listing> films { get; set; }
当用户选择项目时

Listing film = films.Where(f => f.GetFilmTitle().Equals(cmbMovieListingBox.SelectedValue)).FistOrDefault();

if (film != null)
{
    //do work
}

视觉控件更新(如ComboBox等)有一个问题:您希望在每次数据更改时(在您的案例中每次添加项时)防止它们重新绘制:


cmbMovieListingBox.BeginUpdate();// Tsukasa的一行代码不起作用,因为它是用FistOrDefault()而不是FirstOrDefault()编写的


对不起,我没有足够的理由只添加一条评论…

也许这会对某人有所帮助。但在我的情况下,我不得不使用
cmbMovieListingBox.Text
而不是
cmbMovieListingBox.SelectedValue
(如@Tsukasa示例):

还有
FirstOrDefault()
而不是
FistOrDefault()


希望它能帮助某人

从列表声明中删除
{get;set;}
。那里不需要它

如下定义您的类:

public class Listing
{
    private String filmTitle {get; set;}
    private String description {get; set;};
    …
}
在表单加载事件中,将
组合框
显示成员
值成员
设置为“filmTitle”

最后,您必须将
组合框的
数据源
设置为列表

cmbMovieListingBox.DataSource = films;

就在这里。您的代码的其余部分现在应该可以运行了。

您的代码已经使用循环并访问组合框。到底是什么阻止您获取列表、循环列表并将每个元素文本添加到组合框中?当我运行它(单击绿色箭头编译/测试)时,框不会填充。所以这对我来说意味着我不知道自己在做什么。一般来说,由于我是新手,我可以告诉你我不知道我在做什么。我希望组合框会填充我文本文档中每一行的第一个部分。谢谢-我将尝试此操作并返回报告。我尝试了此操作,但无法使其正常工作。谢谢你的帮助-你也很棒。我会尝试一下,然后再报告。谢谢,我试过了,但没能成功。这似乎是可行的,但对我来说却不行。谢谢你的帮助。你太棒了。你能用这个发布你的代码吗?这样我就可以看看为什么它对你不起作用了。我已经更新了代码,以显示我最近实现你建议的尝试。我把所有的代码都放在form1.cs文件中。错误发生在第69行:“film”不能声明,因为它会改变child中使用的film;错误2“System.Collections.Generic.IEnumerable”不包含“FistOrDefault”的定义,并且找不到接受“System.Collections.Generic.IEnumerable”类型的第一个参数的扩展方法“FistOrDefault”(是否缺少using指令/程序集引用?),我和我的老师讨论了这个问题,老师说是的,它应该会起作用。她对文件进行了调试或类似的操作。打开和关闭它几次,然后它就工作了。她说问题在于最后一种方法根本没有运行——我们不知道为什么没有运行,但它只是在我们更换计算机时自动启动的。现在好了。我猜这有点神秘。我也试过了,可惜它产生了很多错误。它看起来非常智能,但我认为是在我尝试实现它的过程中,当我将它放入私有的void FormMovieLookUp_Load(objectsender,EventArgs e)方法时出现了错误。谢谢我明白这是怎么回事了,表格是很烦人的东西
cmbMovieListingBox.BeginUpdate(); // <- Stop painting

try {
  // Adding new items into the cmbMovieListingBox 
  foreach(var item in LoadListings())
    cmbMovieListingBox.Items.Add(item.GetFilmTitle());
finally {
  cmbMovieListingBox.EndUpdate(); // <- Finally, repaint if required
}
Listing film = films.Where(f => f.GetFilmTitle().Equals(cmbMovieListingBox.SelectedValue)).**First**OrDefault();
Listing film = films.Where(f => f.GetFilmTitle().Equals(cmbMovieListingBox.Text)).FirstOrDefault();

if (film != null)
{
    //do work
}
public class Listing
{
    private String filmTitle {get; set;}
    private String description {get; set;};
    …
}
cmbMovieListingBox.DisplayMember = "filmTitle";
cmbMovieListingBox.ValueMember = "filmTitle"
cmbMovieListingBox.DataSource = films;