Windows Forms: Funktionstasten erkennen

Will man z.B. das Drücken der  F10-Taste erkennen, muss man in der Form-Klasse die Funktion ProcessCmdKey überschreiben:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.F10)
    {
        MessageBox.Show("F10 Pressed");
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

Cheers,
Ralf

Windows Forms: Immer wieder Ärger mit ConstraintExceptions

Immer wieder, wenn man die Datenbank angepasst hat, kommt es vor, dass die autogenerierten DataSet-Funktionen beim Füllen eine ConstraintExpection feuern.

Auch wenn man die Innerste der inneren Exceptions untersucht, bekommt man die eigentlich Ursache nicht heraus.

Jetzt bin ich endlich auf den Tipp gestoßen:
http://dotnetdebug.net/2006/07/16/constraintexception-a-helpful-tip/ 

Der Tipp stimmt allerdings nur, wenn es bereits in der ersten Zeile „knallt“. Ist der Fehler nicht in der ersten Zeile, muss man erst die Zeilennummer herausbekommen. Dazu einfach im „Watch“-Fenster folgenden Code hinzufügen:

DataSet1.Tables["Tabelle1"].Rows[
  DataSet1.Tables["Tabelle1"].Rows.Count-1].RowError

DataSet1 und Tabelle1 müssen natürlich angepasst werden.

Cheers,
Ralf

 

MySQL: Suchen und Ersetzen in MySQL

Hier die Syntax zum Ersetzen von bestimmten Teilstrings:

update [table_name] set [field_name] = 
  replace([field_name],'[string_to_find]','[string_to_replace]');

In der MySQL-Doku haben sie es leider nicht so knackig auf den Punkt bekommen …

Ursprünglich:
http://www.mediacollege.com/computer/database/mysql/find-replace.html

Cheers,
Ralf

Windows Forms: Verweis auf unterschiedliche „DEBUG“ und „RELEASE“ Bibliotheksversionen

Wenn man für DEBUG und RELEASE Konfigurationen auf unterschiedliche Bibliotheksversionen verweisen will, dann muss man die Projektdatei manuell editieren:

<Reference Include="Foo" Condition="'$(Configuration)'=='Debug'"/>
<Reference Include="Bar" Condition="'$(Configuration)'=='Release'"/>

Diese Info stammt aus dem Stackoverflow-Forum:
http://stackoverflow.com/questions/694415/c-sharp-vs2008-add-separate-debug-release-references-to-a-project 

Wenn es um die gleiche Bibliothek in unterschiedlichen Ordnern geht, dann würde mir das aber so besser gefallen :

<Reference Include="MyLib">
  <HintPath>..\..\MyLib\bin\$(Configuration)\MyLib.dll</HintPath>
</Reference>

Cheers,
Ralf

Typo3: Ältere Version einer Extension installieren

Wenn man eine ältere Version einer Extension installieren muss, dann geht man im Extensionmanager (links unter Adminwerkzeuge–>Erweiterungen) auf „Import Extension“ (Erweiterung importieren). Dort sucht man zunächst über das Suchfeld die Extension.

Wenn man jetzt nicht auf das erste Symbol mit dem orangenen Pfeil klickt, sondern auf den Titel der Extension, dann kommt man zu einem Dialog, der die Version auswählen lässt.

Hier ein englischer Artikel, der mir dabei geholfen hat:
http://sankartypo3.wordpress.com/2012/05/19/how-to-get-the-old-version-of-a-typo3-extension/

Cheers,
Ralf

XTC: Nervige Abfrage entfernen

Es gibt im Backend an vielen Stellen unnötigerweise eine Sicherheitsabfrage „Änderungen speichern?“. Dazu muss man im „admin“-Ordner einfach nach „return confirm“ suchen. Dort findet man solche Vorkommnisse:

onClick="return confirm('<?php echo SAVE_ENTRY; ?>')"

Nach der Änderung sieht es so dann aus:

onClick=""

Das sollte man natürlich nicht überall machen. Manchmal sind solche Fallnetze auch nicht schlecht :-) Beim Anlegen von Kategorien (new_category.php) ist es jedenfalls unnötig nervig.

Cheers,
Ralf

Typo3: Große Bilder im Content einfügen

Gestern kam das Problem auf, dass eine Begrenzung im Rich-Text-Editor (RTE) von Typo3 das Einfügen größerer Bilder verweigerte. Diese Funktion ist durchaus sinnvoll, wenn man verhindern möchte, dass ein Redakteur das Layout zerschießt. In unserem Fall aber störend, wenn man weiß was man tut. Im Einfüge-Dialog steht unten:

Im „Normal“-Modus können nur Web-Grafikformate (JPG, GIF und PNG) bis zu einer Auflösung von 300×680 Pixeln verwendet werden. Dieser Modus ist zur Verwendung bereits für das Web optimierter Grafiken vorgesehen.

