Seiten
Zuletzt im Ohr
Zuletzt im Sinn
Archiv
- März 2010 (5)
- Februar 2010 (3)
- Dezember 2009 (2)
- November 2009 (3)
- Oktober 2009 (17)
- September 2009 (7)
- August 2009 (7)
- Juli 2009 (3)
- Juni 2009 (2)
- Mai 2009 (4)
- April 2009 (1)
- März 2009 (3)
- Februar 2009 (11)
- Januar 2009 (14)
- Dezember 2008 (6)
- November 2008 (9)
- Oktober 2008 (6)
- September 2008 (9)
Tagcloud
Partner/Links
- gb-pix.de - Gästebuchbilder, Jappy, MySpace…
- Gratis SMS - Kostenlos ohne Anmeldung SMS verschicken
- icq-tools - Viele Tools für ICQ!
- Kostenlose Browsergames - Kostenlose Browsergames
- Servervoice Blog - Servervoice Blog
- Wordpress Theme
Network
C# – Webbrowser Control: Popups blocken
Mal schnell ein kleiner Tipp aus der C# Ecke. Popups nerven – vor allem, wenn das Webbrowsercontrol unsichtbar ist und eine Anwendung, dem User völlig unersichtlich, eben diese generiert/zulässt.
Nach endlosem googlen und herum probieren musste ich mal wieder feststellen, wie simpel und einfach das Leben Mit C# und Visual Studio doch ist.
Also – wie blockt man Popups, die von einem Webbrowser Control ausgehen?
Um die Popups zu blocken muss dem Webbrowser Control zuerst ein NewWindow Eventhandler hinzugefügt werden. Ob ihr dies von Hand, oder über die Property Box macht, ist ja bekannter weise egal.
Im zweiten Schritt reicht dann schon eine einzige Zeile Code, um die Popups in die ewigen Jagdgründe zu schicken.
private void webBrowser2_NewWindow(object sender, CancelEventArgs e)
{
e.Cancel = true;
}
Also – Popups ade!
Viele Grüße,
Raffi
C# ContextMenuStrip öffnen, ohne es in der Taskbar anzuzeigen
NotifyIcon ContextMenu ohne Rechtsklick öffnen
Wieder mal ein Beispiel aus der Kategorie “Kleiner Code, großer Effekt”.
Hat man eine Tray-Anwendung und möchte, dass das ContextMenu zum Beispiel auch über einen Doppelklick aufgerufen werden kann, so wird man schmerzlich feststellen, dass ein Aufruf alá ContextMenuStrip.Show() im DoubleClick-Event des NotifyIcon leider auch ein Anzeigen des ContextMenuStrips in der Taskleiste mit sich bringt.
Um das ContextMenu über einen beliebigen beliebigen Click-Eventhandler eines NotifyIcon anzuzeigen, ohne dass es zusätzlich in der Taskbar angezeigt wird, ist folgender Code notwendig:
private void ShowContextMenu(NotifyIcon nI, MouseEventArgs e)
{
if (e.Button != MouseButtons.Right)
{
nI.GetType().InvokeMember(
"ShowContextMenu",
BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic,
null,
nI,
null
);
}
}
Am Beispiel eines Doppelklicks auf mein NotifyIcon TrayIcon sähe das dann wie folgt aus:
private void TrayIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
ShowContextMenu((NotifyIcon)sender, e);
}
Ich hoffe es hilft dem ein oder anderen von euch!
viele Grüße,
euer Raffi
Webmusix und Windows Ordner unter Vista tarnen
Eine kurze Zwischenmeldung was Webmusix angeht. Leider hat es nicht ganz geklappt und die vollständige Webmusix Version ist heute doch noch nicht zum Download erschienen. Sicherlich hätte ich Sie veröffentlichen können, aber bevor ich das Update freigebe war ich doch so frei noch einen Tag mehr zu warten um eine neue Funktion noch ausgiebig zu testen. Denn wenn es schon ein Update gibt, dann soll sich das auch lohnen. Für all jene, denen es nur um den Download geht hatte ich ja gestern schon an dieser Stelle angeboten, sich die reparierte .exe-Datei zu laden.
Ansonsten gibt’s dann halt erst morgen die neue Version mit neuem Feature. Lasst euch überraschen!
Außerdem habe ich vorhin noch mal einen schon etwas älteren Artikel überarbeitet, indem es um das verstecken tarnen von Windows-Ordnern ging. Als ich den Artikel letztes Jahr verfasst habe, hatte ich leider noch kein Vista und habe blindäugig eine Version geschrieben, die so in ihrer Form leider nur unter XP laufen konnte. Nun funktioniert das ganze auch unter Vista. Was Windows 7 betrifft kann ich leider noch nichts sagen, da ich bisher keine Testmöglichkeit hatte. Ich würde mich freuen, wenn jemand von euch, der bereits Windows 7 nutzt mir Bericht erstatten könnte.
Die aktualisierte Version des Artikel findet ihr hier: Windows Ordner tarnen (Update)
So und wer jetzt noch was entspannendes auf die Ohren braucht kann sich ja mal das hier zu Gemüte führen. >> Paolo Conte – L’Amore Che
Liebe Grüße,
Raffi
Klassen generieren mit der XSD.exe
Bis vor kurzer Zeit schrieb ich mir sämtlichen Code für den Zugriff auf XML Dateien mit Hilfe der vom .Net Framework bereitgestellten Klassen mühselig von Hand zusammen. Wie gesagt – bis vor kurzem.
Da ich zu Hause nur mit der kostenlosen Express Edition des Visual Studio arbeite lief mir die xsd.exe bisher nicht über den Weg. Dabei erspart sie einem bei dem Zugriff auf XML-Dateien eine Menge Arbeit. So lässt sich mittels dieser .exe im Handumdrehen eine Klasse aus einer beliebigen XML-Datei generieren, die den Zugriff auf eben diese um Welten erleichtert. Wie das funktioniert möchte ich euch im folgenden anhand des ARD Tagesschau Feeds zeigen. (Bilder zum Vergrößern einfach anklicken. )
1 – Feed speichern
Als erstes speichern wir den besagten Feed als XML Datei ab. Dazu öffnet ihr den Feed einfach in eurem Browser und klickt im Menü auf “Seite speichern unter”.
In manchen Browsern, wie zum Beispiel im Firefox, müsst ihr beim Speichern noch die Datei Endung auf .xml anpassen.
2a – Konsole öffnen (Visual Studio Express Edition)
Öffnet die Konsole
(Start >> Ausführen >> cmd)
und wechselt in den “bin”-Ordner
des Microsoft SDKs.
Normalerweise findet ihr
diesen an folgender Stelle:
“C:\Programme\Microsoft SDKs\Windows\{version}\bin”
2b – Konsole öffnen (Visual Studio Professional, Enterprise, etc. Edition)
Öffnet die Visual Studio Tools Konsole.
3 – XML-Datei –> XSD Schema –> Klasse
(Um elendig langen Pfadangaben aus dem Weg zu gehen habe ich die in Schritt 1 gespeicherte XML-Datei in einen hierfür angelegten Ordner “xml” auf Laufwerk C:\ abgelegt.)
Als nächstes generieren wir ein XSD Schema aus unserer XML-Datei. Hierfür geben wir folgenden Befehl in die Konsole ein.
xsd c:\xml\index.xml /outputdir:c:\xml
Um aus der soeben erstellen .xsd-Datei unsere gewünschte Klasse zu generieren ist nun nur noch folgender Aufruf nötig.
xsd c:\xml\index.xsd /outputdir:c:\xml /classes
Das war es eigentlich schon. Nun haben wir aus unserer XML-Datei ein XSD Schema und daraus eine Klasse für die Verwendung in C#.Net erstellt. Was genau man damit anstellen kann folgt im nächsten Schritt.
4 – Verwendung und Aufruf der generierten Klasse
Um euch zu demonstrieren, wie und an welcher Stelle man die generierte Klasse sinnvoll nutzen kann habe ich eine kleine Testapplikation erstellt.
Da wir uns in diesem Tutorial als Test-XML an dem RSS Feed der Tagesschau vergriffen haben, liegt es nahe einen kleinen Nachrichtenleser zu basteln.
Legt also ein neues Windows Forms Projekt an und stattet eurer Main Form mit den folgenden vier Controls aus:
- ListBox
- Label
- RichTextBox
- Linklabel
Im nächsten Schritt binden wir die generierte Klasse ein. Hierzu reicht ein Rechtsklick im Projektexplorer auf unserer Projekt und dann ein Linksklick auf “vorhandenes Element hinzufügen”. Nun nur noch schnell die erstelle Klasse auswählen und mit Ok bestätigen.
Jetzt binden wir den Namespace System.Net ein, definieren 2 Variablen, einen String namens Link, sowie ein rss object unserer generierten Klasse und legen das Load Event unseres Main Forms, das Click Event der ListBox und das LinkClicked Event des LinkLabels an. Der Code eures Main Forms sollte nun wie folgt aussehen.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
namespace XsdTutorial
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private rss rssbase;
private string link;
private void Form1_Load(object sender, EventArgs e)
{
}
private void listBoxPosts_Click(object sender, EventArgs e)
{
}
private void linkLabelPost_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
}
}
}
Im nächsten Schritt befüllen wir die Events. Die Erklärungen hierzu entnehmt ihr bitte den Kommentaren im Code. Sollten sich Fragen auftun, dann schreibt bitte einen Kommentar!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
namespace XsdTutorial
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private rss rssbase;
private string link;
private void Form1_Load(object sender, EventArgs e)
{
//Erstelle HttpWebRequest für den Taggeschau Feed
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.tagesschau.de/xml/tagesschau-meldungen/");
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
//Lege Kodierung fest, damit Sonderzeichen richtig angezeigt werden.
//Der passende Encoding String ist dem Header des Feeds zu entnehmen.
//(Im Browser: Rechtsklick >> Quelltext anzeigen)
Encoding encode = System.Text.Encoding.GetEncoding("ISO-8859-1");
//Öffne einen Streamreader mit dem Response Stream, der den Feed enthält
//und lege Kodierung fest.
System.IO.StreamReader str = new System.IO.StreamReader(res.GetResponseStream(), encode);
//Initialisiere einen XMLSerializer mit dem Schema (typeof(rss)) unseres Feeds.
System.Xml.Serialization.XmlSerializer xSerializer = new System.Xml.Serialization.XmlSerializer(typeof(rss));
//Deserialisiere unsere Feed nach dem Schema.
rssbase = (rss)xSerializer.Deserialize(str);
//Gibt an ob es sich um das erste Objekt in der folgenden Schleife handelt.
bool first = true;
//Durchlaufe alle Items. Jedes Item enthält die Elemente
//(Titel, Beschreibung, etc.) einer Nachricht des Feeds
foreach (rssChannelItem item in rssbase.channel[0].item)
{
if (first)
{
//Weise die Daten des ersten Items unseren
//Controls zu.
first = false;
labelTitel.Text = item.title;
richTextBoxMessage.Text = item.description;
link = item.link;
}
//Füge der ListBox einen Eintrag mit dem Titel
//der aktuellen Nachricht hinzu.
listBoxPosts.Items.Add(item.title);
}
str.Close();
}
private void listBoxPosts_Click(object sender, EventArgs e)
{
//Durchlaufe alle Items/Nachrichten des Feeds
foreach (rssChannelItem item in rssbase.channel[0].item)
{
if (item.title == listBoxPosts.SelectedItem.ToString())
{
//Entspricht die aktuelle Nachricht der in der Listbox
//angeklickten, so weise den Controls die entsprechenden
//Werte zu.
labelTitel.Text = item.title;
richTextBoxMessage.Text = item.description;
link = item.link;
}
}
}
private void linkLabelPost_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
//Rufe den angeklickten Link im Standard Browser auf
System.Diagnostics.Process.Start(link);
}
}
}
An dieser Stelle sind wir eigentlich schon fertig. Wenn nichts schief gelaufen ist, dann sollte sich euch nach einem Druck auf die F5-Taste ein ähnlicher Anblick, wie auf dem Bild, bieten.
Durch klicken auf die Überschriften in der ListBox könnt ihr euch eine Vorschau der jeweiligen Nachricht anzeigen lassen. Mit einem Klick auf das Linklabel – ich habe ihm den Text “weiterlesen…” gegeben – gelangt ihr zur Originalversion der Nachricht.
Soweit alles klar? Kamt ihr zurecht? Hinterlasst mir einen Kommentar!
Liebe Grüße,
Raffi
p.s.: Leider weist die xsd.exe einen kleinen Bug auf, was verschachtelte Elemente beziehungsweise JaggedArrays angeht. Solltet ihr bei euren Versuchen darüber stolpern, schaut die Tage noch mal rein. Ein kleines Workaround diesbezüglich wird folgen!
Vor gut 10 Monaten hatte ich schon einmal über iconarchive.com berichtet, wo es mittlerweile über 26.000 Icons im .ico und .png Format gibt.
Viele von ihnen stehen kostenlos zur Nutzung in unkommerzieller Software, oder im Desktopbereich zur Verfügung.
Für diejenigen, die nun jedoch anderes mit den Icons vorhaben, sei es die Verwendung auf gewinnbringenden Webseiten, oder in kommerzieller Software, ist die Auswahl stark eingeschränkt.
Wer trotzdem nicht zwingend Geld ausgeben möchte (der entsprechende Grafiker freut sich sicherlich über eine Spende), sollte sich mal die beiden folgenden Icon Sets anschauen, die unter der LGPL (Lesser General Public License) veröffentlicht wurden.
Zum einen wäre da das Glaze Icon Set…
…und zum anderen das Tulliana2 Icon Set.
Kennt ihr auch schicke Icon Sets die unter der LGPL zur Verfügung stehen, oder seid ihr selbst Icon Designer? Dann schreibt einen Kommentar!
Liebe Grüße,
Raffi
Hallo!

