using System; using System.Drawing; using System.Windows.Forms; namespace AdvertsingProfitControl { public sealed partial class LogConsole : Form { //Source code: https://hashfactor.wordpress.com/2009/03/31/c-winforms-create-a-single-instance-form/ private static readonly LogConsole gLogConsoleInstance = new LogConsole(); private static bool gIsShown = false; public LogConsole() { InitializeComponent(); logListView.Scrollable = true; logListView.View = View.Details; //Information for drawing header columns and sub-items in ListView: //http://stackoverflow.com/questions/561798/how-do-i-align-text-for-a-single-subitem-in-a-listview-using-c ColumnHeader header = new ColumnHeader(); header.Text = "Advertising Profit Control " + Application.ProductVersion + " Debug Console"; header.Name = "LogConsoleHeader"; header.Width = logListView.Width; logListView.Columns.Add(header); } static LogConsole() { GetStaticInstance.FormClosing += new FormClosingEventHandler(LogConsole_FormClosing); //Set the maximum and minimum size of the form. GetStaticInstance.MaximumSize = new Size(900, 900); GetStaticInstance.MinimumSize = new Size(400, 400); } public new void Show() { if (gIsShown) { base.Show(); } else { base.Show(); gIsShown = true; } } public new void Hide() { if (gIsShown) { base.Hide(); gIsShown = false; } } public enum Level : int { Critical = 0, Error = 1, Warning = 2, Info = 3, Verbose = 4, Debug = 5 }; public void WriteToLog(Level level, string message) { Color color; int index; switch (level) { case Level.Critical: color = Color.White; break; case Level.Error: color = Color.Red; break; case Level.Warning: color = Color.Goldenrod; break; case Level.Info: color = Color.Green; break; case Level.Verbose: color = Color.Blue; break; default: color = Color.Black; break; } index = logListView.Items.Count; try { message = String.Format("{0}: {1}", level, message); if (level != Level.Info) { GlobalClasses.WriteToLog(DateTime.Now + ": " + message + Environment.NewLine); } logListView.Items.Add(message); logListView.Items[index].ForeColor = color; } catch (Exception e) { MessageBox.Show(e.Message); } if (level == Level.Critical) { logListView.Items[index].BackColor = Color.Red; } else { logListView.Items[index].BackColor = Color.WhiteSmoke; } } private static void LogConsole_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; GetStaticInstance.Hide(); gIsShown = false; } public static LogConsole GetStaticInstance { get { return gLogConsoleInstance; } } public bool IsVisable { get { return gIsShown; } } } }