Um die Begrenzung aufzubohren, sollte man nach dieser Anleitung vorgehen:
http://blog.exites.de/2011/09/bildgrose-fur-eingefugte-bilder-uber-den-typo3-rte-htmlarea/ 

Wenn es nicht greift (was bei uns leider der Fall war), gibt es immer noch die Möglichkeit die „typical“-Einstellungen des RTE-Plugins zu verändern.

Dafür muss man in der Datei:

/typo3/sysext/rtehtmlarea/res/typical/pageTSConfig.txt

einfach in Zeile 231 (vor der Zeile mit der geschweiften Klammer) etwas hinzufügen. Original Block:

	buttons.bold.hotKey = b
	buttons.italic.hotKey = i
}

Nach der Änderung:

	buttons.italic.hotKey = i

	buttons.image.options.magic.maxWidth = 1000
	buttons.image.options.plain.maxWidth = 1000
}

Man könnte aber auch weniger faul sein und herausfinden, warum der Artikel bei einem nicht funktioniert :-)

Cheers,
Ralf

Windows Forms: Mehrzeilige Felder mit DataGridView

In einem DataGridView kann man auch Zeilenumbrüche darstellen, wenn man den WrapMode von DefaultCellStyle von DataGridViewTextBoxColumn auf true setzt.

Cheers,
Ralf

Windows Forms: NumericTextBox

Ab Werk bei Windows Forms gibt es leider keine numerische Textbox. Ich habe mich dabei ertappt, dass ich das in jedem Projekt neuprogrammiert habe. Heute soll damit Schluss sein: Nach einem kurzen Besuch bei der Suchmaschine meiner Wahl fand ich ein Snippet, das ich gleich etwas anpasste (und auch noch weiter anpassen muss):

public class NumericTextBox : TextBox
{
    bool allowSpace = false;
    private bool isInt;

    // Restricts the entry of characters to digits 
    // (including hex), the negative sign,
    // the decimal point, and editing keystrokes (backspace).
    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        base.OnKeyPress(e);

        NumberFormatInfo numberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.NumberFormat;
        string decimalSeparator = numberFormatInfo.NumberDecimalSeparator;
        //string groupSeparator = numberFormatInfo.NumberGroupSeparator;
        string negativeSign = numberFormatInfo.NegativeSign;

        string keyInput = e.KeyChar.ToString();

        if (Char.IsDigit(e.KeyChar))
        {
            // Digits are OK
        }
        else if (keyInput.Equals(decimalSeparator) || // keyInput.Equals(groupSeparator) ||
            keyInput.Equals(negativeSign))
        {
            // Decimal separator is OK
        }
        else if (e.KeyChar == '\b')
        {
            // Backspace key is OK
        }
        //    else if ((ModifierKeys & (Keys.Control | Keys.Alt)) != 0)
        //    {
        //     // Let the edit control handle control and alt key combinations
        //    }
        else if (this.allowSpace && e.KeyChar == ' ')
        {

        }
        else
        {
            // Swallow this invalid key and beep
            e.Handled = true;
            //    MessageBeep();
        }
    }

    public int IntValue
    {
        get
        {
            return Int32.Parse(this.Text);
        }
    }

    public double DoubleValue
    {
        get
        {
            return double.Parse(this.Text);
        }
    }
    protected override void OnValidating(CancelEventArgs e)
    {
        base.OnValidating(e);
        try
        {
            if (!isInt)
                this.Text = Math.Round(double.Parse(this.Text), 2).ToString("F2");
            else
                this.Text = Math.Round(double.Parse(this.Text), 0).ToString();
        }
        catch
        {
            e.Cancel = true;
        }
    }
    public bool AllowSpace
    {
        set
        {
            this.allowSpace = value;
        }

        get
        {
            return this.allowSpace;
        }
    }
    public bool IsInt
    {
        set
        {
            this.isInt = value;
        }

        get
        {
            return this.isInt;
        }
    }
}

Vorhandene Textboxen in den „Designer.cs“-Files suchen und ersetzen. Fertig!

Der Vorschlag kommt übrigens von MS direkt. Man hätte es aber auch direkt in VS integrieren können …
http://msdn.microsoft.com/en-us/library/ms229644(v=vs.80).aspx

Cheers,
Ralf

Report Viewer: Währungsausgabe mit FormatCurrency()

Bei der Währungsausgabe gibt es ein Problem über das vermutlich jeder, der Software für Unternehmen außerhalb von USA entwickelt, stößt.

In der Beschreibung von FormatCurrency z.B. im Expression-Dialog steht:

Returns an expression formatted as a currency value using the currency symbol defined in the system control panel. 

Das stimmt aber nicht! Einstellen kann man das Format in Eigenschaft Language des Report-Elements. Stellt man den Wert auf „de-DE“, dann sieht man auch Euro-Angaben mit Komma-Zahlen.

Cheers,
Ralf