Es ist wieder mal an der Zeit, Neues zu berichten. Am 1. Juli war Canada Day (der Nationalfeiertag hier) was wir auch gleich für einen verlängerten Wochenendausflug nutzten. Wir starteten also Freitag Abend Richtung Calgary und kamen auch schon nach (für kanadische Verhältnisse) nur etwas mehr als 3 Stunden dort an. Und jetzt die schlechte Nachricht für alle die in Edmonton wohnen: ja, es ist wahr, Calgary ist die schönere Stadt. Das liegt wohl vor allem daran, dass es dort eine “richtige” Downtown mit vielen Hochhäusern, einer Fussgängerzone und netten Restaurants mit Garten gibt. Und es gibt hier sogar Hügel
Den grössten Reiz übt aber wahrscheinlich die Nähe zu den Rockies aus.<!–more–>
Dorthin waren wir auch am nächsten Tag unterwegs und nach einem kleinen Zwischenstopp in Canmore kamen wir dann in Banff an. Was für ein Unterschied zu Jasper. Es ist so als wolle man Sankt Moritz mit einem kleinen ruhigen Bergdörfchen vergleichen. Banff ist sehr schön, vor allem das riesige Schlosshotel ist beeindruckend. Aber im grossen und ganzen ziehe ich doch das kleine Bergdorf vor.
Aber wir waren noch auf einem sogenannten Trail Riding Ausflug, ein Ausritt zu Pferde durch die Wälder rund um Banff. Und es war sehr beeidruckend. Die Kinder können gar nicht mehr von etwas anderen schwärmen. Etwas, dass wir unbeding wiederholen müssen!
Danach fuhren wir über den Icefield Parkway zurück nach Edmonton um auch rechtzeitig zum Feuerwerk wieder in der Stadt zu sein.
Leider mussten wir an diesem Tag gute Freunde von uns verabschieden, da die ganze Familie wieder zurück nach Deutschland geflogen ist. Der Abschied ging uns sehr nahe, da wir in den letzten Monaten viel miteinander unternommen haben und uns die Familie sehr ans Herzen gewachsen ist. Vor allem unseren Kindern fehlen die neuen Freunde. Ich hoffe ihr seid gut angekommen und grüsst Lindau von uns!
Abends gingen wir dann mit den Kindern nach Downtown wo dann um 11 Uhr die wirklich beeindruckende Feuerwerks-Show losging. Ja liebeSchweizer, da könnt ihr euch noch ein Stückchen abschneiden. Auch war die Maple-Leaf Dichte um einiges höher als die Schweizerkreuz-Dichte am 1. August.
Am gleichen Abend kam aber auch schon ein “Neuer” aus Deutschland hier in Edmonton an. Ein junger Kerl aus Bremen, der mit seinem Jahres-Visa hier in Edmonton mal sein Glück versuchen will. Diese Einstellung bewundere ich und ich hoffe ich kann ihm helfen, seinen Traum hier zu verwirklichen. Matthias ist ein sehr netter Kerl und ich glaube er hat hier noch eine richtig gute Zukunft. Lest mal sein blog unter http://findorff.org/blog/, da könnt ihr sehen dass es wirklich nicht so schwierig ist hier Fuss zu fassen. Etwas Mut natürlich vorausgesetzt.
Die Bilder unseres Ausflugs werde ich auf Picasa veröffentlichen und Euch dann die Links hier im Blog posten. Gebt mir noch kurz Zeit…
Damit schliesse ich den kurzen Zwischenbericht für diese Woche ab. Ich plane wieder ein bisschen mehr technische Blogs zu schreiben, dann aber wieder auf Englisch. Es wird da vor allem um meine Erfahrungen mit asp.net und .net 3.5 gehen. Trotzdem versuche ich Euch über Neugkeiten aus Edmonton auf dem Laufenden zu halten.
…ja, ich weiss ich sollte oefters was in den Blog schreiben! Aber um ehrlich zu sein: soviel Neues passiert im Moment nicht. Das ganz normale Leben haelt auch bei Neueinwandern irgendwann Einzug und alles geht in einem fast ganz normalen Trott weiter. Nicht dass es uns schon langweilig wird…
Ganz im Gegenteil: im Moment benutzen wir noch jedes freie Wochenende dazu, das Land besser kennen zu lernen. Wir waren in Jasper in den Rocky Mountains, ca. 4 Stunden von hier und konnten dort etwas Heimweh abstreifen. Ein sehr schoenes, idyllisch gelegenes Staedtchen mitten im Nationalpark. Waeren nicht die ganzen Schilder auf englisch koennte man meinen irgendwo in den Alpen gelandet zu sein. Dieser Ort wird sicher zu einem dauerhaften Ausflugsziel fuer uns. Sogar die Kinder waren begeistert, obwohl sie wandern mussten :-). [more]
Wir haben auch die ganzen Parks hier in Edmonton durchstreift und davon gibt es hier endlos viele. Im Sommer ist es eine richtig lebenswerte Stadt. Allerdings warnt mich hier jeder dass das im Winter ganz anders wird. Mal sehen…
Die Kinder machen grossartige Fortschritte mit ihrem Englisch aber es geht auf die Sommerferien zu und ich hoffe, dass sie in den 8 Wochen nicht alles wieder vergessen.
Manchmal werde ich auch gefragt ob es denn gar nichts negatives ueber Kanada zu berichten gibt. Und natuerlich gibt es solche Sachen aber die uebersieht man meistens in der Euphorie endlich angekommen zu sein und es macht auch nicht so viel Spass ueber die schlechten Sachen zu berichten. Aber um der Sache gerecht zu werden, hier ein paar Dinge:
Gebaut wird schlecht. Wenn man die Bauqualitaet mit der unseren vergleicht, stehen einem die Haare zu Berge. Nach ein paar Wochen im neuen Haus sind uns so einige Sachen aufgefallen, die es so zu Hause nicht geben wuerde. Tueren und Fenster haben so gut wie keinen Anschlag oder Falz und es zieht wie Hechtsuppe. Mal sehen wie sich das im Winter auswirkt. Gebaut wird generell mit Spanplatten was das Ganze extrem hellhoerig macht. Und da es hier in dem Sinn keine Facharbeiter gibt (ausser importierte), laesst die Ausfuerung z.T. sehr zu wuenschen uebrig.
Die entspannte Haltung der Kanadier die man zum einen Teil bewundert kann einen Mitteleuropaeer aber auch zur Weissglut bringen. Termine werden hier relativ relaxed gesehen und wenn's nicht heute ist, dann ist es eben naechste Woche…
mehr negative Punkte fallen mir so auf die Schnelle nicht ein aber ich verspreche, dass ich mir naechstes Mal mehr Muehe mit "Canada Bashing" geben werde
Der naechste Bericht folgt dann nach dem grossen Feiertag (Canada Day) am 1. Juli. Dann werde ich ein bisschen ueber Calgary berichten
Wir haben jetzt ziemlich genau den ersten Monat hinter uns und kommen so langsam aber sicher zur Ruhe. In den letzten Wochen haben wir alles erledigt, was anfällt, wenn man nach Übersee zieht. Von Autokauf über Wohnungssuche, Behördengänge usw… [more]
Ja, es war ein ziemlicher Stress bis wir alles zusammen hatten und wir hatten noch nicht gerade viel Zeit uns die Umgebung anzusehen. Was aber gar nicht so ins Gewicht fiel, da wir letzte Woche einen kleinen Wintereinbruch mit 20 cm Schnee hatten - aber jeder hier versichert mir, dass es jetzt doch Frühling werden soll ![]()
Aber nun haben wir unser Auto (einen Dodge Journey, netter kleiner Familienvan), haben unser amerikanisches Häuschen gefunden (leider ohne Porch und rundherum wird noch gebaut), die Möbel ausgesucht und wir werden dort am 1. Mai einziehen und dann langsam aber sicher wird das normale Leben wieder bei uns einkehren.
All das war mit einer Menge Rennerei und Papierkrieg verbunden und um jedem, der auch mal hier her ziehen will, einige Leerläufe und Fehler zu ersparen, wollte ich hier kurz mal auflisten was denn so alles im Einzelnen zu tun ist:
So, dass war diesmal ziemlich ausführlich, sollte aber doch noch jemand Fragen haben, meldet Euch einfach. wir helfen gerne weiter wo wir können.
An alle unsere Freunde und Bekannte: ab 1. Mai könnt ihr uns an folgende Adresse schreiben:
6108 Stinson Way
Edmonton, AB, T6R 0K2
Telefon kommt noch… Und Bilder vom Haus und vom Auto stelle ich auch nächstes Mal online.
Schöne Grüsse aus Edmonton
Die Familie Dobler
Nach der ersten ereignisreichen Woche hier in Edmonton hatte ich nun am Montag, dem 7. April meinen ersten Arbeitstag! Obwohl AD Williams noch mit dem Verlust von Reagan Williams zu kämpfen hat wurde ich sehr herzlich empfangen. Ganz kanadisch wurde ich zur ersten Tasse Kaffee eingeladen, bevor ich auch nur einen Streich gearbeitet habe.
Am Vormittag ging die Vorstellungsrunde los und ich konnte mir nicht mal ein Zehntel der Namen merken - obwohl ich anscheinend allen bekannt war (”Oh, you’re the Austrian guy…”). Nach der ersten Sitzung mit meinem Chef Santiago Gomez und dem neuen Präsidenten Naseem Bashir wurde mir klar, dass hier wohl Arbeit für die nächsten 5 Jahre auf mich wartet
bedeutet wohl, dass wir länger hier bleiben werden.
Danach bezog ich mein fensterloses Kämmerchen, in dem mir der Ausblick auf die Riverbank und den North Saskatchewan verwehrt bleibt. Aber ich habe mein eigenes Büro und muss mir nicht eines der Cubicles teilen - ich nehme daher an, dass es sich da wohl um ein Feature handelt…
Gleich beim Lunch wurde mir bewusst, dass in Kanada doch alles anders ist (und besser): ich liess wieder mal meine Jacke liegen inklusive iPod, Telefon, Schlüssel, … - aber anders als bei uns wartete die Jacke bei der Security des Gebäudes geduldig auf mich - nicht mal der iPod hat gefehlt.
In der Woche davor haben wir Edmonton von links nach rechts und von oben nach unten auf der Suche nach netten Häusern durchquert. Gefunden haben wir einiges, aber es war entweder heruntergekommen, zu teuer oder zu weit ausserhalb. Aber zumindest die Kinder haben sich für eine Schule entschieden, die “Rio Terrace”. Jetzt müssen wir nur noch was in der Nähe finden.
Grüsse aus Edmonton
Mike
Nach monatelangen Vorbereitungen, wochenlangem Stress, ein paar schlaflosen Nächten und 17 Stunden Flug kamen wir am 27.3.2008 um 23:00 Uhr endlich in unserer neuen Heimat Edmonton an [more]
Hundemüde von dem langen Flug konnten wir uns gerade noch aufraffen um unser Mietauto abzuholen und ins nächste Hotelbett zu fallen. Vorher mussten wir beim Mietauto jedoch noch ein Upgrade vornehmen, damit auch alle unsere 12 Koffer im Auto Platz hatten.
Noch nicht ganz ausgeschlafen, aber aufgeregt, unsere neue Heimat zu erkunden, sprangen wir am nächsten Morgen ins Auto und fuhren Richtung Downtown. Die Strecke vom Flughafen in die Stadt wirkte auf uns etwas ernüchternd, da wir durch die Industriezone Edmontons fuhren und Alberta selbst gerade erst aus dem Winterschlaf erwacht. Es bot sich uns daher ein etwas düsteres und graues Bild, dass meiner Frau dann schon etwas Angst machte.
Die Downtown selber war dann mit den ganzen Hochhäusern schon beeindruckender. Da die Gegend rund um Edmonton sehr flach ist, erhoben sich die Hochhäuser der Innenstadt aus dem Flusstal, als wir der Stadt entgegenfuhren. Wir parkten dann auch bei der ersten Gelegenheit in der Jasper Avenue um die Stadt zu Fuss zu erkunden. Die Telus Towers, die mir vorher nur von Google Earth bekannt waren, dienten uns dabei als Wegweiser zu meiner neuen Firma. Da angekommen konnten wir es uns nicht verkneiffen uns dann auch direkt bei ADWE zu melden.
Ich würde jetzt gerne davon berichten, wie herzlich wir empfangen wurden und wie sehr mir alles gefallen hat (was auch wirklich der Fall war), leider wurde unser Ankommen in Edmonton von einem furchtbaren Unfall überschattet.
Kurz nach dem Mittagessen mit meinem Chef kamen wir zu ADWE zurück wo gerade die ganze Belegschaft zu einer Sondersitzung zusammengerufen wurde. An dieser Sondersitzung wurden allen mitgeteilt, dass Reagan Williams, der Präsident von ADWE, bei einem Flugzeugabsturz ums Leben kam. Das besonders tragische daran ist, dass sein Vater, Allan Williams, CEO der Firma, bei einem ähnlichen tragischen Flugzeugunglück im Herbst des Vorjahres ums Leben kam.
Wir, meine Familie und ich, die mich zu diesem Zeitpunkt begleitete, waren wie alle Mitarbeiter bei ADWE geschockt von diesem tragischen Ereignis und ich möchte hiermit der Familie Williams wie auch allen Mitarbeitern mein herzlichstes Beileid aussprechen.
Alle, die an dieser Stelle Fotos unserer Ankunft und Berichte, wie schön und toll und aufregend die ersten Tage in Edmonton sind, erwartet haben, muss ich bis auf weiteres vertrösten, da uns allen nicht mehr nach fotografieren und Sight Seeing mehr zumute war.
In Gedenken an Reagan und Allan Williams
Familie Dobler
Ja, endlich scheint es soweit zu sein. Nachdem ich jahrelang jedem den ich kenne mit meinen Geschichten vom Auswandern auf die Nerven gegangen bin, wird mein Traum nun endlich wahr. Wir gehen nach Edmonton! [more]
Nach langen Verhandlungen, traurigen Ereignissen und Verzögerungen erhielt ich endlich (wenn auch sehr unerwartet) einen Arbeitsvertrag von A.D. Williams Engineering (http://www.adwilliams.com), einem bekannten und renomierten Ingenieursbüro im Herzen der City. Dafür möchte ich mich ganz herzlich bei Santiago Gomez bedanken, der mit seiner Ausdauer und Hartnäckigkeit dafür gesorgt hat, dass dieser Traum in Erfüllung geht.
Danken möchte ich natürlich auch dem Firmeninhaber Reagan Williams und auch der Personalmanagerin Sarah Burkhard, die die Mühe auf sich genommen haben, mich nach Kanada zu bringen.
Ich danke auch Mr. Arjuna Ranasinge von Unison HR (http://www.unisonhr.com), der mir diesen grossartigen Job vermittelt hat und mir helfen wird, die Immigration so schnell wie möglich über die Bühne zu bringen. Übrigens herrscht Facharbeitermangel in Alberta! Darum sucht Arjuna noch drigend IT Fachleute, Ingenieure alle Art und Handwerker, die auch davon träumen, nach Kanada auszuwandern. Meldet euch einfach bei ihm über die Webseite oder schreibt ihm ein E-Mail an aranasinghe@unisonhr.com. Einfach "Mike Dobler sent me" reinschreiben, und er weiss, worum es geht. Die Anfragen aber bitte nur in Englisch, bei Unison HR spricht man kein Deutsch. Sollte jemand Probleme dabei haben, meldet euch doch einfach bei mir und ich schau mal, ob ich helfen kann (m.dobler@steepvalley.net).
Du meine Güte, die ganzen Danksagungen klingen ja schon ein bisschen nach der Oscar-Verleihung, ich sollte jetzt wohl besser aufhören…
Ich werde in Zukunft in diesem Blog über meine Erfahrungen mit der Immigration, dem Leben und Arbeiten in Kanada und über andere (vielleicht) hilfreiche Themen schreiben. Ihr könnt mir gerne Kommentare und Anfragen zusenden, ich werde versuchen, diese zu beachten oder zu beantworten.
Und noch schnell an alle meine Bekannten, Verwandten und Arbeitskollegen: sobald wir uns ein bisschen häuslich eingerichtet haben, seid Ihr natürlich herzlich eingeladen uns zu besuchen, wir freuen uns schon. Telefonnummern und Anschrift kommen noch.
ADWE's website: http://www.adwilliams.com
Unison HR's website: http://www.unisonhr.com
Working in the heart of Edmonton: (google maps link)
About Edmonton: http://www.edmonton.com
I'm proud to anounce that the XP Common Controls are part of the newly released book "Windows Developer Power Tool" by James Avery and Jim Holmes. This book contains references to over 170 free and open source tools, components and frameworks, all of them coming with a mini user's guide.
Please check out their homepage at http://www.windevpowertools.com or buy the book here: http://www.amazon.com/exec/obidos/ASIN/0596527543/infozerk-20 - it will save you a lot of time and money when creating your next .net project.
My thanks to Jim and James for asking me to contribute to this book.
We are using Red Gates SQLDoc (http://www.red-gate.com) tool to document our databases and it works just fine. But as a matter of fact we do our documentations on the test server not the real server. And then a problem arises.
SQLDoc has no tool to copy the documentation from one DB to another.
And that's the problem because SQLDoc (and other tools including SQL Management Console itself) put the documentation text into the extended properties of SQL Server 2000 and SQL Server 2005, so you cannot simply copy the documented tables, procedures or functions within the help file. And documenting on the master DB did not prove usefull for us. [more]
So I checked the internals of the extended properties on SQL Server and found out that it uses the procedures sp_addextendedproperty and sp_dropextendedproperty and the internal, undocumented system table SYSPROPERTIES to save the documentation text onto the database. The SQL-Script below will extract your documentation and produce the needed procedure calls in the result window. Simply copy the text from the result window and execute it on the other database. The other database has to have the same schema of course! And because the existence of an extended property is not checked before you will receive some errors when executing the sp_drop… procedures, but this has no effect on the db.
Here's the script:
DECLARE @name NVARCHAR(4000), @value NVARCHAR(4000), @level0type NVARCHAR(4000), @level0name NVARCHAR(4000), @level1type NVARCHAR(4000), @level1name NVARCHAR(4000), @level2type NVARCHAR(4000), @level2name NVARCHAR(4000) DECLARE @statement NVARCHAR(4000)DECLARE cloop CURSOR LOCAL for SELECT S.NAME AS NAME, REPLACE(CAST(S.VALUE AS NVARCHAR(4000)), '''', '''''') AS VALUE, 'USER' AS LEVEL0TYPE, 'dbo' AS LEVEL0NAME, CASE O.XTYPE WHEN 'U' THEN 'TABLE' WHEN 'P' THEN 'PROCEDURE' WHEN 'FN' THEN 'FUNCTION' WHEN 'TF' THEN 'FUNCTION' WHEN 'IF' THEN 'FUNCTION' WHEN 'V' THEN 'VIEW' END AS LEVEL1TYPE, O.NAME AS LEVEL1NAME, CASE S.TYPE WHEN 4 THEN 'COLUMN' ELSE 'NULL' END AS LEVEL2TYPE, CASE WHEN ISNULL(C.NAME, '') = '' THEN 'NULL' ELSE C.NAME END AS LEVEL2NAME FROM SYSPROPERTIES S JOIN SYSOBJECTS O ON S.ID = O.ID LEFT JOIN SYSCOLUMNS C ON S.ID = C.ID AND S.SMALLID = C.COLORDER –LEFT JOIN SYSINDEXES I ON S.ID = I.ID AND S.SMALLID = I.INDID WHERE S.NAME = 'MS_Description' ORDER BY 5,6,7,8 OPEN cloop
FETCH next FROM cloop INTO @name, @value, @level0type, @level0name, @level1type,
@level1name, @level2type, @level2name WHILE @@FETCH_STATUS = 0BEGIN –drop property SET @statement = 'exec sp_dropextendedproperty N''' + @name + ''', ''' + @level0type + ''', ''' + @level0name + ''', ''' + @level1type + ''', ''' + @level1name + ''', ''' + @level2type + ''', ''' + @level2name + '''' SET @statement = REPLACE( @statement, '''NULL''', 'NULL') PRINT '/*' + @level1type + ': ' + @level1name + '*/' PRINT @statement PRINT 'GO' –add property SET @statement = 'exec sp_addextendedproperty N''' + @name + ''', N''' + @value + ''', ''' + @level0type + ''', ''' + @level0name + ''', ''' + @level1type + ''', ''' + @level1name + ''', ''' + @level2type + ''', ''' + @level2name + '''' SET @statement = REPLACE( @statement, '''NULL''', 'NULL') –PRINT '/*' + @level1type + ': ' + @level1name + '*/' PRINT @statement PRINT 'GO'
FETCH next FROM cloop INTO @name, @value, @level0type, @level0name,
@level1type, @level1name, @level2type, @level2name END CLOSE cloop DEALLOCATE cloop
When I was starting to develop in VS.net I wanted that nice XP-Look for all of my programs. The problem is, that Visual Studio shipped without most of them. The most missed controls where the Taskbox/Taskbar control and the Grouped ListView Contol.
I ran into implementations of some of the controls on the internet (namely vbAccelerator and the TaskVision Sample on http://www.windowsforms.net) and into a document provided by Microsoft named "Windows XP Design Guidelines". This document provides detailed information on some of the new controls and I started to recreate some of these controls for VS.net (with hints and help from the sites mentioned above - thank you again!) [more]
The one feature I wanted to have with the XP Controls was theming. But since it always needed some direct dll calls to uxtheme.dll I wrote my own theming dll. This has some positive and some negative effects.
It runs on any OS that supports the .net-Framework; means it will run on non-XP Systems like Win95 and Win2000. That said, I must also tell you that the theme listener and the grouping and tiling of the XPListGroup won’t work without Win XP.
I didn’t have to write a lot of API-calls
If Microsoft introduces a new theme or you download one from the internet, the controls will not support this one until it’s hardwired into the code.
As a workaround for the negative part I have exposed all properties of the theming formats to the IDE so you can define any combination of formats you want.
The collection of controls grew over time and include now balloon tips, cue banners, a textbox provider, panes, …
The newest addition are the Windows Forms Stylesheet (a separate project before) that will allow you change properties of your forms and controls at runtime, based on a xml definition file (similar to CSS in HTML).
You can find the XPCC code and controls at http://www.codeplex.com/xpcc
When designing common Windows Forms Application, it always turns out to be a bit of a hassle to synchronize different UI elements like a MenuItem and a Toolbar Item that execute (or should execute) the same code or should be activated and deactivated at the same time. [more]
One Solution to this problem is to delegate the work to a command class and then attach one or more UI elements to this class. The Command Class will then be in charge of executing commands, enable, disable, hide or show the attached elements.
In a future version I will provide a command extender that can be dragged onto a form and UI elements can then be attached to it. Meanwhile you will find some code that will allow you to use those command classes in code.
Using command classes in code has advantages too. You can create your very own application model with all the commands you need in your app as you will see in the demo app.
The Command Class itself contains a collection of attached components, some properties that will be explained shortly and some events that are used to inform the commands containing class of any changes in the command class.
There are three Properties (PropagateEnabled, PropagateVisible, PropagateText) that will allow one attached component to change the command’s Enabled, Visible or Text Property which will in turn propagate those changes to all other attached components. Setting the Visible and Enabled Property directly on the command object will always result in the propagation of the property value to all attached components.
The standard behaviour of the Text property is to NOT PROPAGATE to all attached components because this could end in some „funny“ scenarios because you could also attach textboxes to the command class. On the other hand, propagating the Text can be useful if the menu item or button should display certain states and be constant over all attached components.
Dim WithEvents MyCommand as New Command
MyCommand.PropagateEnabled = True
MyCommand.Add( menuItem1 )
MyCommand.Add( toolbarItem1 )
…
‘this will disable menuItem1 AND toolbaritem1
menuItem1.Enabled = False
The Add- and Remove-Method allow you to attach any Control or ToolStripItem to a command. Because most controls support an Enabled or Visible property, attaching textboxes, buttons and/or menu items to one command you can design highly interactive UI that could disable or hide a wide range or elements by simply setting one command property.
Calling the Clear method will remove all attached components at once.
The Execute Method will invoke the Click handler which can be intercepted in the parent class and the apropriate code can be executed for this command.
The code includes a very simple editor application that will allow you to open, save and edit a text file. The editor’s behaviour is not programmed into the form. The project has a shared class called EditorApplication that includes all methods and commands that can be executed from the editor. It also supports some events that the editor can use to show changes.
As mentioned before, all the behaviour is in this class. All methods and events are declared shared so that the class must not be instantiated but can be used immediately in the main form. The class has a child class called Commands where all available commands for this application are defined. The class also includes the event handling of each command which in return calls a method of the EditorApplication.
Public Class EditorApplication
Public Class Commands
Public Shared WithEvents OpenFile As New Command
Public Shared WithEvents SaveFile As New Command
Public Shared WithEvents CloseFile As New Command
Public Shared WithEvents NewFile As New Command
Public Shared WithEvents ChangeFont As New Command
Public Shared WithEvents SaveFileAs As New Command
Private Shared Sub ChangeFont_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ChangeFont.Click
EditorApplication.ChangeFont()
End Sub
Private Shared Sub CloseFile_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CloseFile.Click
EditorApplication.CloseFile()
End Sub
…
End Class
Public Shared Sub CloseFile()
If Not CheckFile() Then Exit Sub
CurrentFile = “”
Content = “”
IsDirty = False
IsNew = False
Commands.SaveFile.Enabled = False
Commands.SaveFileAs.Enabled = False
Commands.CloseFile.Enabled = False
End Sub
…
End Class
The EditorApplication keeps track of the current file, the current content and any status changes and raises events or changes commands accordingly.
The editor form itself is very simple. You can define all UI elements by dragging them from the toolbox. In a next step you go to the Load event of the form and attach every UI elemtent to the related command object of the application class. You then hook up any EditorApplication Event you’re interested in and then you’re ready to go.
Private Sub AttachCommands()
EditorApplication.Commands.ChangeFont.Add(ChangeFontToolStripMenuItem)
EditorApplication.Commands.ChangeFont.Add(tsChangeFont)
EditorApplication.Commands.CloseFile.Add(CloseToolStripMenuItem)
EditorApplication.Commands.NewFile.Add(NewToolStripMenuItem)
EditorApplication.Commands.NewFile.Add(tsNew)
EditorApplication.Commands.OpenFile.Add(OpenToolStripMenuItem)
EditorApplication.Commands.OpenFile.Add(tsOpen)
EditorApplication.Commands.SaveFile.Add(SaveToolStripMenuItem)
EditorApplication.Commands.SaveFile.Add(tsSave)
EditorApplication.Commands.SaveFileAs.Add(SaveAsToolStripMenuItem)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AttachCommands()
AddHandler EditorApplication.FileChanged, AddressOf OnFileChanged
AddHandler EditorApplication.ContentChanged, AddressOf OnContentChanged
AddHandler EditorApplication.FontChanged, AddressOf OnContentFontChanged
AddHandler EditorApplication.StatusChanged, AddressOf OnStatusChanged
rtfText.Enabled = False
EditorApplication.Commands.SaveFile.Enabled = False
EditorApplication.Commands.SaveFileAs.Enabled = False
EditorApplication.Commands.CloseFile.Enabled = False
EditorApplication.CurrentFont = Me.rtfText.Font
End Sub
…
Private Sub OnStatusChanged(ByVal sender As Object, ByVal e As EventArgs)
Me.Text = String.Format(”{0}{1}”, EditorApplication.CurrentFile, IIf(EditorApplication.IsDirty, “*”, “”))
If EditorApplication.CurrentFile = “” And EditorApplication.IsNew = False Then
rtfText.Enabled = False
End If
End Sub
Recent Comments