Guten Tag, ich habe ein Win Form Projekt das in Visualstudio erzeugt wurde und ich soll die Form erweitern. Hier gibt es aber einige Ungereimtheiten. zB habe ich einen Button in einer Groupbox drinnen, wenn ich die größe der Groupbox verändere ändert sich auch die Position des Buttons. Auch wenn ich in den Eigenschaften des Buttons das Anchor auf None gesetzt habe. Außerdem hat die Form beim Ausführen nicht die Größe die ich im Designer gezeichnet habe. Wo muss ich nach dem Fehler suchen?
Werden Layouts verwendet? Du kannst auch mal in die Methode InitializeComponent() der Form schauen, was dort mit dem Button angestellt wird. merciless
Dirk K. schrieb: > Methode InitializeComponent() der Form schauen Und wenn nicht da, dann in irgend ein "Resize- Draw- Paint- oder Show-" EVENT (usw) schauen. Vielleicht ändert sich die Button / Form-Position- und Größe erst (zur Laufzeit) per Code. daniela schrieb: > wenn ich die größe > der Groupbox verändere ändert sich auch die Position des Buttons. > Auch wenn ich in den Eigenschaften des Buttons das Anchor auf None > gesetzt habe. Mit "Custom-Steuerelementen" kann man sowas "bauen", die können das auch überschreiben, zur "Design-Time". Ist deine Groupbox auch eine richtige Groupbox und der Button ein richtiger Button? Oder "erbt" das nur davon? Oder klappt es schon? Edit: Suche einfach im Code (mit der Suchfunktion), wo "Size" oder "Location / Position" in einer Zuweisung benutzt wird.
:
Bearbeitet durch User
Dirk K. schrieb: > Werden Layouts verwendet? Wo sehe ich das? Dirk K. schrieb: > Du kannst auch mal in die Methode > InitializeComponent() der Form schauen, was dort mit dem > Button angestellt wird. so sieht das aus. Ich sehe nichts ausfälliges!
1 | |
2 | // btnInit
|
3 | //
|
4 | this.btnInit.Anchor = System.Windows.Forms.AnchorStyles.None; |
5 | this.btnInit.Cursor = System.Windows.Forms.Cursors.Default; |
6 | this.btnInit.FlatStyle = System.Windows.Forms.FlatStyle.System; |
7 | this.btnInit.Location = new System.Drawing.Point(854, 18); |
8 | this.btnInit.Margin = new System.Windows.Forms.Padding(0); |
9 | this.btnInit.Name = "btnInit"; |
10 | this.btnInit.Size = new System.Drawing.Size(87, 28); |
11 | this.btnInit.TabIndex = 34; |
12 | this.btnInit.Text = "Initialize"; |
13 | this.btnInit.Click += new System.EventHandler(this.btnInit_Click); |
hat jemand Lust und Zeit per Teamviewer 2 Minuten drüber zu schauen?
Villeicht liegt der Fehler auch bei form.Load. Du kannst mal versuchen nach "btnInit.Anchor" mit der Textsuche zu suchen, bestimmt wirst du da etwas finden oder nach einem form.resize Event suchen ;)
daniela schrieb: > zB habe ich einen Button in einer Groupbox drinnen, wenn ich die größe > der Groupbox verändere ändert sich auch die Position des Buttons. > Auch wenn ich in den Eigenschaften des Buttons das Anchor auf None > gesetzt habe. > Außerdem hat die Form beim Ausführen nicht die Größe die ich im Designer > gezeichnet habe. > Wo muss ich nach dem Fehler suchen? Was ist das für ein Button? Wirklich nur ein einfacher Button oder etwa ein Radiobutton mit Appearance=Appearance.Button? Falls letzteres, ist das Verhalten normal. Die Groupbox macht aus darin enthaltenen Radiobuttons immer(*) eine radio button group und versucht, sie als solche zu verwalten, insbesondere: sie schön gleichmäßig über die verfügbare Client-Fläche zu verteilen. Sie hat allerdings keine Ahnung von der Appearance-Eigenschaft und benutzt die Radiobuttons immer, als stünde die Appearance-Eigenschaft auf Appearance.Normal. Das liegt daran, dass das Verhalten auf Win32-API-Ebene gesteuert wird, unterhalb von DotNet. Die dortige Groupbox weiss nix davon, dass sich der Radiobutton ganz anders zeichnen wird, als von ihr erwartet. (*) nicht wirklich immer, nur meistens. Offensichtlich gibt es Konstellationen, bei denen sie das unterläßt. Wenn es mein Problem wäre, würde ich herausfinden können, wann genau das der Fall ist und dann diese Situation absichtlich herbeiführen. Da es aber dein Problem ist, überlasse ich dir diese Fleißarbeit...
daniela schrieb: > Dirk K. schrieb: >> Werden Layouts verwendet? > > Wo sehe ich das? Verwendung von FlowLayoutPanel oder TableLayoutPanel in der Form. > Dirk K. schrieb: >> Du kannst auch mal in die Methode >> InitializeComponent() der Form schauen, was dort mit dem >> Button angestellt wird. > > so sieht das aus. Ich sehe nichts ausfälliges! Wird this.btnInit noch irgendwo in der Methode verwendet? Hier der Code, wenn ich eine neue Form erzeuge, eine Groupbox anlege und darin einen Button platziere:
1 | private void InitializeComponent() |
2 | {
|
3 | this.groupBox1 = new System.Windows.Forms.GroupBox(); |
4 | this.button1 = new System.Windows.Forms.Button(); |
5 | this.groupBox1.SuspendLayout(); |
6 | this.SuspendLayout(); |
7 | //
|
8 | // groupBox1
|
9 | //
|
10 | this.groupBox1.Controls.Add(this.button1); |
11 | this.groupBox1.Location = new System.Drawing.Point(46, 51); |
12 | this.groupBox1.Name = "groupBox1"; |
13 | this.groupBox1.Size = new System.Drawing.Size(627, 293); |
14 | this.groupBox1.TabIndex = 0; |
15 | this.groupBox1.TabStop = false; |
16 | this.groupBox1.Text = "groupBox1"; |
17 | //
|
18 | // button1
|
19 | //
|
20 | this.button1.Location = new System.Drawing.Point(137, 86); |
21 | this.button1.Name = "button1"; |
22 | this.button1.Size = new System.Drawing.Size(75, 23); |
23 | this.button1.TabIndex = 0; |
24 | this.button1.Text = "button1"; |
25 | this.button1.UseVisualStyleBackColor = true; |
26 | //
|
27 | // Form1
|
28 | //
|
29 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); |
30 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; |
31 | this.ClientSize = new System.Drawing.Size(800, 450); |
32 | this.Controls.Add(this.groupBox1); |
33 | this.Name = "Form1"; |
34 | this.Text = "Form1"; |
35 | this.groupBox1.ResumeLayout(false); |
36 | this.ResumeLayout(false); |
37 | }
|
Mit
1 | this.groupBox1.Controls.Add(this.button1); |
wird der Button zum Child der Groupbox gemacht. Suche doch mal alle Stellen mit deinem Button in deiner Methode und poste die hier. merciless
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.