Blog Home  Home RSS 2.0 Atom 1.0 CDF  
.NET (Compact) Framework - Controls
Haggy's technischer BLog
 
 Sunday, June 08, 2008
Der Type Explorer hat nun , wie angekündigt, inkl. SourceCode sein Zuhause bei Codeplex gefunden.

s. http://www.codeplex.com/TypeExplorer

Geplanst sind als nächstes u.a. Integration in den Reflector sowie eine WPF GUI.


Feature Wünsche werden gerne entgegen genommen
6/8/2008 6:39:07 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | BE Components | C# | Controls | Free Tools | Releases | Thir Party Tools | Tutorials | WinForm | WPF  | 
 Friday, April 18, 2008
Der Type tree näher sich einer ersten Beta version und schon hat man Feature wünsche an mich heran getragen ;)

- Suchen von Typen nach ihrem Name (!= FullName)
- Merken der letzten Einstellungen
- Filter über Namespaces
-...

Werde ich die Tage auch noch implementieren und dann gibts die erste Beta. Wer interesse hat kann sich gern bei mir via ICQ oder Mail melden.

Hier noch einen kurzen Screencast

BE Type Tree Demo.wmv (1,12 MB)
4/18/2008 12:19:11 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | BE Components | Controls | Free Tools | Thir Party Tools  | 
 Tuesday, December 04, 2007

Da ich letztens wieder einmal gefragt wurde „Wie bekomme ich eigentlich meine eigenen Controls in ein Toolstrip“ hier die Lösung.
Eigentlich ist das ganze dank der Möglichkeiten von .NET 2.0 sehr einfach. Das Schlüsselwort lautet ToolStripControlHost.

Dieses Element verpackt das eigene Control und tut alles notwendige andere Controls im Toolstripdarstellen zu können.
Hier das CodeBeispiel welches ein beliebiges UserControl in den ToolStrip bringt:

            //Erstellen eines Beliebigen Controls

            UserControl myCustomCtrl = new UserControl();

            //verpacken im Host für den ToolStrip

            ToolStripControlHost curHost = new ToolStripControlHost(myCustomCtrl);

            //Und den Host mit dem Control dem Toolstrip übergeben

            this.toolStrip1.Items.Add(curHost);

 

Und das wars auch schon. Feedback welcome!

12/4/2007 8:58:23 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | C# | Controls | Tutorials  | 
 Saturday, October 27, 2007
Der BE MonthCalendar unterstützt nun sämtlcihe BE Styling Optionen für alle UI Elemente.
So kann man den einzelnen Tagen, selektierten Tagen oder z.bsp. dem "Heute"  z.bsp. Farbverläufe geben.
s.  Screenshot




10/27/2007 7:23:55 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | BE Components | Controls | Thir Party Tools | Updates & SP  | 
 Sunday, September 30, 2007

Mit dem ToolboxBitmap Attribut kann man  für eigene Controls Icons festlegen, die dann später in der Visual Studio ToolBox angezeigt werden. Das sieht ungefähr so aus:

[ToolboxBitmap(typeof(TextBox))]

