2017-05-30 47 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();