Thomas Wölfers Baustatik-Blog

Thomas Wölfers Baustatik-Blog

Statiksoftware mit Work&Cash: Der Internet-Server


Man muss das nicht tun - es geht aber und ist recht praktisch: Sie können Ihr Zeitkonto für die Arbeit mit unseren Baustatikprogrammen auch per Internet verwalten. Wenn Ihr Netz oder ihr Rechner durch eine Firewall geschützt ist, dann werden mit recht großer Sicherheit auch keine Verbindungen nach außen erlaubt sein.

In diesem Fall müssen Sie die Firewall so konfigurieren, das der Zeitkonto-Server eben doch kontaktiert werden darf. Der Kontakt nimmt dabei das Programm 'TimeWiseServer.exe' auf, der Zeitkontoserver ist 'www.die.de' bzw. 194.77.231.40.

Wo ist der Vorteil im Vergleich mit der telefonischen Verwaltung? - Ganz einfach: Sie können Ihre Zeitblöcke im Internet 7 Tage die Woche, 24 Stunden am Tag verwalten. Telefonisch geht das nur zu normalen Arbeitszeiten unserer Oberhausener Niederlassung.


Variable Anzahl an Parametern in C#


Wie in C++ kann man auch in C# eine Methode mit einer variablen Anzahl an Parametern definieren. Das bedeutet, man kann eine Methode programmieren, die von unterschiedlichen Stellen im Programm mit einer unterschiedlichen Anzahl an Argumenten aufgerufen werden kann.

Dazu gibt es in C# das Schlüsselwort params.

Das Schlüsselwort wird zur markierung eines Array-Parameters verwendet:

void FooBar( params object[] args)
{
   foreach( object o in args) { /* ... */ }
}

Diese Methode kann man nun mit einer variablen Anzahl an Argumenten aufrufen. Die folgenden Aufrufe sind zum Beispiel beide zulässig:

FooBar( "haribo", 2, new Form());
FooBar( "haribo");


Google-Aktienproblem: Guter Lacher


Der Google IPO steht an, doch ach, man hat leider vergessen ein paar bereits ausgegebene Anteile anzugeben. Das war wohl nicht ganz legal, und darum sollen die nun zurückgekauft werden.

Jetzt der Lacher:

Google hat etwa 23 Millionen Anteile (und 5 Millionen Optionen) ausgegeben. Für den Rückkauf will man knapp 26 Millionen ausgeben.

Beim Börsengang sollen knapp 25 Millionen Anteile ausgegeben werden. Mit denen will man 3.3 Milliarden erlösen.


Verbindungsprobleme: Keine Webseite, keine Mail, kein Blog


Wir betreiben im wesentlichen zwei öffentliche Server für die Kommunikation. Der eine hat den Namen www.die.de, der andere ist mail.die.de.

www.die.de ist der Server auf dem unter anderem die Webseiten zu unserer Statiksoftware liegen, von dort kommen auch die Blogs bei die.de und dieser Server ist auch für die Verwaltung der per Internet abrufbaren Work&Cash Zeitkonten für die Baustatikprogramme zuständig.

Mail.die.de dient ausschließlich als Mailserver: Dort liegen die Mailboxen aller Mitarbeiter, der Server führt die Antivirentests aller ein- und ausgehenden Mails durch, und von dort werden auch alle eMails der Mailing-Listen verteilt. Der eMail-Support für die kostenlosen Studentenversionen der Statiksoftware findet also über diesen Rechner statt.

Beide Rechner sind über eine Standleitung von Via.Networks angebunden: Dort gab es heute ein kurzfristiges Problem mit den Routern im Frankfurter Netzwerk. Resultat: Beider Rechner und damit auch alle Dienste die darauf laufen waren nicht zu erreichen. Das Problem betraf die Route zwischen Frankfurt und München, der Münchner Endpunkt besteht dabei im Wesentlichen aus den beiden genannten Rechnern - und dem Internetzugang der Münchner Niederlassung. Von dort kam also auch niemand 'raus'. :(

Dankbarerweise hatte Via das Problem relativ schnell im Griff: Nach etwa 60 Minuten war die Verbindung wieder hergestellt - und die Dienste waren dann auch wieder erreichbar. :-)


Spaltenbreite in Listen anpassen: Trick für den Explorer


Alter Trick, aber immer wieder gerne nicht gewusst: Wenn man in 'aktuellen' Windows Programmen eine Tabellen-Ansicht hat, dann sieht die meistens so aus wie die Ansicht 'Details' im Windows Explorer. Dabei hat jeden Tabellenspalte eine separate Überschrift, und die Überschriften sind durch leichte Markierungen von einander getrennt. Durch das verschieben dieser Markierungen kann man die Spaltenbreite anpassen.

