我正在玩BASS .NET,而且我很难搞清楚如何让我的项目中的Combo框在SelectedIndexChanged事件发生时返回一个整数。也许我错过了某些东西,或者我的代码的某些部分是无法访问的。
我的基本目标是根据选择的驱动程序类型使用驱动程序名称填充列表框。
无论如何,我整天都在这里,并且不知道发生了什么。任何建议都非常感谢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;
//BASS references
using Un4seen.Bass;
using Un4seen.BassAsio;
using Un4seen.Bass.AddOn.Midi;
namespace VibeCraft
{
public partial class vcSettings : Form
{
BASS_DEVICEINFO dvInfo;
public vcSettings()
{
InitializeComponent();
}
public void SetDriverType()
{
int driverList = Bass.BASS_GetDeviceCount();
switch (cmbDrvType.SelectedIndex)
{
//Clear Names when No sound is selected
case 0:
for (int i = driverList; i >= 0; i--)
{
lstDriverList.Items.Remove(driverList);
}
break;
//get Device names for DirecX Driver type
case 1:
for (int i = driverList; i < Bass.BASS_GetDeviceCount(); i++)
{
dvInfo = Bass.BASS_GetDeviceInfo(i);
Bass.BASS_GetDeviceInfo(i, dvInfo);
lstDriverList.Items.Add(dvInfo.name);
}
break;
//Get Device names for ASIO Driver type
case 2:
//TODO:
//logic for populating the ASIO driver list.
break;
default:
cmbDrvType.SelectedIndex = 1;
break;
}
}
private void cmbDrvType_SelectedIndexChanged(object sender, EventArgs e)
{
SetDriverType();
}
}
}
感谢所有的支持,我想出了我出错的地方,在我循环增加索引的for循环中,我开始使用等于sentinel值的值。 driverList值已经是3,因此它没有递增,因为这是我对它的比较。这是我更新的代码。
public void SetDriverType(int selectedType)
{
int driverList = Bass.BASS_GetDeviceCount();
switch (selectedType)
{
//Clear Names when No sound is selected
case 0:
for (int i = driverList; i >= 0; i--)
{
lstDriverList.Items.Remove(driverList);
}
break;
//get Device names for DirecX Driver type
case 1:
for (int i = 0; i < Bass.BASS_GetDeviceCount(); i++)
{
dvInfo = Bass.BASS_GetDeviceInfo(i);
//Bass.BASS_GetDeviceInfo(i, dvInfo);
lstDriverList.Items.Add(dvInfo.name);
}
break;
//Get Device names for ASIO Driver type
case 2:
//TODO:
//logic for populating the ASIO driver list.
break;
}
答案 0 :(得分:1)
我认为最好在IndexChange中使用int变量来检索索引值,然后将其传递给SetDriverType()方法。 试试看,让我知道它是如何被唤醒的。
private void cmbDrvType_SelectedIndexChanged(object sender, EventArgs e)
{
SetDriverType((int)cmbDrvType.SelectedIndex);
}