2012-09-21 101 views
0

我有下面的代碼使用WMI來獲取本地磁盤信息(從我從其他網站了解到)。無論如何,我創建了所有標籤和組合框,並且組合工作正常 - 它在計算機上顯示本地磁盤。標籤顯示任何東西

但是,當我嘗試從WMI中取回任何選中的磁盤並將其顯示出來時,它就不會在標籤旁邊顯示任何內容。 WMI工作正常,因爲我可以使用powershell來顯示get-wmiobjects,並且我帶回的兩個對象實際上通過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(); 
      } 
     } 


    } 
} 

回答

1

該foreach運行多少次?它看起來像只是在.Text屬性上寫很多次,因爲mosDisks.Get()集合中有元素。有沒有可能,最後一次.Get()在該循環中運行時,它是空的還是空的?

是否在標籤中顯示「Type:」和「Model:」?

也可以嘗試投入斷點在foreach看什麼回來了

moDisk["MediaType"].ToString() 
+0

嗨 - 我把一個斷點(在MediaType)位,我做了一步(F11)和程序停止在Form1_Load的結尾。它甚至沒有查看cmbHdd_SelectedIndexChanged ... Form1_Load中的第一個foreach經歷了兩次,然後顯示了winform。 – lara400

+0

你知道cmbHdd.SelectedItem是什麼時候斷點出現?另外,當你添加一些東西到組合中時,你的selectedIndexChanged事件可能會被觸發。 – Bmo

+0

抱歉 - 調試器甚至沒有命中「private void cmbHdd_SelectedIndexChanged(object sender,EventArgs e)」 - 它在此之前結束。也許我和我的cr @ p調試技能,但對我來說,它似乎程序甚至沒有得到cmbHdd_SelectedIndexChanged有你提到的cmbHdd.SelectedItem ....看不出爲什麼它沒有擊中其餘的代碼.. – lara400

0

的哭出聲來......想通了!這是我從網絡驅動器運行腳本的事實,我注意到當我加載腳本VS錯誤地指出從此位置運行腳本時存在安全風險....因此我將它移動到C:驅動器,然後嘿,一切都很好!