WMI를 사용하여 로컬 디스크 정보를 얻는 코드는 아래 코드에서 얻었습니다 (내가 배운 다른 사이트에서 가져옴). 어쨌든 모든 레이블과 콤보 상자를 만들었고 콤비는 잘 작동합니다. 컴퓨터에 로컬 디스크가 표시됩니다.레이블이 아무것도 표시되지 않습니다.
그러나 디스크를 선택한 WMI에서 다시 가져 와서 표시하면 레이블 옆에 아무 것도 표시되지 않습니다. WMI는 get-wmiobjects를 표시하기 위해 powershell을 사용할 수 있고, 다시 가져오고있는 두 객체는 실제로 powershell을 통해 무언가를 보여줄 수 있기 때문에 잘 작동합니다 ....이 응용 프로그램에는 없습니다.
아이디어가 있으십니까?
namespace diskdrive_info
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//Get all the disk drives
ManagementObjectSearcher mosDisk = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
// Loop through each object (disk) retrieved by WMI
foreach (ManagementObject moDisk in mosDisk.Get())
{
cmbHdd.Items.Add(moDisk["Model"].ToString());
}
}
private void cmbHdd_SelectedIndexChanged(object sender,EventArgs e)
{
ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Model = '" + cmbHdd.SelectedItem + "'");
foreach (ManagementObject moDisk in mosDisks.Get())
{
lblType.Text = "Type:" + moDisk["MediaType"].ToString();
lblModel.Text = "Model: " + moDisk["Model"].ToString();
}
}
}
}
안녕하세요 - (MediaType에서) 비트에 중단 점을 넣고 (F11) 통해 단계를 수행하고 프로그램이 Form1_Load 끝에 중지합니다. 그것은 심지어 cmbHdd_SelectedIndexChanged를 보지 않습니다 ... Form1_Load의 첫 번째 foreach가 두 번 통과 한 다음 winform을 표시했습니다. – lara400
중단 점이 발생할 때 cmbHdd.SelectedItem이 무엇인지 알고 있습니까? 또한 콤보에 무언가를 추가하면 selectedIndexChanged 이벤트가 실행될 수 있습니다. – Bmo
죄송합니다 - 디버거가 "개인 무효 cmbHdd_SelectedIndexChanged (개체 발신자, EventArgs 전자)"공격하지 않습니다 - 그 전에 끝납니다. 아마 저와 cr @ p 디버깅 기술을 가지고 있지만 저에게 그것은 프로그램이 심지어 cmbHdd_SelectedIndexChanged에 도착하지 않는 것 같아요. 당신이 언급 한 cmbHdd.SelectedItem이 있습니다. 왜 다른 부분에 충돌하지 않는지는 알 수 없습니다. 코드 ... – lara400