-
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.
|
WPF in Windows Forms verwenden
11.10.07 - .NET, WPF Beitrag von Norbert Eder| | In einem kleinen Projekt musste ich WPF-Controls in einer Windows Form verwenden. Wer vor eben solcher Geschichte steht, sollte einen Blick auf den Artikel Hosting a WPF Control in a Windows Forms Application. Interessante Sache.
Edit: Da dieser Artikel noch auf eine Beta aufbaut, möchte ich hier kurz die notwendigen Schritte erläutern, da sich doch etwas geändert hat.
WPF-Control erstellen
Im ersten Schritt muss ein entsprechendes WPF-Control erstellt oder ein vorhandenes benutzt werden. In meinem Beispiel habe ich ein einfaches UserControl erstellt.
<UserControl x:Class="AddinTestApp.LoginControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="118" Width="300">
<Grid Height="120">
<Label Height="23" HorizontalAlignment="Left"
Margin="9,19,0,0" Name="label1"
VerticalAlignment="Top" Width="120">
Username
</Label>
<Label Height="23" HorizontalAlignment="Left"
Margin="9,40,0,0" Name="label2"
VerticalAlignment="Top" Width="120">
Password
</Label>
<TextBox Height="21" Margin="91,21,20,0"
Name="UsernameTextBox"
VerticalAlignment="Top" />
<TextBox Height="21" Margin="91,44,20,0"
Name="PasswordTextBox"
VerticalAlignment="Top" />
<Button Height="23" HorizontalAlignment="Right"
Margin="0,77,20,0" Name="LoginButton"
VerticalAlignment="Top" Width="75">
Login
</Button>
</Grid>
</UserControl>
Windows Formular erstellen
Im zweiten Schritt wird ein normales Windows-Forms-Formular erstellt. Im selben Projekt müssen nun einige Referenzen hinzugefügt werden:
PresentationCore
PresentationFramework
UIAutomationProvider
UIAutomationTypes
WindowsBase
Zusätzlich ist noch die Assembly WindowsFormsIntegration.dll zu laden. Diese befindet sich für gewöhnlich im Ordner:
%programfiles%\Reference Assemblies\Microsoft\ Framework\v3.0\WindowsFormsIntegration.dll
WPF-Control zur Anzeige bringen
Wenn nun sowohl das WPF-Control als auch das Windows Formular erstellt wurden, kann das WPF-Control folgendermaßen eingebunden werden:
private void MainForm_Load(object sender, EventArgs e)
{
ElementHost host = new ElementHost();
LoginControl lc = new LoginControl();
host.Child = lc;
host.Dock = DockStyle.Fill;
this.Controls.Add(host);
}
Bei einem Start der Anwendung sollte nun das WPF-Control sichtbar sein. Wichtig hierbei ist, dass das Host-Element via DockStyle.Fill am Windows Formular ausgerichtet werden muss.
| | | Kommentar hinzufügen
| 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 |
Google mit eigenem Betriebssystem for Mobiltelefone ... Werbung pur?
09.10.07 - Internet, Kunterbunt Beitrag von Norbert Eder| | Laut der New York Times will Google nun wohl ein Betriebssystem für Mobiltelefone herausbringen. Genauere Informationen bitte aus dem Artikel beziehen. Was ich nur sagen möchte:
Was bedeutet das für den Benutzer solcher Handies? Die gespeicherten Kontakte, sämtliche SMS, Emails etc. werden nun mit AdSense versehen? Werbung pur am Handy? Ich will da gar nicht weiter darüber nachdenken ...
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Barcamps everywhere. Auch in Graz Interesse?
08.10.07 - .NET, Internet, Community Beitrag von Norbert Eder| | Barcamps sind doch ein relativ heisses Thema in letzter Zeit. In Graz hatten wir das Vergnügen (soweit ich weiß) aktuell noch nicht. Daher die Frage in die Runde ob hier ein Interesse besteht. Keine Ahnugn wieviele Grazer mein Blog tatsächlich lesen, dennoch die Frage. Bei Interesse bitte ich um eine kurze Rückmeldung. Von Interesse wären ein paar Stunden zum Thema .NET und aktuelle Technologien. Vortragsthemen würden sich sicherlich zur Genüge finden. Also einfach bei mir melden.
| | | 2 Kommentare
- 344 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
Tags, Blogroll ... Blogs besser vernetzen
08.10.07 - Internet, Community Beitrag von Norbert Eder| | Vorweg: Ich habe mir schon recht lange (auch mit anderen) Gedanken über dieses Thema gemacht. Über Input wäre ich auf jeden Fall dankbar bzw. vielleicht ergibt sich daraus auch ein kleines .NET Projekt, mal sehen was so für Einfälle zu Tage gebracht werden.
Grundsätzlich geht es darum: Jeder kennt Blogrolls und Tags. Wer dies nicht kennt:
Blogrolls
Eine Liste auf dem eigenen Blog die auf andere Blogs verweist, die man für gewöhnlich liest und daher empfehlen möchte.
Tags
Beschreiben die Inhalte eines Blogs nach Schlagwörtern, nach denen teilweise gesucht werden kann oder in manchen Fällen auch als Tag-Cloud (welche Schlagwörter kommen am Häufigsten vor) angezeigt werden.
Nun ist es doch so, dass dies zwar einen kleinen Teil zur Vernetzung von Inhalten (abgesehen der Verweislinks) beiträgt, aber dann doch nicht alles sein kann. Ein Link zu einem anderen Blog ist natürlich erwünschenswert, zeigt aber noch immer nicht, was daraus man wirklich favorisiert. Bei den Tags sieht es ganz anders aus: Eigentlich finde ich sie ziemlich sinnlos. Tags sind schlussendlich nichts anderes als Schlüsselwörter oder Suchwörter, wie sie auch in Google/Live Search/etc. eingegeben werden. Sie werden lediglich zusammengefasst angezeigt.
Nun hat mich das auf einen Gedanken gebracht: Was wäre denn, könnte man Blogs wesentlich enger miteinander verbinden? Dies könnte passieren indem beispielsweise das Thema "verwandte Themen" aufgegriffen wird, um auch passende Einträge aus der Blogroll anzuzeigen. Der Besucher würde dadurch ein wesentlich weiteres Spektrum an Informationen/Antworten/etc. erhalten. Der Nutzen würde steigen und grundsätzlich hätte die gesamte Community etwas davon.
Auch andere Verbindungen wären möglich: Einbinden in die Suche beispielsweise. Diese müsste eben den Content der verlinkten Blogs ebenfalls durchsuchen und zurückliefern. Da es im Normalfall so ist, dass jeder Blogger hauptsächlich themenverwandte Blogs in die Blogroll mit aufnimmt wären die Treffer des Besuchers wesentlich höher und der Weg über Google, Live Search, Technorati geringer. Die Hits würden vermehrt unter den Themenblogs aufgeteilt. Vorteile quasi für alle.
Was sagt ihr hier dazu? Gäbe es hier tatsächlich Möglichkeiten weiter zusammen zu rücken und dem einzelnen Besucher bessere Ergebnisse zu liefern? Wie seht ihr meine angedachten Punkte? Potential? Unfug? Eure Meinung ist wirklich gefragt!
| | | 5 Kommentare
- 426 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
BlogEngine.NET aufgebohrt ...
08.10.07 - .NET, Datenverwaltung, Allerlei, Internet, Tools, 3rd Party Tools Beitrag von Norbert Eder| | Diejenigen, die sich die neue Website von DasBackup genauer angesehen haben, bemerkten vermutlich, dass ich BlogEngine.NET dafür eingesetzt habe. Teils aus Interesse, teils weil ich vernommen hatte, dass BlogEngine.NET wirklich sehr NETt sein soll.
Nun gut. Meine Erfahrung bei der Umsetzung der neuen Webpräsenz hat eigentlich eine Bestätigung gebracht. Wirklich ein sehr feines Teil. Daraufhin schoss gleich der nächste Gedanke ein. Eine Portierung dieses Blogs auf BlogEngine.NET. Nun gut. BlogEngine.NET unterstützt blogML. Zusätzlich gibt es ein Importer-Tool, welches via ClickOnce geladen wird (Achtung Firefox User: hier muss FFClickOnce installiert sein). Zur Auswahl steht der Import von blogML als auch RSS.
Problem Nr. 1: Der RSS-Import funktioniert bei mir nicht. Es handelt sich angeblich um ein invalides RSS. Sehr fein. Alles andere kann mit diesem Feed umgehen, nur das Importer-Tool nicht. Also scheidet dieser Weg hiermit aus.
Problem Nr. 2: Woher nun ein blogML-File bekommen? Schnell eine Solution angelegt, die blogML-DLL eingebunden und flux einen Importer geschrieben, welcher aus sämtlichen Inhalten des Blogs ein blogML-File generiert. Möööööööööp. Wieder nichts. Es validiert, wird aber nicht importiert. Feine Sache.
Und nun? Ich bin zwar immer noch von BlogEngine.NET begeistert, dennoch verstopfen sich zunehmends meine Nebenhöhlen. Was lernt man daraus? In der EDV ist dann doch nicht alles so einfach wie angenommen. Aber sollte ich das Problem lösen, dann werde ich das Tool natürlich für all die anderen SimplePHPBlog-User da draussen veröffentlichen, die eventuell auf ein System umsteigen möchten, das blogML unterstützt (BlogEngine.NET, WordPress etc.).
| | | 4 Kommentare
- 524 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
DasBackup mit neuer Webpräsenz
07.10.07 - .NET, Internet, Tools, DasBackup Beitrag von Norbert Eder| | Seit längerer Zeit auf der TODO-Liste, doch jetzt endlich geschafft, die neue Webpräsenz für DasBackup. Bei DasBackup handelt es sich um ein einfach zu verwendetes Backup-Tool mit vielen Features. Jetzt wurde die Website auf einen aktuellen Stand gebracht.
Die neue Version von DasBackup wird ebenfalls in den nächsten Wochen erscheinen und wird viele neue Funktionalitäten bieten. Weitere Informationen werden auf der Projekt-Website zukünftig vermittelt.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Windows Live Search: Datenfriedhof oder Google-Konkurrenz?
05.10.07 - Internet Beitrag von Norbert Eder| | Die Live Search bzw. der Vorgänger war ja lange Zeit nicht wirklich beliebt bzw. ist es auch heute noch nicht wirklich. Grund genug ein paar Tage zu testen, ob die Ergebnisse mittlerweile brauchbar sind.
So geschehen die vergangene Woche. Bewusst habe ich auf Google verzichtet und grundsätzlich nur die Live Search eingesetzt. Und ich muss sagen, dass ich mit den Ergebnissen eigentlich wirklich zufrieden bin. Es hat sich einiges getan und Gesuchtes wurde auch entsprechend gefunden. Wurde für eine Anfrage trotz längerer Suche nichts gefunden, unternahm ich dennoch einen Abstecher zu Google, was aber in den meisten Fällen auch kein verwertbares Ergebnis brachte.
Fakt ist, dass ich zukünftig wohl hauptsächlich die Live Search einsetzen werde, da die Ergebnisse mittlerweile wirklich gut sind (teilweise sogar besser als Google) und kaum unbrauchbare Links gefunden werden (betrifft zumindest die ersten 1-2 Seiten, Thema Relevanz).
| | | 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
|
|
|
|
|
|
|