Hallo zusammen,
ich möchte die Kalenderwoche im Systemtray als Icon anzeigen lassen.
Ein Timer wird eingesetzt, um zu erkennen, ob sich die Kalenderwoche geändert hat.
Wenn ja, dann neu zeichnen. Soweit so gut - Programm funktioniert.
Mich beschäftigen aber folgende Fragen:
a) Er wird so ziemlich alles in der Main() abgearbeitet. Spricht in diesem Fall etwas dagegen?
b) Ich arbeite mit private static Variablen im Klassenscope. Ist das ok oder besser anders machen?
c) Eine Static-Methode hängt am .Tick()-Event des Timers, um neu zu zeichnen. Soweit ok oder geht es auch eleganter?
Um weitere Einschätzungen wäre ich dankbar.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Windows.Forms;
namespace KalenderwocheImSystemTray
{
class Program
{
private static Bitmap bitmap = new Bitmap(16, 16);
private static Graphics graphics = Graphics.FromImage(bitmap);
private static NotifyIcon ni = new NotifyIcon();
static void Main(string[] args)
{
//Timer erzeugen
Timer timer = new Timer();
timer.Interval = 2000;
timer.Tick += new EventHandler(ReFreshIcon);
timer.Enabled = true;
//Contextmenu erzeugen [0]=Exit
ContextMenu cm = new ContextMenu();
cm.MenuItems.Add("Close", new EventHandler(Close));
//Notifyicon
ni.ContextMenu = cm;
ni.Visible = true;
Application.Run();
}
public static void ReFreshIcon(object sender, EventArgs e)
{
// zu Testzwecken wird nicht die KW, sondern ablaufende Sekunden anhand vom Interval gezeichnet
graphics.Clear(Color.Transparent);
graphics.DrawString(DateTime.Now.AddSeconds(2).Second.ToString(), new Font("Arial", 10.0f), Brushes.White,0,0);
ni.Icon = Icon.FromHandle(bitmap.GetHicon());
}
private static void Close(object sender, EventArgs e)
{
Environment.Exit(0);
}
}
}
gruß
xor
|