- OpenGL Grafikbibliothek in C#
- OpenGL Grafikbibliothek in C#
- sehr leistungsfähige, kostenpflichtige 3D Gafikkomponente
- 3D Softwarerendering
- OpenGL Schnittstellen-Bibliothek
Manchmal ist es nützlich Listen-Klassen zu verwenden und diese komfortabel mit foreach zu durchlaufen. Dazu ist es notwendig, das Interface IEnumerable und einige Hilfsfunktionen in diese Klasse zu implementieren. Wie das funktioniert zeigen folgende Seiten:
Visual Studio bietet eine nützliche Codesnippet-Funktionalität über InteliSense an. Man tippt einfach ein Kürzel und 2x TAB und VS fügt einen definierten Codeblock ein.
Beispiele:
ctor[TAB][TAB] -> fügt innerhalb einer Klasse einen Konstruktor mit der entsprechenden Klassenbezeichnung ein
prop[TAB][TAB] -> fügt innerhalb einer Klasse eine Property ein
cw[TAB][TAB] -> fügt ein Console.Writeline() ein
forr[TAB][TAB] -> fügt eine for-Schleife mit absteigendem Zähler ein
try[TAB][TAB] -> fügt einen try-catch-Block ein
Mehr dazu unter:
Auf Codeplex ist auch ein Snippet-Designer verfügbar: Snippet Designer
// Aufruf: // // string[] saFilterList = { "*.csv", "*.txt" }; // List<string-> lFileList = this.GetFilesByFilter(@"c:\temp\", saFilterList); // // foreach (string f in lFileList) // { // ... // } // using System.IO; /// <summary> /// listet Dateien eines Verzeichnisses anhand eines übergebenen Filters /// </summary> /// <param name="sPath">Suchpfad</param> /// <param name="saFilterList">Filterliste (*.csv, *.txt)</param> /// <returns>Dateiliste</returns> public List<string-> GetFilesByFilter(string sPath, string[] saFilterList) { List<string-> lFileList = new List<string->(); if (Directory.Exists(sPath)) { foreach (string filter in saFilterList) { lFileList.AddRange(Directory.GetFiles(sPath, filter)); } } return lFileList; }
// Aufruf: // // MemInfo.MEMORYSTATUSEX ms = MemInfo.CurrentMemoryStatus; // // uint uiMemoryLoad = ms.dwMemoryLoad; // ulong ulTotalPhys = ms.ulTotalPhysical; // ulong ulAvailPhys = ms.ulAvailPhysical; // ulong ulTotalPageFile = ms.ulTotalPageFile; // ulong ulAvailPageFile = ms.ulAvailPageFile; // ulong ulTotalVirtual = ms.ulTotalVirtual; // ulong ulAvailVirtual = ms.ulAvailVirtual; // ulong ulAvailExtendedVirtual = ms.ulAvailExtendedVirtual; using System.Runtime.InteropServices; /// <summary> /// freeware helper class for getting memory info /// (W) 2011 by admin of codezentrale.de /// http://pinvoke.net/default.aspx/kernel32/GlobalMemoryStatusEx.html /// http://msdn.microsoft.com/en-us/library/aa366589%28v=vs.85%29.aspx /// </summary> public static class MemInfo { [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct MEMORYSTATUSEX { public uint dwLength; public uint dwMemoryLoad; public ulong ulTotalPhysical; public ulong ulAvailPhysical; public ulong ulTotalPageFile; public ulong ulAvailPageFile; public ulong ulTotalVirtual; public ulong ulAvailVirtual; public ulong ulAvailExtendedVirtual; } [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer); /// <summary> /// get current memory status struct /// </summary> public static MEMORYSTATUSEX CurrentMemoryStatus { get { MEMORYSTATUSEX ms = new MEMORYSTATUSEX(); ms.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX)); GlobalMemoryStatusEx(ref ms); return ms; } } }
Manchmal erhält man beim compilieren eines Projektes mit einem integrierten Setupprojekt in VisualStudio 2010 folgende Warnmeldung:
WARNUNG: Die Zielversion von .NET Framework im Projekt entspricht nicht der .NET Framework-Startbedingungsversion “2.0.50727”. Aktualisieren Sie die Version der .NET Framework-Startbedingung, sodass sie der Zielversion von .NET Framework im Dialogfeld “Erweiterte Kompilierungsoptionen” (VB) oder auf der Anwendungsseite (C#, F#) entspricht.
Um Ursache dieser Warnung zu beseitigen, muss man wie folgt vorgehen:
using System.Windows.Forms; /// <summary> /// prüft, ob übergebener Text eine best. Länge in Pixeln nicht Überschreitet /// </summary> /// <param name="sText">der zur prüfende Text</param> /// <param name="iLength">max. Textlänge in Pixeln</param> /// <param name="ftTextFont">angewendete Schriftart</param> /// <returns>true, else false</returns> public bool FitsLength(string sText, int iLength, Font ftTextFont) { return (TextRenderer.MeasureText(sText, ftTextFont).Width <= iLength); }
Weiterführende Informationen zur Klasse TextRenderer: MSDN
// dgvGrid == DataGridView auf dem Formular private void btnOpen_Click(object sender, EventArgs e) { // Datei öffnen if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // DataTable hält die gesplitteten CSV-Daten DataTable dt = new DataTable(); // Datei öffnen, hier als UTF8 using (StreamReader sr = new StreamReader(openFileDialog.FileName, Encoding.UTF8)) { // bis Dateiende lesen while (!sr.EndOfStream) { // Zeile einlesen und anhand des Trennzeichens ";" in einzelne Spalten (stringarray) splitten string[] currentline = sr.ReadLine().Split(new string[] { ";" }, StringSplitOptions.None); // wenn neue Tabelle (noch keine Spalten enthalten) if (dt.Columns.Count == 0) { // n Spalten der ersten gelesenen Zeile hinzufügen for (int i = 0; i < currentline.Length; i++) { // als Spaltenüberschrift die eingelesenen Teile des Stringarrays verwenden dt.Columns.Add(currentline[i]); } } else { // ansonsten Daten des Stringarrays zeilenweise hinzufügen dt.Rows.Add(currentline); } } // Stream schließen sr.Close(); } // DataTable an das Gitter auf der Oberfläche übergeben und somit anzeigen dgvGrid.DataSource = dt; } }
// für "mshtml.IHTMLImgElement" unter Projekt->Verweise->Verweis hinzufügen->COM->Microsoft HTML Object Library hinzufügen // benötigt wird außerdem ein WebBrowser-Steuerelement "webBrowser" auf dem Formular // Ereignis, wenn WebBrowser ein Dokument fertig geladen hat private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (e.Url == webBrowser.Url) { // MouseMove-Event dem eben geladenen Dokument zuweisen webBrowser.Document.MouseMove += new HtmlElementEventHandler(Document_MouseMove); } } private void Document_MouseMove(object sender, HtmlElementEventArgs e) { HtmlDocument doc = sender as HtmlDocument; if (doc != null) { HtmlElement el = doc.GetElementFromPoint(webBrowser.PointToClient(Control.MousePosition)); if (el != null) { string sHTML = el.OuterHtml; mshtml.IHTMLImgElement htmImg = el.DomElement as mshtml.IHTMLImgElement; ... } } }
using System.IO; /// <summary> /// freeware helper class for managing DirectorySeparatorChar /// (W) 2011 by admin of codezentrale.de /// </summary> public static class FileSystem { /// <summary> /// include ending DirectorySeparatorChar /// </summary> /// <param name="path">current path</param> /// <returns>path with ending DirectorySeparatorChar</returns> public static string IncludeTrailingPathDelimiter(string path) { return path.EndsWith(Path.DirectorySeparatorChar.ToString()) ? path : path + Path.DirectorySeparatorChar; } /// <summary> /// exclude ending DirectorySeparatorChar /// </summary> /// <param name="path">current path</param> /// <returns>path without ending DirectorySeparatorChar</returns> public static string ExcludeTrailingPathDelimiter(string path) { return path.EndsWith(Path.DirectorySeparatorChar.ToString()) ? path.Remove(path.Length, 1) : path; } }