2013-03-05 66 views
0

我在做一点计算机信息工具。现在我正在做用户帐户。我用可用用户填充组合框。Win32_Account类奇怪的行为

ManagementObjectSearcher mosAccounts = new ManagementObjectSearcher("SELECT * FROM Win32_Account"); 

     foreach (ManagementObject moUA in mosAccounts.Get()) 
     { 
      comboBox4.Items.Add(moUA["Name"].ToString()); 
     } 

然后我展示他们:

private void comboBox4_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     ManagementObjectSearcher mosAccounts = new ManagementObjectSearcher("SELECT * FROM Win32_Account"); 

     foreach (ManagementObject moUA in mosAccounts.Get()) 
     { 
      lblDescriptionUA.Text = "Description: " + moUA["Description"].ToString(); 

      if (moUA["Domain"] != null) 
      { 
       lblDomain.Text = "Domain: " + moUA["Domain"].ToString(); 
      } 

      else 
       lblDomain.Text = "Domain: Not Available"; 

      if (moUA["InstallDate"] != null) 
      { 
       lblInstallDateUA.Text = "Install Date: " + moUA["InstallDate"].ToString(); 
      } 

      else 
       lblInstallDateUA.Text = "Install Date: Not Available"; 

      lblLocalAccount.Text = "Local Account: " + moUA["LocalAccount"].ToString(); 

      if (moUA["SID"] != null) 
      { 
       lblSID.Text = "SID: " + moUA["SID"].ToString(); 
      } 

      else 
       lblSID.Text = "SID: Not Available"; 

      if (moUA["SIDType"] != null) 
      { 
       lblSIDType.Text = "SID Type: " + moUA["SIDType"]; 
      } 

      else 
       lblSIDType.Text = "SID Type: Not Available"; 

      if (moUA["Status"] != null) 
      { 
       lblStatusUA.Text = "Status: " + moUA["Status"].ToString(); 
      } 

      else 
       lblStatusUA.Text = "Status: Not Available"; 
     } 
    } 

但每次我从下拉框中选择一个用户,标签要疯了,表现出这么多的信息,切换它。这就像他们正在显示关于所有用户的信息。有什么我失踪?

附加信息:我在工作。有很多域用户。组合框向他们展示了他们。因为所有的域用户都是Mybe。我做了一个选项,只显示本地用户,但与此相同的问题。

回答

0

但是每次我从组合框中选择一个用户时,标签都会变得疯狂,显示如此多的信息,将其切换。这就像他们正在显示关于所有用户的信息。

是 - 因为这正是代码说什么做:

// Every time you select a user... 
private void comboBox4_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    // Find all the information about all users... 
    ManagementObjectSearcher mosAccounts = 
     new ManagementObjectSearcher("SELECT * FROM Win32_Account"); 

    // Iterate over all those users and display it 
    foreach (ManagementObject moUA in mosAccounts.Get()) 
    { 
     ... 
    } 
} 

代码是做什么你问它。现在,为什么你连接了一个这样的事件处理程序?考虑一下当你选择的索引改变时你想实现的实际上是。你真的想要找到单个选定的用户吗?如果是这样,大概您只需要更改ManagementObjectSearcher中使用的查询,然后找到单个结果而不是遍历所有结果。