【问题标题】:Using array to display Win32_SystemDriver query results in C#C#中使用数组显示Win32_SystemDriver查询结果
【发布时间】:2017-05-30 12:39:54
【问题描述】:

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

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 中?

【问题讨论】:

  • 尝试使用StringBuilder 附加每个项目所需的文本,然后在循环后显示字符串生成器的内容。
  • 使用 AppendText() 代替。
  • 实际上也是如此。它将在同一行中列出所有内容,并且只显示最后一个结果@MattJones
  • 不起作用@HansPassant

标签: c# arrays winforms


【解决方案1】:

尝试以下:

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

【讨论】:

  • 它有效。我唯一改变的是改变这个richTextBox1.Text = string.Join(",", arrTeamMembers);到这个richTextBox1.Text = string.Join(Environment.NewLine, arrTeamMembers);
  • 为什么你只得到一个结果?您正在使用需要多个项目的 foreach 。代码没有多大意义。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    请注意,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);
    }
    

    【讨论】:

      【解决方案4】:
      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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多