Dies hätte zur Folge dass für das Control in dem dieses Attribut so definiert wird, das Icon  einer TextBox immer angezeigt wird. Man kann z.bsp. auch alternativden Pfad zu einen Image angeben (s. dazu die MSDN Doku: http://msdn.microsoft.com/library/deu/default.asp?url=/library/deu/vbcon/html/vbtskProvidingToolboxBitmapForYourControl.asp)

 

Nun brauche ich aber in einem TreeViewin einer Anwendung den umgekehrten Weg. Das bedeutet ich möchte eine Methode implementieren, welche mir ein Image zurückliefert, welches in der ToolBox angezeigt werden würde.

Ein Ansatz wäre die CustomAttributes nach ToolBoxBitmap zu durchsuchen. Allerdings werden dann bei .NET BaseClasses nicht das Attribut ToolBoxBitmap zurückgeliefert, sondern nur die nachfolgenden Attribute:

 

System.Runtime.InteropServices.ClassInterfaceAttribute

System.Runtime.InteropServices.ComVisibleAttribute

System.ComponentModel.DesignerAttribute

System.Windows.Forms.SRDescriptionAttribute

System.ComponentModel.DefaultEventAttribute

System.ComponentModel.DesignerAttribute

System.ComponentModel.DefaultBindingPropertyAttribute

System.ComponentModel.DesignerAttribute

System.Windows.Forms,Allow

System.ComponentModel.Design.Serialization.DesignerSerializerAttribute

System.ComponentModel.DefaultPropertyAttribute

System.ComponentModel.DesignerCategoryAttribute

 

Glücklicherweise gibt es aber einen einfachen Weg an das Image, das für die ToolBox vorbestimmt ist ranzubekommen. Der Weg führt über den Reflector. Dort Habe ich mir die Konstruktoren der ToolBoxBitmapAttribute Klasse mal angesehen

public ToolboxBitmapAttribute(Type t) : this(GetImageFromResource(t, null, false), GetImageFromResource(t, null, true))

{

}

 

Dort sieht man dass GetImageFromResource aufgerufen wird. Die definition davon sieht so aus:

 

public static Image GetImageFromResource(Type t, string imageName, bool large)

{

    Image image = null;

    try

    {

        string fullName = imageName;

        string bitmapname = null;

        string str3 = null;

        string str4 = null;

        if (fullName == null)

        {

            fullName = t.FullName;

            int num = fullName.LastIndexOf('.');

            if (num != -1)

            {

                fullName = fullName.Substring(num + 1);

            }

            bitmapname = fullName + ".ico";

            str3 = fullName + ".bmp";

        }

        else if (string.Compare(Path.GetExtension(imageName), ".ico", true, CultureInfo.CurrentCulture) == 0)

        {

            bitmapname = fullName;

        }

        else if (string.Compare(Path.GetExtension(imageName), ".bmp", true, CultureInfo.CurrentCulture) == 0)

        {

            str3 = fullName;

        }

        else

        {

            str4 = fullName;

            str3 = fullName + ".bmp";

            bitmapname = fullName + ".ico";

        }

        image = GetBitmapFromResource(t, str4, large);

        if (image == null)

        {

            image = GetBitmapFromResource(t, str3, large);

        }

        if (image == null)

        {

            image = GetIconFromResource(t, bitmapname, large);

        }

    }

    catch (Exception)

    {

    }

    return image;

}

 


Mit diesem Wissen ist es nun einfach, dass passende image abzurufen.

 

Die CodeZeile um an ein ToolBox Image eines Controls (z.bsp. das der Textbox) ranzukommen sieht also so aus:

Kleines Image:

    Image curIMG = ToolboxBitmapAttribute.GetImageFromResource(typeof(TextBox),null,false )

 

Großes Image

    Image curIMG = ToolboxBitmapAttribute.GetImageFromResource(typeof(TextBox),null,true )

 


 

 Eine Anmerkung noch. Da das ganze über den Type einer TextBox läuft, ist diese Methode in schleifen (Z.bsp. für das dynamische Abarbeiten von Controls) nicht sehr schnell, deswegen würde es sich anbieten die Images zu den Types zu Cachen, damit man schnell  auf den Type und die dazugehörigen Images kommen kann.

Bitte um Feedback ! 

9/30/2007 7:29:09 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | C# | Controls | GUI | Tutorials  | 
 Monday, August 06, 2007
Es hat sich wieder einiges am Gantt Control getan.

Der Schwerpunkt der Entwicklung lag auf dem Zugänglichen machen interner Events. So kann man z.bsp. Eingreifen wenn eine Bar oder ein Item für das Zeichnen vorgeladen werden oder man kann reagieren wenn sich der sichtbare Bereich des Gantts ändert.

 So ist es möglich Daten on Demand nachzuladen.

Der andere Schwerpunkt lag im Verbessern der Useability, so kann man nun auch bei einzelnen Zeilen Hintergrundfarbe etc. bestimmen.

Hier mal ein Screenshot mit Farbigen Hintergrund Zeile



Weitehrin gibt es inzwischen auch definierbare Tooltips je bar.

Ein nettes kleines Feature, dass man im mom leider nicht auf dem Screenshot sieht sind kleine hilfslinien die in der Zeitleiste angezeigt werden sobald man eine Bar via Mouse & Drag verschiebt oder Sized ,so dass man immer sieht wie weit die Bar ausgedeht ist.

Ansonsten habe ich noch 2 Controls in das GanttChart unten reingepackt, die es ermöglcihen auf der Zeitachse zu zoomen. Sprich den Abstand zwischen den Stunden  btw. Tage einzustellen.

In meinem nächsten Posting folgen dann Beispielcodes wie das Gantt Control mit Daten beladen wird.
8/6/2007 4:55:52 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | BE Gantt | C# | Controls | GUI | Releases | System.Drawing | Thir Party Tools | Updates & SP | WinForm  | 
 Tuesday, July 31, 2007
Hier folgt ein kurzes Video das zeigt wie man Bars im GanttControl anlegen und verschieben
bzw. sizen kann.

Aktuell fehlen noch einige einstellungen für eine gute Optik, wird aber in den nächsten Versionen folgen.

Feedback welcome!

gantt.wmv (128.7 KB)
7/31/2007 6:28:33 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | BE Components | BE Gantt | C# | Controls | System.Drawing | Thir Party Tools  | 
 Monday, July 30, 2007
Momentan forciere ich etwas das Gantt Projekt, deswegen bin heute mal wieder einen ganzen Schritt vorwärts gekommen.

Es gibt nun auf der linken Seite des Controls eine Ansicht die der Identifizierung einer Zeile dient (s. Screenshot).
Auch können Bars nun via intuitivem Drag & Drop verschoben werden. Als nächstes Folgt noch das sizen und neu anlegen via Drag & Drop.

Auch habe ich weitere Optimierungen in das Ganttchart eingebaut, welche die Performance noch weiter verbessern konnte.

Als nächste Punkte habe ich mir auch noch das einstellen der Datumsanzeige stehen. Momentan wird immer das ShortDate passend zur aktuellen Culture verwendet, hier wird der User demnächst abweichende Masken definieren können.

Auch werde ich nach aussen weitere einfache Möglichkeiten geben, das Design beeinflussen zu können.

Hier nun der Screenshot

7/30/2007 9:53:07 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | BE Components | BE Gantt | Controls | GUI | Releases | System.Drawing | Thir Party Tools | Updates & SP | WinForm  | 
 Monday, July 02, 2007
Auf Wunsch von ein paar .NET Interessierten FoxPro Entwicklern habe ich das WaitWindow so erweitert, dass man es auch auf dem Desktop anzeigen lassen kann.

Zum Anzeigen des WaitWindows auf dem Screen reicht es einfach das ParentControl auf null und eine Position über OffScreenPosition zu setzen .

Hier der SourceCode wie das anzeigen auf dem Screen funktioniert:

//Wait Window auf dem Screen …

this.waitWindow1.ParentControl = null;

 

// … an der Position 10,10 anzeigen

this.waitWindow1.OffScreenPosition = new Point(10, 10);

 

//Zeit die das Waitwindow maximal angezeigt werden darf

this.waitWindow1.Time2Show = TimeSpan.MaxValue;

 

//Einstellen ob das Fenster bei mousebewegungen üebr den Parent verschwinden soll

this.waitWindow1.ClearOnMouseMove = false;

 

//.........................

//Wait window anzeigen

//.........................

this.waitWindow1.ShowWindow("Wait Window Text mit Icon" + Environment.NewLine + "2. Zeile" + Environment.NewLine + "3.Zeile");



BEWaitClass1.zip (28,16 KB)
7/2/2007 8:14:16 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | C# | Controls | System.Drawing | WinForm  | 
 Thursday, June 21, 2007
n letzter Zeit beschäftige ich mich damit, Desginunterstützung für Contorls zu erstellen.
Hierbei gibts z.bsp. die neuen smartTags
s.



Um diese soll es mit aber zunächst mal gar nicht direkt gehen.
Sondern viel mehr um ein Problem dass mich schon immer begleitete aber nun bei den smartTags an Bedeutung gewann.
Fehler im Designer!

Was tun wenn Fehler im Designer auftreten ? Man ist ja in keiner Runtime Umgebung und kann somit ja keine Brakepointssetzen ! oder doch ?

Die Lösung ist einfacher als erwartet. Dazu habe ich über eine NewsGroup einen sehr interessanten Link von Frank Dzaebel bekommen s. u.
Die Lösung um im Designer Debuggen zu können ist folgende:
Man setzt in den Projekteigenschaften des ControlLibrary Projektes unter Debuggen ein extres programm zum Debuggen und zwar Visualstudio selbst.


Der rest ist einfach ,man setzt nun das ControlLibrary Projekt als Startprojekt. Zur Controle damit man nachher sieht dass der Debugger etwas tut setzen wir uns in einen eigenen Designer einen Breakpoint.

Führt man nun das Projekt auf öffnet isch eine neue VisualStudio instanz. Diese hat noch kein Projekt geöffnet und tut nichts. Davon sollte man sich einfach nicht irritieren lassen und einfach das ContorlLibrary Projekt in dieser Instanz wieder öffnen. Wenn man sich nun den Designer für das Control anzeigen lässt springt der Debugger an!



Hier der Link zur Microsoft seite mit der Aneitung zum Debuggen im Designer http://msdn2.microsoft.com/de-de/library/5ytx0z24(VS.80).aspx
6/21/2007 7:56:56 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [1]    | .NET Allgemein | BLogs | Bugs | C# | Controls | GUI | System.Drawing  | 
 Monday, May 28, 2007
Inzwischen gibt es einige brauchbare samples, bei die Möglichkeiten die sich bieten sinnvoll eingesetzt werden.

WPF birgt ja von Natur aus die Gefahr in sich solche Anwendungen zu produzieren die an die ersten privaten Websites im Internet erinnern , Alles blinkt und leuchtet ,..
Richtig genutzt kann die WPF aber dazu beitragen die Useability von Anwendungen auf ein ganz neues Niveau zu bringen.

Hier kann ich nur diese Seite: http://www.vertigo.com/lab.aspx empfehlen mit einigen Beispielen zur WPF.


Insbesonder das FamilyShow Sample Project zeigt wie man mit etwas WPF eine Anwendung gleich viel Ansprechender aussehen lassen kann. Family Show stellt Beziehungen zwischen personen mittels Daten im GEDCOM Format (S. Wikipedia hier )  dar.

Das ganze sieht dann so aus:

 In dem Control kann man u.a.Zoomen und neue Bezugspersonen festlegen, Images je Person anzeigen lassen , Art der Beziehung (Mutter,Bruder,....) definieren usw. ...

Meiner Meinung nach eine Anwendung die zu einigen weiteren Anwendungsmöglichkeiten inspiriert.



Die Beispiele die bei Expression Blend dabei sind zeigen auch ein paar gute Ideen für eine intuitivere GUI wie die aufklappbaren Color Picker (s.u.)





Weitere WPF Samples gibts unter : http://windowsclient.net/downloads/folders/wpfsamples/default.aspx







5/28/2007 8:00:48 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | .NET Framework 3.0 | C# | Controls | Thir Party Tools | WPF  | 
 Monday, May 21, 2007

Momentan experimentiere ich mit dem System.Drawing bereich des .NET Frameworks.

Als kleines Ergebnis meiner Tests ist ein kleiner selbst gezeichneter Kalender entstanden. Dieser ist vorallem in der Lage KW nach er Iso Norm zu berechnen s. Kommentare im Source

Der Kalender sieht so aus:


Einige Dinge sind auch schon einstellbar. Wie z.bsp. Hintergrund farben, Farbverlauf, CalendarWeekRule,Culture,.....

Noch offen sind Events wie "DateClicked" "HitTest" etc... Je nach Zeit und Laune folgen diese dann demnächst

Verwendung wie immer auf eigene Gefahr!



CalendarDrop.zip (251,57 KB)
5/21/2007 12:02:13 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [2]    | .NET Allgemein | C# | Controls | CultureInfo / Globalization | System.Drawing | Thir Party Tools | Tutorials  | 
 Monday, May 07, 2007
Notgedrungen muss ich mich immer Wieder mit dem berechnen der Kalenderwochen bei diversen Controls auseinander setzen.
Z.bsp. habe ich schon controls gesehen die es schaffen auf eine 55. KW zu kommen. Ganz zu schweigen dass das Berechnen der Kalenderweochen nach deutschen System und der DIN 1355 selten konsequent umgesetzt ist.

Einen einstieg zu Kalenderwochen im Allgemeinen findet man bei Wikipedia s. http://de.wikipedia.org/wiki/Kalenderwoche#Kalenderwoche

Das deutsche Kalender System definiert sich dadurch dass der erste Tag der Woche der Montag ist und die erste KW mit der Woche beginnt, bei der denen mindestens VierTage im neuen Jahr liegen.


Im .NET Framework wird dies durch :

CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek = DayOfWeek.Monday;
CultureInfo.CurrentCulture.DateTimeFormat.CalendarWeekRule = CalendarWeekRule.FirstFourDayWeek;

definiert. Man sollte erwarten dass wenn man nun GetWeekOfYear(...) aufruft dass die errechneten Kalenderwochen immmer passen. Leider ist das nicht der Fall denn der 29. Dezember 2003 wäre nach der Norm in der 1.KW 2004 und nicht in der 53.KW 2003. Leider ist der Rückgabewert der Funktion 53.....

Dieses Verhalten ist nicht unbedingtein Bug aber auch nicht direkt zu erwarten s. hierzu: http://www.mycsharp.de/wbb2/thread.php?postid=196701#post196701
Abbhilfe schafft hier ein .NET Snippet s. http://dotnet-snippets.de/dns/kalenderwoche-berechnen-SID260.aspx

Ich werde die Tage ein Control Online stellen, welches dann wahlweise mit der .NET Methode oder aber diesen schnippet arbeitet.


5/7/2007 6:55:55 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [1]    | .NET Allgemein | BLogs | C# | Controls | GUI | Thir Party Tools | Tutorials | WinForm | CultureInfo / Globalization  | 
 Thursday, March 22, 2007
Hier nun der Download für das WaitWindow.

Viel Spaß damit und wie immer gilt: Einsatz und Verwenden ausschließlich auf eigene Gefahr

BEWaitClass.zip (5,37 KB)
3/22/2007 10:23:55 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [4]    | .NET Allgemein | Controls | Releases | Thir Party Tools | Tutorials | VFP  | 
 Tuesday, March 20, 2007
Soeben habe ich ein kleines Control etwickelt, welches Textausgaben auf einem Control (Z.bsp. dem Hauptfenster) ermöglicht ohne dabei auf eine Interaktion des User zu warten.
Es blendet sich wahlweise nach einer gewissen Zeit und / oder durch eine Mousebewegung wieder aus.

Die FoxPro Programmierer kennen das als eigentlich systemeigenes Tool "WaitWndow". Man kann es gut für kurze / einfache Statusmessages an den User verwenden.

Natürlich habe ich es mir nicht nehmen lassen und habe das ganze auch etwas erweitert. So kann man dem Control einen Farbverlauf geben , also auch dem Text ein Icon vorran stellen.

Natürlich sind die Farben ,Farbverlauf,Schriftarten,  etc,... frei einstellbar :)
Werde es dann morgen hier noch zum Kostenlosen Download stellen.

