C# - 将检查列表按钮与方法相关联

标签 c# winforms visual-studio

<分区>

我创建了一个从不同目录中删除文件的应用程序。 我为每个目录做了不同的方法。

在 UI 中,我希望用户选择他想要删除的目录。

选择是通过复选框列表完成的,最终当用户选择他想要清空的所有目录时,他可以点击播放按钮。

我的问题是:这里的正确方法是什么? 是否可以将检查按钮与方法相关联? 或者我应该在播放按钮后面做一个很长的分支代码?

最佳答案

我会做这样的事情:

    private Dictionary<string, Action> _selectedActions = null;

    private void Form1_Load(object sender, EventArgs e)
    {
        this.checkedListBox1.Items.Add("Apple");
        this.checkedListBox1.Items.Add("Banana");
        this.checkedListBox1.Items.Add("Cherry");

        _selectedActions = new Dictionary<string, Action>()
        {
            { "Apple", Apple },
            { "Banana", Banana },
            { "Cherry", Cherry },
        };
    }

    private void Apple() { MessageBox.Show("Ran Apple"); }
    private void Banana() { MessageBox.Show("Ran Banana"); }
    private void Cherry() { MessageBox.Show("Ran Cherry"); }

    private void button1_Click(object sender, EventArgs e)
    {
        foreach (var action in this.checkedListBox1
            .CheckedItems
            .Cast<string>()
            .Select(x => _selectedActions[x]))
        {
            action();
        }
    }

这种方法的重要部分是设置复选框项目的代码部分也设置了 Dictionary<string, Action>这有助于防止名称与复选框项和字典键不匹配。在所有其他方面,此代码都是强类型的。

关于C# - 将检查列表按钮与方法相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43768798/

相关文章:

c# - Windows 窗体程序在运行查询时突然关闭。如何在错误停止/崩溃之前捕获错误?

winforms - AxWindowsMediaPlayer 逐帧来回跳动

c# - System.Drawing Out of Memory Exception on Main() 方法 - C#

c++ - 错误 C1010 : unexpected end of file while looking for precompiled header. 您是否忘记将 '#include "stdafx.h"' 添加到您的源代码中?

vb.net - CodeAnalysis 是否会返回 CA2202 误报?或者我的代码真的有问题吗?

c# - MVC 6 更改返回内容类型

c# - 哪些策略可以在库中使用 IoC 容器?

c# - 在 foreach 循环外声明变量

c# - 向DataGridView添加行,只显示一行?

visual-studio - DOCKER_REGISTRY 变量未设置。默认为空字符串