Avatar billede bjarnefilm Juniormester
30. januar 2012 - 22:11 Der er 9 kommentarer og
1 løsning

En eventhandler til scroll

Jeg er ved at lave en funktion til et csharp program. Funktionen går ud på, at når brugeren scroller, så skal formen refreshes. Funktionen skal bruges i et stort program, men under udvikling har jeg lavet et test-program. Her er det:

using System;
using System.Windows.Forms;
using System.Drawing;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1() // Her er formens konstruktor
        {
            InitializeComponent();
            this.WindowState = FormWindowState.Normal;
            this.Size = new Size(996, 621);
            this.Location = new Point(130, 150);
            // An EventHandler is assigned to the scroll event
            this.Scroll += new egen_scroll_event(this.Scroll);  // Her er linie 17.
        }
    }

    public delegate void egen_scroll_event(object sender, ScrollEventArgs e);
    // A class that works just like scrollbar, but sends event notifications whenever the list changes.
    public class scroll_klasse
    {
        // An event that clients can use to be notified whenever the user scrolls.
        public event egen_scroll_event Scroll;
        // Invoke the Changed event; called whenever scroll
        protected virtual void OnChanged(ScrollEventArgs e)
        {
            if (Scroll != null)
                Scroll(this, e);
        }
        public void egen_scroll_event(object sender, ScrollEventArgs e)
        {
            Console.WriteLine("This is called when the event fires.");
            // Her skal formen refreshes.
        }
    }
}

Der er en fejl i linie 17. Her er fejlmeddelelsen:

Error    1    The event 'System.Windows.Forms.ScrollableControl.Scroll' can only appear on the left hand side of += or -=    C:\Users\bjs\Desktop\...\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs    17    55    WindowsFormsApplication1

Under properties er autoscroll sat til true.

Er der en, der kan se hvorfor fejlmeddelelsen kommer?

MVH
Bjarne
Avatar billede arne_v Ekspert
30. januar 2012 - 22:15 #1
Du kan ikke sende this.Scroll med over som argument.
Avatar billede Syska Mester
30. januar 2012 - 22:21 #2
Du skal nok sende "this" med over ... og fra den side tage den event og assign ting til den.

Som der står ... Scroll kan kun forekomme på venstre side.

mvh
Avatar billede bjarnefilm Juniormester
30. januar 2012 - 22:23 #3
Så vidt jeg kan se, skal der stå
this.Scroll += new egen_scroll_event("En funktion");

Så er spørgsmåler bare hvilken?
Avatar billede Syska Mester
30. januar 2012 - 22:28 #4
this.Scroll += egen_scroll_event;
Avatar billede Syska Mester
30. januar 2012 - 22:28 #5
Avatar billede bjarnefilm Juniormester
30. januar 2012 - 22:37 #6
Jeg har lavet copy og paste med dit indlæg.

          this.Location = new Point(130, 150);
            // An EventHandler is assigned to the scroll event
            this.Scroll += egen_scroll_event;  // Her er linie 17.
        }
    }

Det virker desværre ikke. Her er fejl meddelelsen:

Error    1    'WindowsFormsApplication1.egen_scroll_event' is a 'type' but is used like a 'variable'    C:\Users\bjs\Desktop\Filer fra Store\Færdigt Csharp\Sommerhus_booking\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs    17    28    WindowsFormsApplication1
Avatar billede bjarnefilm Juniormester
30. januar 2012 - 22:44 #7
Den var god, den her: http://msdn.microsoft.com/ (...)(v=vs.80).aspx

Jeg har lavet denne funktion:

private void Form1_Scroll(object sender, ScrollEventArgs e)
        {
            // Console.WriteLine("This is called when the event fires.");
            // Her skal formen refreshes.

            // Til test er der en melder her.
            // Brødtekst
            string bt = "Du scroller.";
            // Overskrift
            string os = "Melder. Nummer 20";
            MessageBox.Show(bt, os, MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

Det er dejligt simpelt og det virker.

Smid et svar, så giver jeg point.
Avatar billede Syska Mester
30. januar 2012 - 22:45 #8
Den skal peje på en method ... og ikke en type. Den type den pejer på skal have signaturen:
void egen_scroll_event(object sender, ScrollEventArgs e)


Dine navne er lidt forvirrende, da jeg nu kan se du har flere tign som hedder "egen_scroll_event", jeg så kun din method i din Scroll class.

Men kan ikke lige se hvorfor du vil lave din egen scroll class.

mvh
Avatar billede Syska Mester
30. januar 2012 - 22:45 #9
svar
Avatar billede bjarnefilm Juniormester
30. januar 2012 - 23:01 #10
Nu hvor jeg ved at man kan dobbeltklikke på eventen, så er det helt misforstået at lave sin egen klasse. Det er også temmelig indviklet. Problemet er, at jeg tegner nogle firkanter med DrawRectangle. Når brugeren scroller, tegnes firkanterne igen, men de gamle firkanter bliver ikke slettet. Og så bliver formen fyldt med sorte streger. Men det problem har jeg fået løst nu. Mange tak for dit indlæg.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester