-
ACHTUNG - NEUES BLOG
Ab sofort steht unter http://devtyr.norberteder.com mein neues Blog zur Verfügung. Dieses Blog wird nicht weiter betreut, bleibt aber erhalten. Neue Eintr%auml;ge erfolgen nur mehr im neuen Blog. Kommentare werden ebenfalls nicht mehr behandelt. Wer weiterhin meinen Einträgen und Aktivitäten folgen möchte, möge bitte RSS-Feeds, Verlinkungen etc. an die neue Location anpassen.
|
Oktober 2007 im Rückblick
07.11.07 - .NET, Grundlagen, Base Framework, WPF, Allerlei Beitrag von Norbert Eder
Umfrage zum .NET BlogBook
29.10.07 - Blog-Intern, .NET, Grundlagen, Base Framework, WPF, ASP.NET, Mobile Devices, Datenverwaltung, Visual Studio, Allerlei Beitrag von Norbert Eder| | Auf .NET Casts wurde von uns soeben eine Umfrage gestartet. Wir möchten wissen, ob eine Print-Ausgabe des BlogBooks für unsere Leser von Interesse ist.
Wir bitten um eine zahlreiche Teilnahme (einfach auf .NET Casts einen kurzen Kommentar mit eurer Meinung hinterlassen), da wir doch in der letzten Zeit einige Anfragen bekommen haben und wir nun ausloten möchten, ob so ein Schritt von unseren Lesern angenommen werden würde.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
LINQ: Daten aus Textdateien mittels LINQ in einer DataGridView anzeigen
29.10.07 - .NET, Grundlagen, Base Framework, Datenverwaltung Beitrag von Norbert Eder| | Mit LINQ ist nicht immer nur LINQ to SQL gemeint. Es lassen sich auch ganz andere Dinge damit erledigen. In diesem Beitrag wird erklärt, wie wie Hilfe von LINQ Daten aus einer Textdatei mit komma-separierten Trennzeichen (CVS beispielsweise) in einem DataGridView zur Anzeige gebracht werden können. Um dies zu erreichen, muss unter anderem das Schlüsselwort yield verwendet werden. Wir benötigen nämlich die Möglichkeit, durch die Daten der angegebenen Textdatei zu iterieren - zeilenweise. Hierfür wird folgende Methode verwendet:
private IEnumerable<string[]> LoadFile(string delim, StreamReader sr)
{
while (sr.Peek() != -1)
yield return sr.ReadLine().Split(delim.ToCharArray());
}
Dem zugrunde liegt die Datei Adressen.txt, die folgende Daten zur Verfügung stellt:
Norbert;Eder;Irgendeine Strasse 1;10000;Irgendein Ort
Klaus;Mustermann;Mustermann Strasse 1;10000;Irgendein Ort
Für die Erstellung der notwendigen Objekte und der damit möglichen Anzeige der Daten wird nun folgender Codeblock verwendet:
if (File.Exists("Adressen.txt"))
{
StreamReader sr = new StreamReader("Adressen.txt");
var addressList = from field in LoadFile(";", sr)
select new
{
Firstname = field[0],
Lastname = field[1],
Street = field[2],
PostalCode = field[3],
City = field[4],
};
List<object> tempList = new List<object>();
foreach (var address in addressList)
tempList.Add(address);
this.DataGridView.DataSource = tempList;
}
Mittels LINQ wird quasi ein Select auf die von LoadFile zurückgegebenen Enumerations-Werte ausgeführt und in eine Liste geschrieben. Anschließend werden die Informationen zur Anzeige gebracht.
Schlussendlich sieht das Ergebnis so aus:
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
C#: yield
29.10.07 - .NET, Grundlagen, Base Framework, Datenverwaltung Beitrag von Norbert Eder| | Das Schlüsselwort yield gibt es bereits seit .NET 2.0. In freier Wildbahn trifft man es bis dato jedoch sehr selten an. Hier eine kleine Erklärung wofür yield gut ist.
yield wird in einem Iterator-Block verwendet, um für das zurückzulieferende Objekt einer Enumeration einen Wert zu liefern oder das Ende der Enumeration anzuzeigen.
Nehmen wir als Beispiel folgenden Block:
private IEnumerable<string[]> LoadFile(string delim, StreamReader sr)
{
while (sr.Peek() != -1)
yield return sr.ReadLine().Split(delim.ToCharArray());
}
Der Hintergrund dieser Methode ist, über alle Zeilen einer Datei zu iterieren. Dazu wird ausserhalb dieser Methode ein Objekt des Typs StreamReader instanziiert und der Methode zusammen mit einem Trennzeichen (in diesem Fall ideal für CVS-Dateien) übergeben. Als Ergebnis kann über die Datei wie durch eine Auflistung iteriert werden.
Mit folgender Methode könnte nun das jeweils erste Element einer jeden Zeile in einer CSV-Datei ausgegeben werden:
private void TestFunction()
{
StreamReader sr = new StreamReader("Test.cvs");
foreach (string[] s in LoadFile(";", sr))
{
Console.WriteLine(s[0]);
}
sr.Close();
}
Eine einfachere Variante dies zu bewerkstellingen gibt es wohl kaum ...
| | | 2 Kommentare
- 964 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
Podcast zum Thema SubSonic
21.10.07 - .NET, Base Framework, ASP.NET, Datenverwaltung, Internet, Entwickler Podcasts Beitrag von Norbert Eder
.NET BlogBook Ausgabe 4: Inoffizielle HTML Version
17.10.07 - .NET, Grundlagen, Base Framework, WPF, ASP.NET, Datenverwaltung, Visual Studio, Allerlei, Microsoft Office, SQL Server, Internet, Community Beitrag von Norbert Eder
.NET BlogBook Ausgabe 4 inklusive Gewinnspiel
15.10.07 - .NET, Grundlagen, Base Framework, WPF, ASP.NET, Datenverwaltung, Visual Studio, Allerlei, Microsoft Office, SQL Server Beitrag von Norbert Eder| | Die vierte Ausgabe des .NET BlogBook ist ab sofort verfügbar. Nun mit weit mehr Informationen als jemals zuvor - geballt auf 275 Seiten.
Viele Bereiche wurden erweitert, unter anderem:
- Base Framework
- Windows Forms
- ASP.NET
- Tools
Zusätzlich sind auch neue Bereiche zu finden, beispielsweise:
- Windows Communication Foundation
- LINQ
Gewinnspiel
Eine weitere Neuerung: Diesmal gibt es ein Gewinnspiel. Insgesamt werden fünf Jahresabos von wahlweise visual studio one oder ASP.NET Professional unter allen Teilnehmern verlost. Weitere Informationen finden sich direkt im BlogBook auf Seite 3.
Zum .NET BlogBook
| | | 8 Kommentare
- 1091 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
C#: Arbeit mit der Registry
10.10.07 - .NET, Grundlagen, Base Framework, Datenverwaltung Beitrag von Norbert Eder| | Die Registry wird noch immer häufig verwendet, um bestimmte Daten zu hinterlegen. .NET bietet hierfür die Klasse RegistryKey.
Hier ein Beispielcode wie Daten in die Registry geschrieben werden können:
RegistryKey rk = Registry.CurrentUser;
RegistryKey rkSoftware =
rk.OpenSubKey("Software", true);
if (rkSoftware != null)
{
RegistryKey rkCompany =
rkSoftware.OpenSubKey("Norbert Eder",true);
if (rkCompany == null)
{
rkCompany = rkSoftware.CreateSubKey("Norbert Eder");
}
RegistryKey rkInstaller =
rkCompany.OpenSubKey("MySoftware", true);
if (rkInstaller == null)
rkInstaller = rkCompany.CreateSubKey("MySoftware");
rkInstaller.SetValue("value1", "test1");
rkInstaller.SetValue("value2", "test2");
rkInstaller.Close();
rkCompany.Close();
rkSoftware.Close();
}
rk.Close();
Natürlich müssen die Werte auch wieder ausgelesen werden. Dies passiert auf folgende Art und Weise:
RegistryKey rk =
Registry.CurrentUser.OpenSubKey
(@"Software\Norbert Eder\MySoftware");
if (rk != null)
{
string value1 = (string)rk.GetValue("value1");
string value2 = (string)rk.GetValue("value2");
rk.Close();
}
Damit sollte es nun einfach möglich sein, Werte in die Registry zu schreiben und daraus auszulesen. Eventuell empfiehlt es sich, hier noch genauer im MSDN nachzulesen, um zusätzliche Informationen zu erhalten.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Controls auf einem Formular bewegen
10.10.07 - .NET, Grundlagen, Base Framework, WPF Beitrag von Norbert Eder| | In Foren als auch meiner Inbox taucht immer wieder die Frage auf, wie man denn bewegbare Controls erstellen kann, um beispielsweise ein Diagramm zu zeichnen etc. Deshalb möchte ich hier ein ganz kleines Beispiel zeigen, wie in zwei Minuten eine bewegliche Basisklasse für bewegliche Controls erstellt werden kann. Und hier kommt schon der Sourcecode:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace MoveableControlDemo
{
public partial class MoveableBaseControl
: UserControl
{
private bool _isMoving = false;
private int _deltaX = 0;
private int _deltaY = 0;
public MoveableBaseControl()
{
InitializeComponent();
}
private void MoveableBaseControl_MouseDown(
object sender,
MouseEventArgs e)
{
_isMoving = true;
_deltaX = e.X;
_deltaY = e.Y;
}
private void MoveableBaseControl_MouseUp(
object sender,
MouseEventArgs e)
{
_isMoving = false;
}
private void MoveableBaseControl_MouseMove(
object sender,
MouseEventArgs e)
{
if (_isMoving && e.Button == MouseButtons.Left)
{
this.Location = new Point(
this.Location.X + (e.X - _deltaX),
this.Location.Y + (e.Y - _deltaY)
);
}
}
}
}
Im Grunde passiert nicht viel. Es wird lediglich festgehalten wann sich das Control bewegen soll und wann nicht (MouseDown und MouseUp). Bei einem MouseMove wird anschließend die Position des Controls berechnet. Zu beachten ist hier nur, dass die MouseEventArgs die Position des Cursors innerhalb des Controls angibt und nicht auf Formular- bzw. Screen-Basis. Daher muss das Delta zum Rand des Controls beim MouseDown festgehalten werden, um dies später in die Berechnung einfließen zu lassen.
Dieses Control kann sozusagen als ein Basis-Control verwendet werden. Zum Test einfach in ein Projekt einbauen, auf ein Formular ziehen, Anwendung starten und mit der Maus über das Formular bewegen.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
AutoScroll für RichTextBox
04.10.07 - .NET, Grundlagen, Base Framework, WPF Beitrag von Norbert Eder| | In der letzten Zeit wurde ich des öfteren gefragt, wie man denn eine RichTextBox dazu bringt, automatisch zu scrollen, sobald neuer Text hinzugefügt wird (wenn diese beispielsweise als Ausgabe für Log-Informationen verwendet wird). Hier wie ich es mache:
this.LogRtb.Text += "My additional log text ...";
this.LogRtb.SelectionStart = this.LogRtb.Text.Length;
this.LogRtb.ScrollToCaret();
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL | Zurück Weiter
|
|
|
|
|
|
|