Kategorien
- Der tägliche Senf… (77)
- Informatik (81)
- C# & .net Framework (15)
- Cheat Sheets (4)
- HTML, PHP, etc. (5)
- Neuigkeiten (27)
- Software-Projekte (34)
- Tipps & Tricks (29)
- Musik (4)
- Downloads (3)
- Hörbar – Raffis Musiktipp (4)
- Videoclips (4)
- Schule (11)
Kalendar
| M | D | M | D | F | S | S |
|---|---|---|---|---|---|---|
| « Feb | ||||||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 | ||||
Counter
| Besucherstatistik | |
| Besucher gesamt: | 113.294 |
| Besucher heute: | 129 |
| Besucher gestern: | 320 |
| Max. Besucher pro Tag: | 629 |
| gerade online: | 1 |
| max. online: | 89 |
| Seitenaufrufe gesamt: | 285.518 |
| Seitenaufrufe diese Seite: | 877 |
| Counterstart: | 13.10.2008 |
Meta
Am meisten kommentiert
Neue Artikel
- Update: Webmusix 1.3.6
- C# – Webbrowser Control: Popups blocken
- Generierung von FullFeeds = Contentklau?
- Cebit 2010 – ein kurzer Rückblick
- Umzug abgeschlossen – neuer Webspace, neues Glück?
- Hörbar – Raffis Musiktipp #4
- Da tut sich was…
- Update: Webmusix 1.3.5
- MultiVZ Tools – der Untergang Teil 2
- MultiVZ Tools tot? Abuse von VZnet bekommen…
Neue Kommentare
- CONeal: Hey Raffi, erstmal vielen Dank für das Tutorial. Es hat mich auf jeden Fall schon mal weiter gebracht. Ich...
- Micha: Na dann wünsche ich euch mal viel Erfolg! Es grüßt, der Micha!
- Raffi: Youtube Pipes ist doch aber nur für Mashups?! (Zumindest sehe ich keine Möglichkeit Fullfeeds aus ShortFeeds...
- caschy: Aber ja, mach et und mail mich an, wenn es soweit ist
- caschy: Yahoo Pipes?
net-blog.net © 2008-2010