Würde mich über Feedback freuen!

Hier mal ein Screenshot:



Hier im Vergleich das "alte" VFP Wait Window

Hier der Downloadlink
3/20/2007 11:21:03 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [1]    | .NET Allgemein | Controls | GUI | Releases | Tutorials  | 
 Tuesday, February 06, 2007
Das Forum zum .NET (Compact) Framework ist nun unter http://smartdevelopment.de/forums/default.aspx online.

Viel Spaß beim Austausch mit gleichgesinnnten! ;-)

2/6/2007 1:28:36 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | BLogs | Compact Framework | Controls | OpenNETCF | Tutorials  | 
 Wednesday, January 24, 2007
In einer Anwendung zeige ich Dateinamen in einem Grid an. Nun würde ich gerne je nach dem um welchen Dateityp (Fileextension) es sich handelt, das in Windows dazu hinterlegt icon anzeigen.

Das besondere Problem : Die Datei ist nicht physikalisch vorhanden.

Die Lösung sieht wie folgt aus:

        /// <summary>
        /// List der bereits gelesenen icons
        /// </summary>
       static  Dictionary<string, Icon> iconList = new Dictionary<string, Icon>();

         /// <summary>
        /// Liefert ein icon zurück das dem bild entspricht, dass windows einer DAtei zuordnen würde
        /// </summary>
        /// <param name="extension">Dateiendung</param>
        /// <returns>Icon</returns>
        public static Icon GetIconFromExtension(string extension)
        {

            Icon fileIcon = null;

            if (!string.IsNullOrEmpty(extension) && extension.Trim() != "")
            {

                //Prüfen ob wir schonmal das icon ermittelt hatten

                if (iconList.ContainsKey(extension.Trim().ToUpper()))
               
{

                    fileIcon = iconList[extension.Trim().ToUpper()];
                }
               
else            
              
{

                    //Wir erzeugen uns eine temporäre Datei um darüber das Icon ermitteln zu können,
                    //da Icon.ExtractAssociatedIcon() einen Pfad zu einer existierenden Datei benötigt
                    string tempfile = Path.Combine(Path.GetTempPath(), "_temp" + Guid.NewGuid().ToString() + extension.Trim());

                    File.WriteAllText(tempfile, "dummy");

 

                    //Icon ermitteln und dnach die tempdatei löschen
                    fileIcon = System.Drawing.Icon.ExtractAssociatedIcon(tempfile);
                    System.IO.File.Delete(tempfile);

                     //Das Icon "merken" wir uns damit der aufwand zum ermitteln der icons klein bleibt
                    iconList.Add(extension.Trim().ToUpper(), fileIcon);
               }
            }

            //Rückgabe des ermittelten icons
            return fileIcon;
        }



