EventLog auslesen  
Frank Dzaebel, erstellt am: 20.05.2006, zuletzt geändert:  20.05.2006
Kategorie: Windows Forms, .NET-Version: 2.0, [Download]

Ein einfaches Beispiel, wie man das Lesen aus einem beliebigen EventLog mit einem BindingNavigator nebst BindingSource kombinieren kann. Die Werte eines EventLogEntrys werden als SelectedObject in einem PropertyGrid angezeigt.


using System;
using System.Windows.Forms;
using System.Diagnostics;
using System.Text;

namespace EventLogView
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    public EventLog[] evls;
    public EventLog evl;
    string machine = Environment.MachineName;

    private void Form1_Load(object sender,EventArgs e)
    {
      evls = EventLog.GetEventLogs(machine);
      ComboBoxFüllen();
      bindingNavigator1.BindingSource = new BindingSource(evl, "Entries");
      bindingNavigator1.BindingSource.CurrentChanged += new EventHandler(BindingSource_CurrentChanged);
      propertyGrid1.SelectedObject = bindingNavigator1.BindingSource.Current;
    }

    void BindingSource_CurrentChanged(object sender,EventArgs e)
    {
      if (bindingNavigator1.BindingSource != null)
        propertyGrid1.SelectedObject = bindingNavigator1.BindingSource.Current;
    }

    private void ComboBoxFüllen()
    {
      cmbEventLogName.DataSource = evls;
      cmbEventLogName.DisplayMember = "Log";
      cmbEventLogName.ValueMember = "Log";
    }

    private void cmbEventLogName_SelectedIndexChanged(object sender,EventArgs e)
    {
      evl = new EventLog(((EventLog)cmbEventLogName.SelectedItem).Log,machine);
      bindingNavigator1.BindingSource = new BindingSource(evl,"Entries");
      bindingNavigator1.BindingSource.CurrentChanged += new EventHandler(BindingSource_CurrentChanged);
      if (bindingNavigator1.BindingSource != null)
        propertyGrid1.SelectedObject = bindingNavigator1.BindingSource.Current;
    }

    private void cmbEntryNr_SelectedIndexChanged(object sender,EventArgs e)
    {
      if (bindingNavigator1.BindingSource != null)
        propertyGrid1.SelectedObject = bindingNavigator1.BindingSource.Current;
    }

    private void btnData_Click(object sender,EventArgs e)
    {
      EventLogEntry entry = (EventLogEntry)bindingNavigator1.BindingSource.Current;
      string dataString = "Data-Eigenschaft kann nicht als ASCII-String geparst werden.";
      try
      {
        dataString = "<Anfang>" + Encoding.ASCII.GetString(entry.Data)+"<Ende>"+
          "\r\n(Die Data-Eigenschaft beinhaltet Binärdaten beliebiger Form.\r\n"+
          "Manchmal 4-Byte Integer, oder 2-Byte Short oder anderes und ist deswegen\r\n" +
          "nicht immer als String darstellbar)";
      }
      catch { }
      MessageBox.Show("Data-Eigenschaft als String:\r\n" +  dataString);
    }
  }
}