Hier einfach irgendwelche Codesnippets posten, die ihr z.B. für eure Projekte benötigt habt, vielleicht kann jemand anders die ja auch verwenden
Spoiler:Kleiner .ini-Handler
Speichert und liest .ini-Dateien! Nur für kleine Projekte zu empfehlen:
PHP-Code:
using System; using System.Collections.Generic; using System.Linq; using System.Text;
using System.IO;
namespace Fun { public class SettingsHandler { #region Variables private const char COMMENT_CHAR = '#';
private Dictionary<String, String> keyValues = new Dictionary<string, string>();
private string fileName = String.Empty;
private StringBuilder configFileWriter = new StringBuilder(); #endregion
/// <summary> /// Initialisiert einen neuen SettingsHandler /// </summary> /// <param name="fileName">Die Datei in die geschrieben o. die gelesen werden soll</param> public SettingsHandler(string fileName) { this.fileName = fileName; }
#region Alles zum Lesen
/// <summary> /// Liest eine Datei aus! /// </summary> public void ReadFile() { if (!File.Exists(fileName)) { throw new Exception("Die Datei existiert nicht!"); } else { StreamReader sr = new StreamReader(fileName); string line = String.Empty; while ((line = sr.ReadLine()) != null) { if (!line.StartsWith(COMMENT_CHAR.ToString())) { int splitChar = line.IndexOf('='); if (splitChar != -1) { string key = line.Substring(0, splitChar).Trim().ToUpper(); string value = line.Substring(splitChar + 1).Trim(); keyValues.Add(key, value); } } } sr.Close(); } }
/// <summary> /// Holt einen Wert aus der gelesenen Datei /// </summary> /// <typeparam name="T">Der gewünschte Datentyp (z.B. String)</typeparam> /// <param name="key">Der Schlüssel, unter dem der Wert gespeichert ist</param> /// <returns>Der Wert</returns> public T Get<T>(string key) { T returnvalue = default(T); try { if (keyValues.ContainsKey(key.ToUpper())) { returnvalue = (T)Convert.ChangeType(keyValues[key], typeof(T)); } } catch (Exception ex) { Console.WriteLine("ERROR WHILE LOADING SETTINGS: " + ex); } return returnvalue; } #endregion
#region Alles zum Schreiben
/// <summary> /// Fügt einen Wert hinzu /// </summary> /// <typeparam name="T">Die Art des zu schreibenden Wertes</typeparam> /// <param name="key">Der Schlüssel, unter dem der Wert gespeichert wird</param> /// <param name="value">Der Wert</param> public void Write<T>(String key, T value) { configFileWriter.Append(key).Append(" = ").Append(value).Append(Environment.NewLine); }
/// <summary> /// Schreibt die Werte und Kommentare schlussendlich in die Datei /// </summary> public void WriteToFile() { try { StreamWriter sw = new StreamWriter(fileName); sw.Write(configFileWriter.Remove(configFileWriter.Length - 1, 1).ToString()); sw.Close(); } catch (Exception x) { throw new Exception("Fehler beim Schreiben der Datei:" + x); } } #endregion
} }
Example:
PHP-Code:
//Schreiben Util.SettingsHandler handler = new Util.SettingsHandler("settings.ini"); handler.WriteComment("Ich bin eine Beispieldatei!"); handler.Write<bool>("MENTOS_IST_GEIL", true); handler.WriteToFile(); //Lesen Util.SettingsHandler handler = new Util.SettingsHandler("config/settings.ini"); handler.ReadFile(); bool mentos = handler.Get<bool>("MENTOS_IST_GEIL");
Wie gesagt nur für kleine Projekte - aber dafür reicht das Ding
Spoiler:ExtendedGroupBox
Eine GroupBox, bei der man die RandFarbe sowie die Farbe der Überschrift anpassen kann!
PHP-Code:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing; using System.ComponentModel;
namespace Components { class ExtendedGroupBox : GroupBox { [Category("Appearance"), DefaultValue(typeof(Color), "White")] [Description("The Font-Color of the caption")] public Color CaptionColor{ get; set; }
[Category("Appearance"), DefaultValue(typeof(Color), "White")] [Description("The Border-Color")] public Color BorderColor { get; set; }
protected override void OnPaint(PaintEventArgs e) { Pen p = new Pen(BorderColor, 2); Int32 x = (int)e.Graphics.MeasureString(Text, Font).Width; Int32 y = (int)e.Graphics.MeasureString(Text, Font).Height / 2; e.Graphics.DrawRectangle(p, 1, y, e.ClipRectangle.Width - 2, e.ClipRectangle.Height - 2 - y); e.Graphics.FillRectangle(new SolidBrush(BackColor), 9, y - 1, x, y); e.Graphics.DrawString(Text, Font, new SolidBrush(CaptionColor), 10, 0); //base.OnPaint(e); } } }
Vielleicht kann man diesen Thread ja pinnen
Geändert von Mentos (30.05.2012 um 22:59 Uhr)
„Es sind nicht unsere Fähigkeiten, die zeigen, wer wir wirklich sind, es sind unsere Entscheidungen.“
- Albus Dumbledore, Harry Potter 2
Bitte keine sinnlosen Sammelthreads machen.
Wird zum einen unübersichtlich und verführt dazu, Basics wie MessageBox.Show() als Snippet zu posten.
Was man als Snippet werten kann, besteht i.d.R. nicht nur aus einer Codezeile und kann in einem seperaten Thread übersichtlich gepostet werden.
Welcher Teil von "Keine sinnlosen Sammelthreads" ist nicht verständlich?
Wenn ihr Snippets posten wollt: .Net bzw das Subforum der jeweiligen Sprache wählen und pro Snippet einen Thread erstellen.
Geschlossen.