Der Aufruf um z.Bsp. das Image in einer Picturebox anzuzeigen sieht dann so aus:

myPictureBox.Image = GetIconFromExtension(".gif").ToBitmap();


1/24/2007 11:57:01 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [2]    | .NET Allgemein | Controls | GUI | Tutorials  | 
 Wednesday, January 03, 2007
In meinen Anwendungen nutzt ich häufig third Party Control wie Controls von Infragistics, usw...
Die Third Party Controls Subclasse ich eigentlcih immer, um möglichst viel einfluss auf deren Verhalten nehmen zu können. Weiterhin liegen auf meinen Forms praktisch nur Container (User Defined Controls).

Nun ,insbeonsdere wenn Toolstrips in Spiel kommen, passiert es , dass Forms sich nur noch dadurch aktivieren lassen, indem man auf Ihre Titelleiste clickt. Einen Click sonst wo auf die Form gibt der Form keinen Focus.

Witziger weise funktioniere naber die Controls. Also ich kann z.bsp. TreeNodes expanden, Buttons clicken usw....  Aber die Form bekommt nicht den Focus und sie kommt nicht nach vorne.

Eine schnelle idee war einfach der Form zu sagen -> Wenn Click dann komm nach vorne.
Funktioniert ja aber nicht weil ich nicht weiß ob und wenn ja welche controls auf der Form liegen. Diesesn Code in sämtliche controls zu hängen ist meinem Empfinden nach mehr als grausam, also suchte ich nach einem passenden event / Methode und bin dabei auf die virtuelle WndProc Methode gestoßen .

