Laden...

Combobox mit Flatstyle

Erstellt von diana vor 19 Jahren Letzter Beitrag vor 16 Jahren 2.453 Views
D
diana Themenstarter:in
586 Beiträge seit 2004
vor 19 Jahren
Combobox mit Flatstyle

Hallo zusammen,

kurz und knapp: wie kann ich einer Combobox auch einen Flatstyle zuweisen, wie bei Textfeldern und Buttons? Geht dies überhaupt? Sieht eben etwas komisch, wenn alles flat und die Combos normalen Style haben! ;-{

:::

P
939 Beiträge seit 2003
vor 19 Jahren

Hi Diana,

in .Net 2.0 hat die ComboBox ne FlatStyle-Eigenschaft, hilft dir aber wahrscheinlich nicht viel weiter.

So wie es aussieht muss man die ComboBox selber zeichnen. Auf "The Code Project" gibt es einen Artikel zu dem Thema: Flatten that Combobox!. Die Beispiel-Bilder sehen allerdings nicht sehr überzeugend aus, aber man sieht wie es geht.

Gruss
Pulpapex

D
diana Themenstarter:in
586 Beiträge seit 2004
vor 19 Jahren

Vielen Dank für deine Antwort. Etwas aufwendiger als ich es vorgestellt habe. Da gilt es zu überlegen, ob dies wirklich notwendig ist! 🙂

:::

H
264 Beiträge seit 2005
vor 16 Jahren

Auch beim Framework 3.5 gibt es noch Probleme damit 😦

Ich habe meine comboboxen in einem tablelayoutpanel (ist wie eine Tabelle) angeordnet, damit sie schön angeordnet sind.
Dann habe ich das tablelayoutpanel und alle comboboxen mit Dock = Fill festgelegt, damit sich alle comboboxen an die Größe des Fensters anpassen.
Verwende ich allerdings den style = flat dann gibts vor allem beim vergrößern der Breite des Fensters häßliche grafische Fehler (siehe Anhang).
Fährt man mit der Maus über die comboboxen werden sie anscheinend neu gezeichnet, und der "3D-Anteil" verschwindet.

915 Beiträge seit 2006
vor 16 Jahren

Mit der WinAPi könntest über SetWindowsLong oder SetWinowPos versuchen den Style der ComboBox zu manipulieren.

Denke das hier sollte gehen, ich war nur zu faul es zu testen 😉

Win32 GetWindowLong
Win32 SetWindowLong

www.pinvoke.net


private const int  BS_FLAT =0x8000;
private const int  GWL_STYLE = (-16);

// hWnd = ComboBox.Handle

style = GetWindowLong(hWnd, GWL_STYLE);
SetWindowLong(hWnd, GWL_STYLE, (style |  BS_FLAT));

[Unbrauchbar]
Man kann über uxtheme den Style aller Controls auf WindowsXP oder Office umstellen aber glaube nicht das dass hier brauchen wirst.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

H
264 Beiträge seit 2005
vor 16 Jahren

Folgendes half:

private void comboBox1_Resize(object sender, EventArgs e)
{
    comboBox1.Refresh();
}
915 Beiträge seit 2006
vor 16 Jahren

Hrm, denke da reicht auch nen Invalidate dann.
Habe mir zwar das Codeproject sampple nciht angesehen aber schätze das einfach an ner bestimmten Stelle die Zeichenroutine nicht angestoßen wird (daher Invalidate).

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(