Allerdings ist oft nicht klar wie breit die Spalte werden muss damit man alles lesen kann - und zwar deshalb, weil die Tabelle eben so lang ist das man den unteren Teil davon nicht sehen kann. Da hilft aber ein Doppelklick auf die Markierung: Das macht die Spalte nämlich genau so breit, wie sie sein muss, damit alles darin befindlichen Elemente vollständig angezeigt werden können.


RAM defekt? Merkwürdige Fehler? Es gibt ein Test-Tool...


So wie alles kann auch das RAM im Rechner natürlich defekt sein. Anders als bei anderen fehlerhaften Bauteilen führt defektes RAM allerdings zu kaum zu reproduzierenden Fehlern in beliebigen Anwendungen oder dem Betriebssystem: Kaputtes RAM ist einfach ganz fürchterlich ärgerlich und irre schwer zu diagnostizieren.

Wer in seinem Rechner nach einem schwer zu reproduzierenden Fehler sucht - der sollte auch einem das RAM-Diagnosetool verwenden. Selbiges stammt von Microsoft, braucht aber kein MS-Betriebssystem um verwendet zu werden: Das Ding bootet selbst, testet selbst und macht auch sonst alles völlig autark. Mit anderen Worten: Man kann damit auch das RAM in Rechnern testen, die kein Windows drauf haben. (PCs müssen es aber schon sein :-)

Das Programm gibts zum runterladen bei der 'Microsoft Online Crash Analysis' Seite: Klick  - und zwar mit Benutzerhandbuch und allem drum und dran. Kostenlos für jedermann.

Dank an Carmen.


Iterieren in einer Form: GetNextControl()


Beim iterieren über Controls in einer Fom muss man ein paar Dinge berücksichtigen:

  • Form.Controls enthält nicht alle Controls auf der Form. Ist eines der Controls ein Container (zum Beispiel eine GroupBox), dann befinden sich die Controls die sich darin befinden in dessen 'Controls' Collection.
  • Handelt es sich bei der Form um eine Dialogbox, dann muss man die Tab-Order berücksichtigen. Form.Controls enthält die Controls aber nicht in der Reihenfolge der Tab-Order.

Um die Controls in der Reihenfolge der Tab-Order zu erhalten benutzt man GetNextControl(). GetNextControl bekommt zwei Parameter: Der eine ist ein Startwert: Geliefert wird das Control vor oder nach diesem Startwert. Das nächste wird geliefert wenn der zweite Parameter 'true' ist.

Was die Dokumentation nicht sagt ist, wie man an das erste Control kommt. Dazu übergibt man als 'Startwert' 'null - dann liefert die Funktion eben das erste Control.


OnKeyDown() - geht nicht immer so wie erwartet


Ich bin sicherlich nicht der einzige der gerne hätte, das die selbst programmierten Dialogboxen geschlossen werden, wenn die Dialogbox gerade Focus hat und Escape gedrückt wird: Das ist das Verhalten, was jedermann bei einer Dialogbox erwarten würde.

Windows.Forms hat dafür Eventhandler, in denen man sich ums schließen kümmern kann: Dabei gibt es drei Handler, von denen der fürs KeyDown-Event der 'offensichtliche' ist. Nur wird der leider nie aufgerufen - und kann daher für den geschilderten Fall auch nicht verwendet werden.

Der KeyDown Event tritt nämlich ein nachdem eine Taste gedrückt wurde und zwar beim Control das gerade Fokus hat.

Die Form sieht dieses Event also NIE. (Bin gerne bereit mich belehren zu lassen, denn vielleicht gibt es schon einen Fall bei dem das Event eintritt, im Normalfall tut es das jedenfalls nicht. Es wäre natürlich schön, wenn das in der Dokumentation irgendwo stehen würden. :-( ) Mit anderen Worten: Um eine Dialogbox per ESC schließen zu können, ist KeyDown das falsche Ereignis.

Statt dessen macht man folgendes: Man überlädt ProcessDialogKey. Zum Beispiel so:

protected override bool ProcessDialogKey(Keys keyData)
{
   if (keyData == Keys
.Escape)
   {
      this
.Close();
      return true
;
   }
   return base
.ProcessDialogKey(keyData);
}

Noch kurz was anderes: Ich baue mitlerweile alle meine Testprojekte mit Visual C# 2005 Express (Beta). Bin wirklich begeistert.




Baustatik Demoversion ausprobieren »