Dort kommen nachrichten des Betriebssystems an die form an. Nun habe ich diese Methode überschrieben und festgestellt dass immer wenn ein Form aktiviert werden sollte immer die gleichen Messages feuern.

Nun prüfe ich einfach die eingehende Message und wenn es sich um eine Aktivierung handelt hole ich die Form manuell nach vorne (Source Code s. weiter unten)

Interessant ist auch, dass scih andere dinge ebenfalls damit realisieren lassen. Z.bsp. aktionen wenn man über die Titelleiste der Form fährt etc...

Hier ein Beispielhafter (noch unausgearbetiet Source Code der Forms nach vorne holt)
Insbesondere bei der Message muss ich nochmal schauen, dass ich die wirklcih passende message (glaueb 33 passt nicht 100%) abfrage


protected override void WndProc(ref Message m)

{

    //Erstmal das Standardverhalten ausführen lassen

    base.WndProc(ref m);

    //Eingehende Message Prüfen

    switch (m.Msg)

   {

          //Form soll nach vorne geholt werden

   case 33:

          // Focus setzen und sicherheitshalebr vorholen

           this.Focus();

           this.BringToFront();

           break;

    default:

           //Sonstige Messages

           break;

 

    }

}



Würde mich sehr freuen wenn ihr mir Feedback gibt ob ihr auch solche Probleme kennt und wie eure Lösungen waren.
1/3/2007 8:12:45 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [2]    | .NET Allgemein | Controls | GUI | Thir Party Tools  | 
 Tuesday, November 21, 2006
