Laden...

Gescrollt und Steuerelementkoordinaten?

Erstellt von andreas-82 vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.279 Views
andreas-82 Themenstarter:in
42 Beiträge seit 2006
vor 16 Jahren
Gescrollt und Steuerelementkoordinaten?

Sorry, besseres Topic ist mir nicht eingefallen.
Also es geht kurz und schmerzlos darum ein Steuerelement das zur Laufzeit erzeugt wird an eine bestimmte Position (Location) erscheinen zu lassen, selbst wenn die Form nach rechts gescrollt ist.

Warum werden immer die 'sichtbaren' Koordinaten und nicht die 'wirklichen' des Forms für die .Location genommen ?(

Hier ein Bsp:

    private void button1_Click(object sender, EventArgs e)
    {
      Label testLabel = new Label();
      testLabel.Text = "Test";
      testLabel.Location = new Point(10, 10);
      testLabel.Size = new Size(50, 15);
      this.Controls.Add(testLabel);
    }

Form nach Click (so weit, so gut):

Fenster verkleinert:

Click-> Label nicht absolut links oben sondern links oben im sichtbaren Bereich:

Nach vergrößern des Fensters das Dilemma:

~ There's no knowledge that is not power~

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo andreas-82,

Control.Anchor
Control.Dock

herbivore

andreas-82 Themenstarter:in
42 Beiträge seit 2006
vor 16 Jahren

Hallo herbivore.

Hatte ich zuerst auch daran gedacht, allerdings handelt es sich um Panels die zeilenweise mit Daten gefüllt aus einer Datenbank ausgelesen werden:

Siehe Anhang


...
      private const Int16 StartXPanel = 3;
      private const Int16 StartYPanel = 159;
...
// Panel erstellen in dem die Labels für jede Zeile geadded werden
        Panel pan = new Panel();
        pan.Width = BreitePanel;
        pan.Height = HoehePanel;
        pan.BorderStyle = BorderStyle.FixedSingle;
        pan.Name = "Zeile";
        //pan.Anchor = AnchorStyles.Left;
        //pan.Dock = DockStyle.Left;

        pan.BackColor = hintergrundfarbe;
        pan.Location = new Point(StartXPanel, StartYPanel + yPositionRelativ); //Startposition des Panel
...

Wenn ich nach rechts gescrollt die Daten aktualisiere, bzw. die Sortierung ändere, ist der ganze Rummel verschoben (siehe Bild).

Ein Anchor bringt keine Änderung und ein Dock 'Pappt' logischerweise das Panel mit voller Höhe direkt an die linke Seite 🙁

~ There's no knowledge that is not power~

andreas-82 Themenstarter:in
42 Beiträge seit 2006
vor 16 Jahren

Hat denn keiner ne Idee? 🙁

Oder vielleicht nen Befehl um die 'Scrollposition' wieder auf den Ursprungszustand zurückzusetzen um erst dann die Label zu erstellen damit sie auf der richtigen Position landen...?

~ There's no knowledge that is not power~

2.760 Beiträge seit 2006
vor 16 Jahren

Oder vielleicht nen Befehl um die 'Scrollposition' wieder auf den Ursprungszustand zurückzusetzen um erst dann die Label zu erstellen damit sie auf der richtigen Position landen...?

Du musst dir ein Panel ableiten, dort gibt es dann ein AutoscrollPosition property welches du allerdings (komischerweise) nur im OnPaint setzen kannst. Die koordinaten dafür sind allerdings auch ein bisschen verquert, musst du dir dann mal im Debugger anschauen.

andreas-82 Themenstarter:in
42 Beiträge seit 2006
vor 16 Jahren

Hey jaensen,
DANKE für deine Antwort, hat mein Problem auf Anhieb gelöst, juhu! =) 👍

Du musst dir ein Panel ableiten, dort gibt es dann ein AutoscrollPosition property welches du allerdings (komischerweise) nur im OnPaint setzen kannst. Die koordinaten dafür sind allerdings auch ein bisschen verquert, musst du dir dann mal im Debugger anschauen.

Kann die Eigenschaft im Übrigen in meinem UserControl direkt setzen, auch ohne OnPaint-Ereignis 👅


this.AutoScrollPosition = new Point(0, 0);
this.AutoScrollPosition = new Point(0, 0);

~ There's no knowledge that is not power~

2.760 Beiträge seit 2006
vor 16 Jahren

Kann die Eigenschaft im Übrigen in meinem UserControl direkt setzen, auch ohne OnPaint-Ereignis

Grummel, warum geht das bei mir nicht 😉