You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2017中C# WinForms电影分类程序用户自定义列表实现问题

解决C# WinForms电影分类管理的动态分类创建问题

嘿,我来帮你搞定这个动态添加电影分类的需求!你之前的问题在于用了预先定义的列表/数组,没法让用户自主创建分类,咱们换个灵活的数据结构就能解决——用Dictionary<string, List<string>>来存储分类和对应电影,键是分类名称,值是该分类下的电影列表,这样就能完全支持用户动态添加新分类了。

下面是具体的实现步骤和代码示例:

1. 替换全局变量,使用动态数据结构

首先把你原来的NumOfGenres全局变量替换成一个字典对象,不用再手动维护分类数量,字典的Count属性就能直接拿到当前分类数:

// 窗体级全局变量:键=分类名,值=该分类下的电影列表
private Dictionary<string, List<string>> _movieGenreDictionary = new Dictionary<string, List<string>>();

2. 修改「添加新分类」按钮事件(button5_Click)

假设你用一个TextBox(比如命名为txtNewGenre)让用户输入新分类名称,在按钮点击事件里做以下操作:

private void button5_Click(object sender, EventArgs e)
{
    // 获取用户输入的分类名称,去除首尾空格
    string newGenre = txtNewGenre.Text.Trim();

    // 校验输入是否为空
    if (string.IsNullOrEmpty(newGenre))
    {
        MessageBox.Show("请输入有效的分类名称!", "提示");
        return;
    }

    // 检查分类是否已存在,避免重复添加
    if (_movieGenreDictionary.ContainsKey(newGenre))
    {
        MessageBox.Show($"分类「{newGenre}」已经存在啦!", "提示");
        return;
    }

    // 添加新分类,同时初始化对应的电影列表
    _movieGenreDictionary.Add(newGenre, new List<string>());
    MessageBox.Show($"分类「{newGenre}」添加成功!", "提示");

    // 可选:更新UI(把新分类加到下拉选择框里,方便后续选分类加电影)
    cboGenreSelector.Items.Add(newGenre);
    txtNewGenre.Clear(); // 清空输入框
}

3. 扩展功能:给指定分类添加电影

接下来你可以加一个「添加电影」的功能,比如用另一个TextBox(txtMovieName)输入电影名,用ComboBox(cboGenreSelector)让用户选择分类,对应的按钮事件代码:

private void btnAddMovie_Click(object sender, EventArgs e)
{
    string selectedGenre = cboGenreSelector.SelectedItem?.ToString();
    string movieName = txtMovieName.Text.Trim();

    // 校验选择和输入
    if (string.IsNullOrEmpty(selectedGenre))
    {
        MessageBox.Show("请先选择一个分类!", "提示");
        return;
    }
    if (string.IsNullOrEmpty(movieName))
    {
        MessageBox.Show("请输入有效的电影名称!", "提示");
        return;
    }

    // 把电影添加到对应分类的列表里
    _movieGenreDictionary[selectedGenre].Add(movieName);
    MessageBox.Show($"电影「{movieName}」已添加到分类「{selectedGenre}」!", "提示");
    txtMovieName.Clear();

    // 可选:更新电影列表显示(用ListBox展示当前分类的所有电影)
    UpdateMovieListDisplay(selectedGenre);
}

// 辅助方法:更新电影列表的UI显示
private void UpdateMovieListDisplay(string genre)
{
    lstMovies.Items.Clear();
    foreach (string movie in _movieGenreDictionary[genre])
    {
        lstMovies.Items.Add(movie);
    }
}

4. 额外优化点

  • 可以在窗体加载时,把字典里的初始分类预先加载到下拉选择框中
  • 如果需要持久化数据,可以把字典序列化成JSON或者存入本地文件,下次启动时读取
  • 支持删除分类或电影的功能,直接操作字典和对应的List即可

这样一来,用户就能完全自主创建新分类,不用你预先定义任何固定的列表或数组啦!

内容的提问来源于stack exchange,提问作者Davide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:05:47