.NET Blog   ·   .NET Casts   ·   .NET GUI Foren   ·   .NET BlogBook   ·   WPF Blogger   ·   visual studio one   ·   ASP.NET professional

  • 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.
Download .NET Essentials Installer
Trickkiste

Oktober 2007 im Rückblick

07.11.07 - .NET, Grundlagen, Base Framework, WPF, Allerlei
Beitrag von Norbert Eder
 Im Oktober hat sich hier auf meinem Blog wieder viel getan. An dieser Stelle möchte ich einen kurzen Rückblick liefern.

.NET Core


C#: yield
C#: Arbeit mit der Registry

LINQ


LINQ: Daten aus Textdateien mittels LINQ in einer DataGridView anzeigen

Windows Presentation Foundation


WPF Teil 2: Windows Presentation Foundation oder doch lieber Windows Forms?
WPF in Windows Forms verwenden

Windows Forms


Controls auf einem Formular bewegen
AutoScroll für RichTextBox

Und schließlich wurde auch noch die vierte Ausgabe des .NET BlogBooks veröffentlicht.
  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


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
 Ab sofort steht der 7. Podcast von .NET Casts zur Verfügung. Diesmal wurde das Thema Datenzugriff mit SubSonic behandelt.

SubSonic works up your DAL for you, throws in some much-needed utility functions, and generally speeds along your dev cycle.

Weitere Informationen: Podcast #7: Datenzugriff mit SubSonic

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


.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
 Auf die Reaktionen zum .NET BlogBook hin stelle ich hiermit eine HTML-Version zur Verfügung, welche auch ins Visual Studio oder die lokale Desktop-Suche einfach integrierbar ist. Wie auch bei der PDF-Version ist unerlaubtes Verteilen, Kopieren und Anbieten der Inhalte untersagt.

Download .NET BlogBook Ausgabe 4 HTML

  2 Kommentare - 97 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


.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