C# C-将检查表按钮与方法关联
我创建了一个从不同目录删除文件的应用程序。 我为每个目录制定了不同的方法 在UI中,我希望用户选择要删除的目录 选择是通过复选框列表完成的,最终当用户选择所有他想要清空的目录时,他可以点击播放按钮 我的问题是:什么是正确的方法? 是否可以将检查按钮与方法关联?C# C-将检查表按钮与方法关联,c#,winforms,visual-studio,C#,Winforms,Visual Studio,我创建了一个从不同目录删除文件的应用程序。 我为每个目录制定了不同的方法 在UI中,我希望用户选择要删除的目录 选择是通过复选框列表完成的,最终当用户选择所有他想要清空的目录时,他可以点击播放按钮 我的问题是:什么是正确的方法? 是否可以将检查按钮与方法关联? 或者我应该在“播放”按钮后面生成一个长的分支代码吗?如果选中列表框中的文件夹名称是?匹配要运行的方法,然后可以使用反射。例如,我列出了cat、dog和fish,并可以在如下方式选中时运行相应的方法: private void bu
或者我应该在“播放”按钮后面生成一个长的分支代码吗?如果选中列表框中的文件夹名称是?匹配要运行的方法,然后可以使用反射。例如,我列出了cat、dog和fish,并可以在如下方式选中时运行相应的方法:
private void button1_Click(object sender, EventArgs e)
{
foreach(string folder in checkedListBox1.CheckedItems)
{
System.Reflection.MethodInfo mi = this.GetType().GetMethod(folder, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (mi != null)
{
mi.Invoke(this, null);
}
}
}
private void cat()
{
Console.WriteLine("cat");
}
private void dog()
{
Console.WriteLine("dog");
}
private void fish()
{
Console.WriteLine("fish");
}
我会做这样的事情:
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();
}
}
这种方法的重要部分是设置复选框项的代码部分,它还设置字典,这有助于防止名称与复选框项和字典键不匹配。在所有其他方面,此代码都是强类型的。您的目标是什么:Winforms、WPF、ASP。。?始终正确标记您的问题!检查清单事件。对我来说,关键问题是:为什么你为每个目录制定了不同的方法?是否有什么东西禁止您将删除文件功能概括为某种函数,即使该函数需要某种参数?方法不同。每个方法都从用户目录接收计算机名或所有用户的数组。每种方法都有一条不同的路径,只有它们的基本名称(即pc名称)是所有方法所共有的。在某些方法中,您不能只是删除文件,还需要进行一些检查。我没有时间将此形式化为欢迎任何其他人使用的答案,但您需要研究获取包含函数的变量的方法,以及作为每个winforms控件的一部分,该控件包含与该控件关联的对象。使用这两个选项,您可以使单击“播放”按钮循环浏览所有选中的项目,并调用标记中的Func。是否要评论?…这看起来比我的想法好,非常感谢: