Forum: PC-Programmierung visual c# Button ist von Groupbox abhängig


von daniela (Gast)


Lesenswert?

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?

von Dirk K. (merciless)


Lesenswert?

Werden Layouts verwendet? Du kannst auch mal in die Methode
InitializeComponent() der Form schauen, was dort mit dem
Button angestellt wird.

merciless

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

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
von daniela (Gast)


Lesenswert?

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);

von daniela (Gast)


Lesenswert?

hat jemand Lust und Zeit per Teamviewer 2 Minuten drüber zu schauen?

von Christian B. (christian_b5)


Lesenswert?

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 ;)

von c-hater (Gast)


Lesenswert?

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...

von Dirk K. (merciless)


Lesenswert?

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
Noch kein Account? Hier anmelden.