Archiv

Archiv für Oktober, 2008

C# :: Dateien löschen

30. Oktober 2008 Keine Kommentare

Um schnell z.B. alle Textdateien in einem Verzeichnis zu löschen, kann folgender Code-Schnippsel herhalten:

private void DeleteTextFiles()
{
   string Path2Files = “C:\MeinOrdner”;
   string FileExt = “.txt”;
   string[] GetTxtFiles = Directory.GetFiles(Path2Files);
   int i = 0;

   for (i = 0; i < GetTxtFiles.Length; i++)
   {
      if (GetTxtFiles[i].ToString().EndsWith(FileExt))
         File.Delete(GetTxtFiles[i].ToString());
   }
}

KategorienC# Tags:

JS :: Puristische Version eines Modalen Popup

29. Oktober 2008 Keine Kommentare

Hier mal die absolut puristische Möglichkeit ein modales Popup zu gestalten.

Das Javascript für das PopUp-Fenster (Dreamweaver):

<script language=”JavaScript”>
<!–
function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}
//–>
</script>

Der Link:

<a href=”javascript:void(0);” onClick=”MM_openBrWindow(‘fenster.htm’,'FensterName’, ‘status=yes,scrollbars=yes,width=700,height=500′)”>LinkTitle</a>

Und jetzt in der fenster.htm:

<body onblur=”self.focus()”>

Sehr einfach, da jedes Mal, wenn das Fenster den Focus verliert, es sich selbst diesen wieder gibt. Somit bleibt das Fenster immer im Vordergrund…

Kategorienhtml/js Tags:

AJAX :: ListSearchExtender und große Listen

29. Oktober 2008 Keine Kommentare

Wer das AJAX-Control-Toolkit von www.asp.net heruntergeladen hat und den ListSearchExtender einsetzt, wird feststellen, dass die Verarbeitung von großen Listen (> 10.000 Einträge in der Liste) ein paar Probleme aufwirft:

  • IsSorted = true führt dazu, dass die Performance so in den Keller geht, dass der Externder nicht mehr wirklich Sinn macht. Da ist die klassische Javascript-Suche schneller…
  • Wenn man also IsSorted = false einstellt und damit eine sehr perfomante Suche gestalten kann, unterdrückt der Extender bei Culture de-DE sämtliche Sonder- und Leerzeichen. Damit ist eine vernünftige Suche weiterhin nicht realisierbar.

Um diese Probleme in den Griff zu bekommen, ist es nun nötig, den ListSearchExternder im SourceCode, der von Microsoft mit dem Toolkit ausgeliefert wird, wie folgt zu verändern:

  1. Starten der AjaxControlToolkit.sln aus dem Root des entpackten ControlKits.
  2. Im Projekt “AjaxControlToolkit” (sollte als erstes aufgeführt sein) die Datei “ListSearch\ListSearchBehavior.js” öffnen
  3. Ersetzen (1):

_checkIfSorted : function(options) {
   if (this._isSorted) {
   // we assume this is sorted
      return true;
   } else {
      // it is not known if elements list is sorted, so check it by itself
      var previousOptionValue = null;
      var optionsLength = options.length;
      for(var index = 0; index < optionsLength; index++) {
         var optionValue = options[index].text.toLowerCase();
         if(previousOptionValue && this._compareStrings 
                   (optionValue, previousOptionValue) < 0) {
            return false;
         }
      previousOptionValue = optionValue;
      }
      return true;
     }
  },

durch

_checkIfSorted : function(options) {
   if (this._isSorted) {
   // we assume this is sorted
      return true;
   } else {
      // it is not known if elements list is sorted, so check it by itself
            return false
      }
  },

 

    4. Ersetzen (2)

_doLinearSearch : function(options, value, left, right) {
   if (this._queryPattern ==
               AjaxControlToolkit.ListSearchQueryPattern.Contains) {
      for(var i = left; i <= right; i++) {
         if(options[i].text.toLowerCase().indexOf(value) >= 0) {
            return i;
            }
        }
    } else if (this._queryPattern ==
               AjaxControlToolkit.ListSearchQueryPattern.StartsWith) {
      for(var i = left; i <= right; i++) {
         if(options[i].text.toLowerCase().startsWith(value)) {
            return i;
         }
      }
    }
      return -1;
    },

durch:

_doLinearSearch : function(options, value, left, right) {
   if (this._queryPattern ==
               AjaxControlToolkit.ListSearchQueryPattern.Contains) {
      for(var i = left; i <= right; i++) {
         if(options[i].text.toLowerCase().indexOf(value) >= 0) {
            return i;
            }
        }
    } else if (this._queryPattern ==
               AjaxControlToolkit.ListSearchQueryPattern.StartsWith) {
      for (var i = left; i <= right; i++) {
         if (options[i].text.toUpperCase().indexOf(
                                value.toUpperCase()) == 0) {
            return i;
            }
         }
      }
      return -1;
      },

 

Kompilieren - die AjaxControlToolkit.dll im Bin-Verzeichnis der Webseite aktualisieren und schon funktioniert es bestens…

Kategorienasp.NET Tags:

Batch-Files – Totgeglaubte leben länger

29. Oktober 2008 Keine Kommentare

Was waren das für Zeiten, als man sein Windows noch mit Batch-Dateien steuerte. Zugegebenermaßen kann man das heute auch noch, aber machen tuts wohl doch keiner.

Heute morgen brauchte ich mal wieder eine Batchdatei, die eine Logdatei mit einer Benennung nach dem Muster YYYY_MM_DD_Application.log erstellt. Allerdings brachte echo Test >> %date%_Application.log nicht das gewünschte Ergebnis…

Daher aus der Trickkiste ein Tipp zum Zerlegen des %date%-Wertes:

echo %date:~-11,2%
echo %date:~3,2%
echo %date:~6,4%

das liefert dann:

29
10
2008

Im Prinzip werden bei echo %date:~-11,2% von rechts 11 Zeichen (also bis Position 0) und ab dieser Position 2 Zeichen nach rechts extrahiert und ausgegeben…

KategorienSonstiges Tags:

C# :: IP-Adresse herausfinden

28. Oktober 2008 Keine Kommentare

Um die IP-Adresse des aktuellen Benutzers herauszufinden, wird folgender Code verwendet:

using System.Net;

IPHostEntry IPHost = Dns.GetHostEntry(Dns.GetHostName());
GetIP = IPHost.AddressList[0].ToString();

IPHost.AddressList[i] gibt die IP-Adressliste zurück, bei Vista ist der Wert [0] die IPv6-Adresse. In diesem Fall müsste auf IPHost.AddressList[1] referenziert werden.

Um zu überprüfen, ob es sich um eine gültige IP-Adresse handelt, kann man sich dieser Funktion bedienen:

private bool IsValidIPAddress(string GetIPAddr)
{
   try
   {
      IPAddress.Parse(GetIPAddr);
      return true;
   }
   catch (Exception e)
   {
      return false;
   }
}

Funktionsaufruf:

bool IsValidIPAddr = IsValidIPAddress(GetIP);

KategorienC# Tags:

C# :: Embedded Wave abspielen (aus .resx)

28. Oktober 2008 Keine Kommentare

Neben dem bereits beschriebenen BEEP bietet sich noch die (elegantere) Möglichkeit einen WAVE-Sound auszugeben.

Um das WAVE-File nicht gesondert ausliefern zu müssen wird dieses über <<Projekt – Applikationsname-Eigenschaften>> – Tab <<Ressourcen>> in die Resources.resx eingebettet. So z.B. ein Wave-File mit dem Namen “alert.wav”.

Im Form wird nun folgender Code hinterlegt:

using System.Media;
private void  PlayAlert()
{
    System.Media.SoundPlayer player = _
                              new System.Media.SoundPlayer();
    player.Stream = WindowsApplication1.Properties.Resources.
                              ResourceManager.GetStream(“alert”);
    player.Play();
}
KategorienC# Tags:

C# :: Translator

28. Oktober 2008 Keine Kommentare

Einen äußerst genialen Code-Translator C# <> VB.NET <> C# findest du hier:

http://www.carlosag.net/Tools/CodeTranslator/Default.aspx

KategorienLinks Tags: