【发布时间】:2017-03-24 13:01:20
【问题描述】:
为了更好地解释这里是一个 GUI 屏幕截图:
(不能添加小图只链接) Screen GIU <<
这是我所有的 cmets 代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Media; // to play sounds
namespace Music_PLayer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//List View
listView1.View = View.Details;
listView1.FullRowSelect = true;
// Columns CONSTRUCT
listView1.Columns.Add("ID", 70);
listView1.Columns.Add("Music name", 150);
//combobox items
comboBox1.Items.Add("Music 1");
comboBox1.Items.Add("Music 2");
comboBox1.Items.Add("Music 3");
comboBox1.Items.Add("Music 4");
comboBox1.Items.Add("Music 5");
}
// ADD TO List VIEW
private void add(int ID, string name_music)
{
string[] row = { Convert.ToString(ID), name_music };
ListViewItem item = new ListViewItem(row);
listView1.Items.Add(item);
}
//button to delete selected items in list view
private void button_delete_selected_music_Click(object sender, EventArgs e)
{
try
{
listView1.SelectedItems[0].Remove();
}
catch { }
}
**//EDITED :**
// buttton to add music to list view
int i = 0;
private void button_add_music_Click(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex==0)
{
dictOfDelegate.Add("Music 1", playmusic1);
add(i, comboBox1.Text);
}
if (comboBox1.SelectedIndex == 1)
{
dictOfDelegate.Add("Music 2", playmusic2);
add(i, comboBox1.Text);
}
if (comboBox1.SelectedIndex == 2)
{
dictOfDelegate.Add("Music 3", playmusic3);
add(i, comboBox1.Text);
}
if (comboBox1.SelectedIndex == 3)
{
dictOfDelegate.Add("Music 4", playmusic4);
add(i, comboBox1.Text);
}
if (comboBox1.SelectedIndex == 4)
{
dictOfDelegate.Add("Music 5", playmusic5);
add(i, comboBox1.Text);
}
}
// button to start music
private void button_start_music(object sender, EventArgs e)
{
}
// Voids with music :
public void playmusic1()
{
SoundPlayer audio = new SoundPlayer(Music_PLayer.Properties.Resources.playsound1);
audio.Play();
}
public void playmusic2()
{
SoundPlayer audio = new SoundPlayer(Music_PLayer.Properties.Resources.playsound2);
audio.Play();
}
public void playmusic3()
{
SoundPlayer audio = new SoundPlayer(Music_PLayer.Properties.Resources.playsound3);
audio.Play();
}
public void playmusic4()
{
SoundPlayer audio = new SoundPlayer(Music_PLayer.Properties.Resources.playsound4);
audio.Play();
}
public void playmusic5()
{
SoundPlayer audio = new SoundPlayer(Music_PLayer.Properties.Resources.playsound5);
audio.Play();
}
public delegate void PlayMusic();
// EDITED
Dictionary<string, PlayMusic> dictOfDelegate = new Dictionary<string, PlayMusic>();
void CreateList()
{
dictOfDelegate.Add("Music 1", playmusic1);
dictOfDelegate.Add("Music 2", playmusic2);
dictOfDelegate.Add("Music 3", playmusic3);
dictOfDelegate.Add("Music 4", playmusic4);
dictOfDelegate.Add("Music 5", playmusic5);
}
void InvokeMethod(string item)
{
PlayMusic method = dictOfDelegate.First(x => x.Key == item).Value;
method.Invoke();
}
}
}
我想从组合框中选择一首歌曲,将其添加到播放列表中,单击“开始音乐”按钮后将播放列表从上到下播放..
当您单击“将音乐添加到列表”按钮时,我想将组合框中的选定歌曲添加到列表视图。当然,通过“删除选定的音乐”按钮,我可以从列表中删除一首歌曲。
所以我必须这样做,例如,当我从组合框 (Music1) 中选择时单击按钮(将音乐添加到列表),它将显示 ID 1 音乐名称 Music 1,当单击开始音乐按钮时,它将显示执行 void playmusic1();
我知道我只是将文本从组合框添加到列表视图,但我不知道如何在那里获取方法...
我真的不知道如何编写“开始音乐”按钮(我在考虑队列)来用我的 listView1 一个一个地播放音乐。
我只需要收集或其他东西或队列。
主要问题是如何创建一个包含方法组的列表,然后执行所有此列表(如您所见,我希望有可能删除此列表中的选定元素)
如果我不解释清楚就问..
编辑...
我认为最好的解决方案是这段代码:
public List<Action> musiclist = new List<Action>();
// buttton to add music to list view
int i = 0;
private void button_add_music_Click(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex==0)
{
musiclist.Add(playmusic1);
add(i, comboBox1.Text);
}
if (comboBox1.SelectedIndex == 1)
{
musiclist.Add(playmusic2);
add(i, comboBox1.Text);
}
if (comboBox1.SelectedIndex == 2)
{
musiclist.Add(playmusic3);
add(i, comboBox1.Text);
}
if (comboBox1.SelectedIndex == 3)
{
musiclist.Add(playmusic4);
add(i, comboBox1.Text);
}
if (comboBox1.SelectedIndex == 4)
{
musiclist.Add(playmusic5);
add(i, comboBox1.Text);
}
}
private void button_to_Start_music_Click(object sender, EventArgs e)
{
foreach (Action func in musiclist)
{
func();
}
}
【问题讨论】:
-
你不需要排队方法调用,一个Queue的声音ID就足够了