2017-05-30 68 views
-3

所以我想从Win32_SystemDriver获取描述信息到RichTextBox,但我不能这样做,因为它只显示查询的最后结果。正如你所看到的,我试图建立一个数组,但它不起作用。使用数组来显示Win32_SystemDriver查询结果在C#

ObjectQuery query8 = new ObjectQuery(
    "SELECT * FROM Win32_SystemDriver"); 

ManagementObjectSearcher searcher8 = 
    new ManagementObjectSearcher(scope, query8); 

foreach (ManagementObject queryObj in searcher8.Get()) 
{ 
    string[] arrTeamMembers = new string[] { queryObj["Description"].ToString() }; 
    foreach (var item in arrTeamMembers) 
    { 
     richTextBox1.Text = item; 
    } 
} 

你有什么想法我怎么能显示所有的信息列表到RichTextBox

+0

尝试使用'StringBuilder'你从每个项目所需要的文本追加,然后显示字符串生成的循环后的内容。 –

+0

改为使用AppendText()。 –

+0

它实际上也是这样。它会在同一行中列出所有内容,并只显示最后的结果@MattJones – Rekcs

回答

1

尝试以下操作:

List<string> arrTeamMembers = new List<string>(); 
foreach (ManagementObject queryObj in searcher8.Get()) 
{ 
    arrTeamMembers.Add(queryObj["Description"].ToString()); 
} 
richTextBox1.Text = string.Join(",", arrTeamMembers); 
+0

它有效。我唯一改变的是改变这个richTextBox1.Text = string.Join(“,”,arrTeamMembers);到这个richTextBox1.Text = string.Join(Environment.NewLine,arrTeamMembers); – Rekcs

+0

你为什么只得到一个结果?您正在使用预计有多个项目的foreach。代码没有多大意义。 – jdweng

0

你的方法是确定的。有一件你错过了:richTextBox1.Text是一个存储字符串的所谓属性。现在它向你展示的只是最后一个驱动程序的原因是,你为你的数组中的每个驱动程序设置了这个属性为一个新的值。因此,第一个驱动程序将其设置为“driverA”,将第二个驱动程序设置为“driverB”。您正在寻找的是+=运营商 - >richTextBox1.Text += item;。如果您想在驱动程序之间添加空格,您可以执行类似richTextBox1.Text += $" {item}";的操作。这种方式你有一个领先的空白,但格式化是个人喜好。

0

请注意,ManagementObjectSearcher是IDisposable,因此应予以处置。

ObjectQuery query8 = new ObjectQuery("SELECT * FROM Win32_SystemDriver"); 
using (ManagementObjectSearcher searcher8 = new ManagementObjectSearcher(scope, query8)) 
{ 
    List<string> arrTeamMembers = new List<string>(); 
    foreach (ManagementObject queryObj in searcher8.Get()) 
    { 
     arrTeamMembers.Add(queryObj["Description"].ToString()); 
    } 
    richTextBox1.Text = string.Join(Environment.NewLine, arrTeamMembers); 
} 
0
var query8 = new ObjectQuery("SELECT * FROM Win32_SystemDriver"); 
var searcher8 = new ManagementObjectSearcher(scope, query8); 
var strbuilder = new StringBuilder(); 

foreach (var queryObj in searcher8.Get()) 
    strbuilder.AppendLine($"{queryObj["Description"].ToString()}"); 

richTextBox1.Text = strbuilder.ToString();