In einem Projekt habe ich verschiedene Contorls oft gesubclassed um eine möglichst flexible Struktur zu haben.

Z.bsp. die Form. Die erste Ableitung von System.Windows.Form liegt in einer BasisKlassen.dll
Diese Leite ich in ein Projektbasisklassen DLL ab und diese dann letztendlich in meine konkrete Form die ich später anzeige.

Nun bekomme ich im Designer ab und zu einen BUG. Und zwar immer dann wenn ich das projekt neuerstelle.

Die Fehlermeldungen stehen aufgrund ihrer Größe am Ende.

Es gibt von Microsoft dazu einen BugFix s.:http://support.microsoft.com/default.aspx/kb/912019/en-us?spid=3041
Ausserdemhaben folgende Schritte bei mir zu verbesserungen geführt

  1. Wenn möglich Referenzen als Projekt referenzen und nicht referenzen zu einer DLL einfügen
  2. Bei meheren Projekte in einer Mappe schauen, dass alle Projekte auf die gleiche physikalische DLL gehen
  3. Projekte einen starken Namen geben (Signierung)
  4. Suchpfade auf die DLLs im Projekt einfügen.
  5. Manchmal machen bei mir auch Namespaces probleme z.bsp. führten Forms im Namespace Baseclasses.Forms häufiger zu oben gennanten Fehler
  6. Visual Studio neustarten

Würde mich freuen Feedback zu bekommen ob noch mehr Leute diese Probleme haben und ob bzw. wie Ihr diese gelöst habt.

Fehlermeldung: Beim Laden des Designers sind die nachfolgend aufgeführten Fehler aufgetreten. Einige können durch Neuerstellen des Projekts behoben werden, andere erfordern möglicherweise Änderungen am Code.

Mindestens ein Typ in der Assembly kann nicht geladen werden. Rufen Sie die LoaderExceptions-Eigenschaft ab, wenn Sie weitere Informationen benötigen.
Ausblenden

bei System.Reflection.Module.GetTypesInternal(StackCrawlMark& stackMark)
bei System.Reflection.Assembly.GetTypes()
bei Microsoft.VisualStudio.Shell.Design.AssemblyObsoleteEventArgs..ctor(Assembly assembly)
bei Microsoft.VisualStudio.Design.VSDynamicTypeService.ReloadAssemblyIfChanged(String codeBase)
bei Microsoft.VisualStudio.Design.VSDynamicTypeService.CreateDynamicAssembly(String codeBase)
bei Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.get_Assembly()
bei Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.Search(String fullName, String typeName, Boolean ignoreTypeCase, Assembly& assembly, String description)
bei Microsoft.VisualStudio.Design.VSTypeResolutionService.SearchProjectEntries(AssemblyName assemblyName, String typeName, Boolean ignoreTypeCase, Assembly& assembly)
bei Microsoft.VisualStudio.Design.VSTypeResolutionService.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, ReferenceType refType)
bei Microsoft.VisualStudio.Design.Serialization.CodeDom.AggregateTypeResolutionService.GetType(String name, Boolean throwOnError, Boolean ignoreCase)
bei Microsoft.VisualStudio.Design.Serialization.CodeDom.AggregateTypeResolutionService.GetType(String name)
bei System.ComponentModel.Design.DesignerHost.System.ComponentModel.Design.IDesignerHost.GetType(String typeName)
bei System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager)
bei System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
bei Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
bei Microsoft.VisualStudio.Design

im englischen Pendant:
One or more errors encountered while loading the designer. The errors are listed below. Some errors can be fixed by rebuilding your project, while others may require code changes. TypeLoad failure. Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

at System.Reflection.Module.GetTypesInternal(StackCrawlMark& stackMark)
at System.Reflection.Assembly.GetTypes()
at Microsoft.VisualStudio.Shell.Design.AssemblyObsoleteEventArgs..ctor(Assembly assembly)
at Microsoft.VisualStudio.Design.VSDynamicTypeService.ReloadAssemblyIfChanged(String codeBase)
at Microsoft.VisualStudio.Design.VSDynamicTypeService.CreateDynamicAssembly(String codeBase)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.get_Assembly()
at Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.Search(String fullName, String typeName, Boolean ignoreTypeCase, Assembly& assembly, String description)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.SearchProjectEntries(AssemblyName assemblyName, String typeName, Boolean ignoreTypeCase, Assembly& assembly)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, ReferenceType refType)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.AggregateTypeResolutionService.GetType(String name, Boolean throwOnError, Boolean ignoreCase)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.AggregateTypeResolutionService.GetType(String name, Boolean throwOnError)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.GetType(ITypeResolutionService trs, String name, Dictionary`2 names)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.FillStatementTable(IDesignerSerializationManager manager, IDictionary table, Dictionary`2 names, CodeStatementCollection statements, String className)
at System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration)
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
at Microsoft.VisualStudio.Des

