Entwickler-Ecke

WinForms - toolStripComboBox1 Größe anpassen


AlanWake - Do 02.09.10 20:10
Titel: toolStripComboBox1 Größe anpassen
Hallo Leute,

ich habe bei meiner Windows Form einen bindingNavigator1 und in dem eine toolStripComboBox1 hinzugefügt.

Jetzt habe ich folgendes Problem, wenn ich die Form breiter machen will oder ganz in den Vollbildmodus gehe passt die toolStripComboBox1 sich leider nicht der breite der Form an :(

Ich hatte es schon versucht mit,:


C#-Quelltext
1:
this.toolStripComboBox1.Alignment = System.Windows.Forms.ToolStripItemAlignment.Left;                    


aber leider kann ich bei dieser Methode nur Left und Right angeben kein Center :(

Bin dankbar für jede Hilfe :)

gruß Alan


CSMN - Do 02.09.10 20:17

Hi Alan,

um auf die Größenänderungen zu reagieren verwendest Du die Anchor Eigenschaft im Designer.

Grüße,
CSMN


AlanWake - Do 02.09.10 21:00

Hi,

habe den Anchor Wert verändert, aber dann löst das Programm den bindingNavigator1 von Top zu none bei Dock :(

Der bindingNavigator1 muss bei mir aber Oben oder Unten angedockt sein :)

Gibt es da noch eine andere Möglichkeit :?:

gruß Alan


CSMN - Do 02.09.10 21:16

user profile iconAlanWake hat folgendes geschrieben Zum zitierten Posting springen:


Gibt es da noch eine andere Möglichkeit :?:



Du kannst über das Event ResizeEnd gehen und in dem Handler die
Size Eigenschaft der toolStripComboBox1 anpassen.


AlanWake - Do 02.09.10 21:40

Ich habe es mit ResizeEnd und Resize versucht aber dann zieht das Programm die toolStripComboBox1 so breit das sie ausgeblendet wird :(

Code:


C#-Quelltext
1:
2:
3:
4:
        private void Form1_Resize(object sender, EventArgs e)
        {
            this.toolStripComboBox1.Size = this.Size;
        }


Gibt es sonst noch eine Möglichkeit :?:

gruß Alan

ps. Ich suche eigentlich etwas, wenn ich die Breite der Form verändere, das jedes mal wenn ich um +1 die Größe verändere, das +1 zur Breite der toolStripComboBox1 dazu gezählt wird :)


CSMN - Fr 03.09.10 01:22

user profile iconAlanWake hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe es mit ResizeEnd und Resize versucht aber dann zieht das Programm die toolStripComboBox1 so breit das sie ausgeblendet wird :(

Code:


C#-Quelltext
1:
2:
3:
4:
        private void Form1_Resize(object sender, EventArgs e)
        {
            this.toolStripComboBox1.Size = this.Size;
        }




na wenn du die größe der toolStripComboBox1 auf die größe der gesamten Form setzt, dann musst du dich nicht wundern dass sie ausgeblendet wird. du müsstest mit der differenz arbeiten, d.h. du bestimmmst am anfang die width der form und der combobox und bildest daraus die differenz dann wenn die form vergrößert wird machst du dass selbe spiel nochmal und addierst die differenz auf die width. und die size der combobox setzt du dann wie folgt:



C#-Quelltext
1:
toolStripComboBox1.Size = new Size(newWidth, toolStripComboBox1.Size.Height);                    


newWidth ist die von dir vorher bestimmte neue breite. Zu Deinen Kommentar: "ps. Ich suche eigentlich etwas, wenn ich die Breite der Form verändere, das jedes mal wenn ich um +1 die Größe verändere, das +1 zur Breite der toolStripComboBox1 dazu gezählt wird" - was bringt es dir wenn jemand die form maximiert und die breite um eins vergößert wird? und wenn ich es verkleinere wird es wieder um eins inkrementiert - ich glaub den gedanken hast du nicht zuende gedacht... würde ja heißen wenn jemand wie wild die form in der größe verändert würden wir theoretisch unendlich groß mit der combobox werden und realistisch irgendwann den integerwertebereich überlaufen...


AlanWake - Fr 03.09.10 04:50

Hi,

also die Differenz zwischen Form und combobox soll 50 sein aber wie ich jetzt programmieren muss das das Programm immer diese Differenz einhält, also newWidth, da brauch ich ein Beispiel, sorry bin Anfänger :)

gruß Alan


CSMN - Fr 03.09.10 07:09

user profile iconAlanWake hat folgendes geschrieben Zum zitierten Posting springen:
Hi,

also die Differenz zwischen Form und combobox soll 50 sein aber wie ich jetzt programmieren muss das das Programm immer diese Differenz einhält, also newWidth, da brauch ich ein Beispiel, sorry bin Anfänger :)

