AutoScrollPosition per Code verändern



  • Hallo,

    ich habe ein Panel mit Scrollbalken und möchte gerne per Code die Position des Scrollbalkens auf einen bestimmten Wert setzen.

    private void button1_Click(object sender, EventArgs e)  
    {
        panel1.AutoScrollPosition = new Point(100, 100);    // das geht
    
        panel1.AutoScrollPosition.X = 100;   // geht nicht, Fehlermeldung: 
                                             // Der Rückgabewert ... kann nicht geändert werden, da er keine Variable ist  
    }
    
    private void panel1_Scroll(object sender, ScrollEventArgs e)
    {
        Console.WriteLine(panel1.AutoScrollPosition.X);    // das geht
    }
    

    Ich verstehe nicht, warum der Schreibzugriff auf die X-Komponente nicht möglich ist. Warum geht das nicht? Nach meinem Verständnis ist das ein Integer, wo man eigentlich direkt reinschreiben kann, ohne zuvor ein neues Point-Objekt zu erzeugen.

    Gruß
    Michael



  • Das liegt daran, daß der Datentyp Point ein Wertetype (value type) ist.
    Du mußt also immer den gesamten Datentyp als Variable vorhalten (einlesen, dann Eigenschaft verändern, neu zuweisen):

    var pos = panel1.AutoScrollPosition;
    
    pos.X = 100;
    
    panel1.AutoScrollPosition = pos;
    

    oder eben:

    panel1.AutoScrollPosition1 = new Point(100, panel1.AutoScrollPosition.Y);
    

    s.a. Compiler Error CS1612



  • Danke. Das schreibe ich gleich in meine Sammlung nützlicher Hinweise rein.

    Gruß
    Michael


Log in to reply