11/21/2006 8:50:46 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [2]    | .NET Allgemein | Controls | Updates & SP  | 
 Wednesday, November 15, 2006
Jeder Entwickler steht beim Entwickeln einer PDA Software früher oder später vor der Frage , welche Datenbank er verwenden möchte.

Hat man nur kleine Prozessdaten so reicht XML aus. Fallen aber größere Datenmengen an, welche z.bsp. auch über eine Synchronisation kommen wird die Sache schon etwas schwieriger, insbesondere da XML auf PocketPC's und Smartphones nichts wirklich schnell ist.

Eine sehr gute integrierte Möglichkeit stellt der SQL Mobile 5.0 dar, welcher sogar über Replication services ein Synchronisationsmodul hat.Allerdings ist dieser nur solange kostenlos wie keine "echten" SQL Server im Spiel sind. S. :
http://www.microsoft.com/sql/editions/sqlmobile/howtobuy.mspx

Eine alternative insbesondere für OpenSource projekte könnte db40 sein. Von dieser datenbank gibts viele ableger u.a. auch für das Compact Framework s.:
http://www.db4o.com/s/compactframeworkdb.aspx
Db4o unterliegt der GPL was zur folge hat dass man die eigene Anwendung auch der GPL unterwerfen muss. Wer das nicht möchte kann allerdings auch hier eine kommerzielle Lizenz erwerben.

Angeblich soll aber sogar der Oracle lite unter dem ComapctFramework 2 laufen, dies konnte ich bsi jetzt aber leider noch nicht testen. Hat jemand dazu Erfahrungen?

Wenn ja würde es mich freuen wenn ihr mir was zu kommen lassen könntet, ich werde die informationen dann hier veröffentlichen

11/15/2006 8:01:22 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [8]    | .NET Allgemein | Compact Framework | Controls | SQL Mobile  | 
 Tuesday, September 05, 2006

Gerade eben bin ich über ein weiteres Projekt gestolpert in dem OpenSource Projekte zu finden sind.

Das ganze ist unter : http://www.codeplex.com/ zu finden
Ausserdem habe ich es links in die Navigation aufgenommen
9/5/2006 10:58:51 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | Compact Framework | Controls | Sonstiges & Offtopic | Updates & SP  | 
 Monday, August 21, 2006

Da immer wieder die Frage aufkommt ob man .NET Komponenten in eine Anwendung bekommt, welche in einer "nicht-.NET fähigen" Sprache geschrieben wurde.

Gibt es hier ein Tutorial, wie man ein .NET Control als OCX hinbekomment und man es somit in jeder Sprache verwenden kann die ActiveX fähig ist.

Hier der Link: http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,3dd24f92-a52c-4bb0-8121-c2e6e2cc4f93.aspx
8/21/2006 8:03:32 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | Controls | GUI  | 
 Tuesday, June 13, 2006

Hi

das OpenNETCF 2.0 gibts nun in 2 Versionen.
Eine kostenlose und eine für 50$ zu lizensierende Version.

Der Entscheidende unterschied ist dass die Kostenlose keine Designer oder Intellisense unterstützung mehr hat.
Die Kostenpflichte Version unterstützt sowohl designer als auch Intellisense und bietet uach einige Tolls an die sich in die IDE integrieren.

Mehr infos dazu gibts auch unter :  <ctake/> -BLog

OpenNETCF scheint also immer mehr in die,  inzwischen fast übliche, Richtung zugehen von Ihren Produkten eine Standard und eine kostenlose abgespeckte Version zu gehen.

Falls daraus resultiert dass es noch bessere Controls gibt fände ich das gar nicht mal so schlecht, zu mal mir 50$ verkfraftbar erscheinen



Google Anzeige:
6/13/2006 7:37:39 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | Compact Framework | Controls | OpenNETCF | Updates & SP  | 
 Wednesday, June 07, 2006
Hi
Von OpenNETCF gibts eine neue kommerzielle Bibliothek, welche Kalenderansichten auf dem PocketPC im Outlook style ermöglicht.

Hier ein Bild:


Weitere Infos unter:

http://www.opennetcf.com/controls/calendar


6/7/2006 11:59:41 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | Compact Framework | Controls | GUI | OpenNETCF | Updates & SP  | 
 Wednesday, May 03, 2006

Da die Frage aufkam wie man Sounds im .NET CompactFramework abspielen kann hier ein kurzer Artikel für alle dazu.

Der nachfolgende Code baut auf einem Sample auf den ich Im Netz fand und bis jetzt funktioniert alles einwandfrei und einfach.


Erstmal machen wir uns eine "SoundKlasse":


using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

using System.Runtime.InteropServices;

 

namespace BETools

{

    public class Sound