gruß Alan



na wie ermittelst du denn die beiden width werte(den der form und den der combobox)?

gruß


AlanWake - Fr 03.09.10 07:43

Ich meinte den Abstand zwischen den beiden !


Th69 - Fr 03.09.10 10:25

Mit Anchor arbeiten (wie CSMN schon geschrieben hat) ist der richtige Weg:

C#-Quelltext
1:
toolStripComboBox1.Anchor = AnchorStyles.Left | AnchorStyles.Right;                    

Dies bedeutet, der Abstand zum linken und rechten Rand des Parents bleibt immer gleich (und dadurch vergrößert oder verkleinert sich das Control entsprechend).


Necaremus - Fr 03.09.10 13:45

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Mit Anchor arbeiten (wie CSMN schon geschrieben hat) ist der richtige Weg:

C#-Quelltext
1:
toolStripComboBox1.Anchor = AnchorStyles.Left | AnchorStyles.Right;                    

Dies bedeutet, der Abstand zum linken und rechten Rand des Parents bleibt immer gleich (und dadurch vergrößert oder verkleinert sich das Control entsprechend).

und evtl noch AnchorStyles.Top :p


AlanWake - Fr 03.09.10 18:51

Hi Leute,

mit diesem Code bleibt zwar der bindingNavigator1 angedockt, nur leider wenn ich die Form nach rechts vergrößere, passiert nichts bei der toolStripComboBox1 :(


C#-Quelltext
1:
2:
3:
4:
private void Form1_Resize(object sender, EventArgs e)
{
toolStripComboBox1.Anchor = AnchorStyles.Left | AnchorStyles.Right;
}


CSMN - Fr 03.09.10 19:34

user profile iconAlanWake hat folgendes geschrieben Zum zitierten Posting springen:
Hi Leute,

mit diesem Code bleibt zwar der bindingNavigator1 angedockt, nur leider wenn ich die Form nach rechts vergrößere, passiert nichts bei der toolStripComboBox1 :(


C#-Quelltext
1:
2:
3:
4:
private void Form1_Resize(object sender, EventArgs e)
{
toolStripComboBox1.Anchor = AnchorStyles.Left | AnchorStyles.Right;
}



Hi Alan,

platziere diesen Code bitte nicht im Resize Event sondern im Form Loading Event.

Grüße
CSMN

Edit: Habe das gerade ausprobiert, das funktioniert bei mir nicht. Muss was mit dem bindingNavigator1 zu tun haben, da der ja toolStripComboBox1 hostet. Auf die manuelle Art kann man die Größe jedoch anpassen, das klappt. Vielleicht ist auch jemanden eine schon vorhandene Lösung dafür bekannt?


AlanWake - Fr 03.09.10 19:57

Habe es jetzt so gemacht:


C#-Quelltext
1:
2:
3:
4:
        private void Form1_Load(object sender, EventArgs e)
        {
            toolStripComboBox1.Anchor = AnchorStyles.Left | AnchorStyles.Right;
        }


aber es tut sich wieder nichts :cry:

gruß Alan

ps. @ CSMN: Beim Firefox passt das Programm ja auch die URL Textbox an, wenn ich die Größe verändere, wie machen die das :?:


AlanWake - Fr 03.09.10 20:13

Ich habe die Lösung :)


C#-Quelltext
1:
2:
3:
4:
        private void Form1_Resize(object sender, EventArgs e)
        {
            toolStripComboBox1.Size = new Size(this.Width -70, toolStripComboBox1.Size.Height);
        }


Mit diesem Code ist die Breiter der Form die selbe wie bei der ComboBox (also wird ComboBox ausgeblendet) und die - 70 ist immer der Abstand zwischen beiden :)

gruß Alan


CSMN - Fr 03.09.10 22:28

user profile iconAlanWake hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe die Lösung :)


8) ...


AlanWake - Sa 04.09.10 01:18

:D


Trashkid2000 - Sa 04.09.10 09:29

Oder dynamischer, ohne hart einprogrammierten Wert:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
int defaultWidth = 0;
public Form1()
{
  InitializeComponent();
  defaultWidth = this.Width - toolStripComboBox1.Width;
  this.toolStripComboBox1.Width = this.Width - defaultWidth;
}

protected override void OnResize(EventArgs e)
{
  if (defaultWidth > 0)
    this.toolStripComboBox1.Width = this.Width - defaultWidth;
  base.OnResize(e);
}


//edit: kleinen Fehler im Code verändert

Die Autosize-Eigenschaft der ComboBox muss natürlich bei Anwendung auf false stehen.

Gruss, Marko