mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: daniela (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Dirk K. (merciless)
Datum:

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

merciless

Autor: Tim S. (freak_ts) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: daniela (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!
 
// btnInit
            // 
            this.btnInit.Anchor = System.Windows.Forms.AnchorStyles.None;
            this.btnInit.Cursor = System.Windows.Forms.Cursors.Default;
            this.btnInit.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.btnInit.Location = new System.Drawing.Point(854, 18);
            this.btnInit.Margin = new System.Windows.Forms.Padding(0);
            this.btnInit.Name = "btnInit";
            this.btnInit.Size = new System.Drawing.Size(87, 28);
            this.btnInit.TabIndex = 34;
            this.btnInit.Text = "Initialize";
            this.btnInit.Click += new System.EventHandler(this.btnInit_Click);


Autor: daniela (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat jemand Lust und Zeit per Teamviewer 2 Minuten drüber zu schauen?

Autor: Christian B. (christian_b5)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Dirk K. (merciless)
Datum:

Bewertung
0 lesenswert
nicht 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:
private void InitializeComponent()
    {
      this.groupBox1 = new System.Windows.Forms.GroupBox();
      this.button1 = new System.Windows.Forms.Button();
      this.groupBox1.SuspendLayout();
      this.SuspendLayout();
      // 
      // groupBox1
      // 
      this.groupBox1.Controls.Add(this.button1);
      this.groupBox1.Location = new System.Drawing.Point(46, 51);
      this.groupBox1.Name = "groupBox1";
      this.groupBox1.Size = new System.Drawing.Size(627, 293);
      this.groupBox1.TabIndex = 0;
      this.groupBox1.TabStop = false;
      this.groupBox1.Text = "groupBox1";
      // 
      // button1
      // 
      this.button1.Location = new System.Drawing.Point(137, 86);
      this.button1.Name = "button1";
      this.button1.Size = new System.Drawing.Size(75, 23);
      this.button1.TabIndex = 0;
      this.button1.Text = "button1";
      this.button1.UseVisualStyleBackColor = true;
      // 
      // Form1
      // 
      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
      this.ClientSize = new System.Drawing.Size(800, 450);
      this.Controls.Add(this.groupBox1);
      this.Name = "Form1";
      this.Text = "Form1";
      this.groupBox1.ResumeLayout(false);
      this.ResumeLayout(false);
    }

Mit
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.