    {

        /// <summary>

        /// Letzter aufgetretener FEhler

        /// </summary>

        public Exception LastErr=null;

 

        /// <summary>

        /// Sound stream zum abspielen. DAtei hat aber prio

        /// </summary>

        private byte[] m_soundBytes;

 

        /// <summary>

        /// Dateiname des sounds

        /// </summary>

        private string m_fileName;

 

        /// <summary>

        /// Flags

        /// </summary>

        private enum Flags

        {

            SND_SYNC = 0x0000,  /* play synchronously (default) */

            SND_ASYNC = 0x0001,  /* play asynchronously */

            SND_NODEFAULT = 0x0002,  /* silence (!default) if sound not found */

            SND_MEMORY = 0x0004,  /* pszSound points to a memory file */

            SND_LOOP = 0x0008,  /* loop the sound until next sndPlaySound */

            SND_NOSTOP = 0x0010,  /* don't stop any currently playing sound */

            SND_NOWAIT = 0x00002000, /* don't wait if the driver is busy */

            SND_ALIAS = 0x00010000, /* name is a registry alias */

            SND_ALIAS_ID = 0x00110000, /* alias is a predefined ID */

            SND_FILENAME = 0x00020000, /* name is file name */

            SND_RESOURCE = 0x00040004  /* name is resource name or atom */

        }

 

        /// <summary>

        /// PLaysound file DLL Aufruf

        /// </summary>

        /// <param name="szSound">Filename</param>

        /// <param name="hMod">NullPointer</param>

        /// <param name="flags">Flags.s.o.</param>

        /// <returns></returns>

        [DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]

        private extern static int WCE_PlaySound(string szSound, IntPtr hMod, int flags);

 

        /// <summary>

        /// PLay Soundstream DLL Aufruf

        /// </summary>

        /// <param name="szSound">Stream</param>

        /// <param name="hMod">NullPointer</param>

        /// <param name="flags">Flags.s.o.</param>

        /// <returns></returns>

        [DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]

        private extern static int WCE_PlaySoundBytes(byte[] szSound, IntPtr hMod, int flags);

 

        /// <summary>

        /// Übergeben des Filenames beim init, des soundfiles das abgespielt werden soll

        /// </summary>

        public Sound(string fileName)

        {

            m_fileName = fileName;

        }

 

        /// <summary>

        /// Soundstream der beim initübergeben wird, der später abgesproelt werden soll

        /// </summary>

        public Sound(Stream stream)

        {

            // read the data from the stream

            m_soundBytes = new byte[stream.Length];

            stream.Read(m_soundBytes, 0, (int)stream.Length);

        }

 

        /// <summary>

        /// Abspielen des Sounds

        /// </summary>

        public void Play()

        {

 

            //Wir prüfen ob ein Stream oder Filename abgespielt werden soll

            try

            {

                if (m_fileName != null)

                    WCE_PlaySound(m_fileName, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_FILENAME));

                else

                    WCE_PlaySoundBytes(m_soundBytes, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_MEMORY));

            }

            catch(Exception Err)

            {

                this.LastErr = Err;

            }

        }

    }

}

 


Nun Rufen wir nur noch die Soundklasse auf und spielen den Sound ab, das geht so :
string lcSoundFIle = @"\\meinsound.wav";

//Sound objekt erstellen

Sound oSound = new Sound(lcDateiName);              

oSound.Play();




Wenn dieser Beitrag hilfreich war würde ich mich über eine Spende freuen:
5/3/2006 9:14:40 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [1]   Compact Framework | Controls  | 
 Tuesday, May 02, 2006

Bei dem DeviceManagement des OpenNetCF habe ich einen Bug festgestellt.
Dieser tritt auf, wenn man das DeviceWake event bindet und folgende Schritte tut:


- Anwendung starten
- Device Binden
- Andere Anwendung öffnen und in den Vordergrund holen
- PPC für einige Zeit ausschalten und dann nach einer Weile wieder einschalten.

Es folgt ein Object disposed error.

ctake  hat den Bug behoben und soll im nächsten Release drin sein.

Nochmal vielen Dank anihn für das schnelle Bugfix! :)
5/2/2006 12:30:54 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]   Compact Framework | Controls | Updates & SP | OpenNETCF  | 
 Wednesday, April 12, 2006

In einem .NET Objekt bin ich über ein Control gestolpert, von dem ich glaube, dass es viele schon gebraucht haben.
Das Tolle daran ist, dass es das control unter: http://www.codeproject.com/cs/miscctrl/XPTaskBar.asp kostenlos gibt.
Wer es mit .NET Framework 2 einsetzen möchte sollte sich das unter den Kommentare angegebene Update installieren, da in der Ursprungsversion zum einem ein Point (int) falsch definiert war und zum anderen eine performance optimierung integriert wurde.



4/12/2006 2:28:13 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]    | .NET Allgemein | Controls | GUI  | 
Copyright © 2010 Haggy. All rights reserved.
DasBlog 'Portal' theme by Johnny Hughes.
Pick a theme: