Avatar billede bjarnefilm Juniormester
28. januar 2012 - 16:21 Der er 10 kommentarer og
1 løsning

Hvordan fanger man scroll event?

I mit csharp program, skal formen refreshes, hver gang brugeren scroller. Så har jeg lavet denne funktion:

// void EventHandler(object sender, EventNameEventArgs e)
        public void egen_scroll_event(Object sender, ScrollEventArgs e)
        {
            // Refresh efter scroll.
            // this.Refresh();

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

Men funktionen bliver ikke udført, når programmet køres. Så har jeg surfet på det, og prøvet med:

// Her erklærer jeg en event handler, der skal bruges når brugeren scroller.
        // Koden er hentet fra
        // http://msdn.microsoft.com/en-us/library/system.windows.forms.scrollablecontrol.scroll.aspx
        // public event EventHandler EventName;
        // public event egen_scroll_event Scroll;

        // public delegate void EventNameEventHandler(object sender, EventNameEventArgs e);
        // public delegate void egen_scroll_event(object sender, ScrollEventArgs e);

        // Add event handler for the Scroll events.
        // this.Scroll += new egen_scroll_event();

Men det virker heller ikke. Er der nogen, der kan se hvor fejlen er? Man skal på en eller anden måde sætte scroll eventen sammen med egen_scroll_event.

Ved mit sidste spørgsmål, lukkede jeg for hurtigt. Denne gang skal jeg nok vente lidt, før jeg lukker.

MVH
Bjarne
Avatar billede arne_v Ekspert
28. januar 2012 - 17:38 #1
Hvad daekker "det virker heller ikke" over ?
Avatar billede bjarnefilm Juniormester
28. januar 2012 - 17:49 #2
Jeg har prøvet mig frem. Fx:

## Eksempel start ##
// Her erklærer jeg en event handler, der skal bruges når brugeren scroller.
        // Koden er hentet fra
        // http://msdn.microsoft.com/ (...)
        // public event EventHandler EventName;
        public event egen_scroll_event Scroll;


    // void EventHandler(object sender, EventNameEventArgs e)
        public void egen_scroll_event(Object sender, ScrollEventArgs e)
        {
            // Refresh efter scroll.
            // this.Refresh();

            // 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);
        }
## Eksempel slut ##

Men det giver denne fejlmeddelse: "egen_scroll_event" er en metode, ikke en type.

Nyt eksempel:

## Eksempel start ##
  // Add event handler for the Scroll events.
        this.Scroll += new egen_scroll_event();


// void EventHandler(object sender, EventNameEventArgs e)
        public void egen_scroll_event(Object sender, ScrollEventArgs e)
        {
            // Refresh efter scroll.
            // this.Refresh();

            // 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);
        }
## Eksempel slut ##




Det duer heller ikke. Jeg kan ikke lige huske hvilken fejlmeddelelse, der kommer.
Avatar billede bjarnefilm Juniormester
28. januar 2012 - 17:51 #3
Så vidt jeg kan se, skal der stå noget kode, før definitionen af egen_scroll_event.
Avatar billede arne_v Ekspert
28. januar 2012 - 17:53 #4
det andet eksempel boer virke fint hvis det er placeret rigtigt
Avatar billede bjarnefilm Juniormester
28. januar 2012 - 18:02 #5
Her er koden, som den står i programmet:
          ## Her er en stump af koden før.
            // Tegn pilen, der peger på server samlet tilstand.
            opdater_pil();
        }

        // Her erklærer jeg en event handler, der skal bruges når brugeren scroller.
        // Koden er hentet fra
        // http://msdn.microsoft.com/en-us/library/system.windows.forms.scrollablecontrol.scroll.aspx
        // public event EventHandler EventName;
        // public event egen_scroll_event Scroll;

        // public delegate void EventNameEventHandler(object sender, EventNameEventArgs e);
        // public delegate void egen_scroll_event(object sender, ScrollEventArgs e);

        // Add event handler for the Scroll events.
        this.Scroll += new egen_scroll_event();

        // void EventHandler(object sender, EventNameEventArgs e)
        public void egen_scroll_event(Object sender, ScrollEventArgs e)
        {
            // Refresh efter scroll.
            // this.Refresh();

            // 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);
        }
             
        private void tilstand_server()
        {
            // Se hvilken tilstand serveren er i.
      ## Her er en stumo af koden efter.

Her er fejlmeddelelserne:
Error    1    Invalid token 'this' in class, struct, or interface member declaration    C:\Users\bjs\Desktop\Filer fra Store\Færdigt Csharp\Sommerhus_booking\toftevej59\toftevej59.cs    91    9    toftevej59

Error    2    Invalid token '+=' in class, struct, or interface member declaration    C:\Users\bjs\Desktop\Filer fra Store\Færdigt Csharp\Sommerhus_booking\toftevej59\toftevej59.cs    91    21    toftevej59

Error    3    Method must have a return type    C:\Users\bjs\Desktop\Filer fra Store\Færdigt Csharp\Sommerhus_booking\toftevej59\toftevej59.cs    91    28    toftevej59

Error    4    'System.Windows.Forms.ScrollableControl.Scroll' is a 'event' but is used like a 'type'    C:\Users\bjs\Desktop\Filer fra Store\Færdigt Csharp\Sommerhus_booking\toftevej59\toftevej59.cs    91    14    toftevej59
Avatar billede bjarnefilm Juniormester
28. januar 2012 - 18:36 #6
Her er hele programmet. Jag har taget en kopi, og så har jeg slettet det, der ikke har med scroll-funktionen at gøre.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Configuration;
using System.Net;
using System.Collections;
using System.Web;

namespace WindowsFormsApplication1
{
    public partial class toftevej59 : Form
    {
        public toftevej59() // Her er formens konstruktor
        {
            InitializeComponent() ;

            // Denne linie er for at kalde load.
            this.Load += new System.EventHandler(this.toftevej59_Load) ;
        }

        private void toftevej59_Load(object sender, EventArgs e)
        {
            // Sæt formens størrelse.
            this.WindowState = FormWindowState.Normal;
            egen_maksimer();
        }

        // Her erklærer jeg en event handler, der skal bruges når brugeren scroller.
        // Koden er hentet fra
        // http://msdn.microsoft.com/en-us/library/system.windows.forms.scrollablecontrol.scroll.aspx
        // public event EventHandler EventName;
        // public event egen_scroll_event Scroll;

        // public delegate void EventNameEventHandler(object sender, EventNameEventArgs e);
        // public delegate void egen_scroll_event(object sender, ScrollEventArgs e);

        // Add event handler for the Scroll events.
        // this.Scroll += new egen_scroll_event();

        // void EventHandler(object sender, EventNameEventArgs e)
        public void egen_scroll_event(Object sender, ScrollEventArgs e)
        {
            // Refresh efter scroll.
            // this.Refresh();

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

        private void egen_maksimer()
        {
            // Maksimer formen til valgt størrelse.
            this.Size = new Size(996, 621);
            this.Location = new Point(130, 150);
        }

        private void toftevej59_Paint(object sender, PaintEventArgs e)
        {
            // Erklær et tegne objekt.
            System.Drawing.Graphics tegne_objekt;
            tegne_objekt = this.CreateGraphics();
            Pen pen2 = new Pen(System.Drawing.Color.Black, 1);

            // Tegn de tre firkanter
            tegne_objekt.DrawRectangle(pen2,  15, 15, 300, 540);
            tegne_objekt.DrawRectangle(pen2, 330, 15, 300, 540);
            tegne_objekt.DrawRectangle(pen2, 645, 15, 300, 540);
        }

        private void toftevej59_Load_1(object sender, EventArgs e)
        {
            // Der skal være en Load_1.
            // Jeg ved ikke hvorfor.
        }
    }
}
Avatar billede arne_v Ekspert
28. januar 2012 - 18:46 #7
this.Scroll += new egen_scroll_event();

skal vaere inden i en metode
Avatar billede bjarnefilm Juniormester
28. januar 2012 - 18:59 #8
Jeg skal lige se på det. Jeg vender tilbage imorgen.
Avatar billede bjarnefilm Juniormester
29. januar 2012 - 11:55 #9
Tak for hjælpen.
Jeg har fået et lille skub fremad.
Jeg har lavet et testprogram, og flyttet "this.Scroll += new egen_scroll_event();" ind i konstruktoren.

Det ser sådan her ud:

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

namespace WindowsFormsApplication1
{
    // public delegate void egen_scroll_event(object sender, ScrollEventArgs e);

    public partial class Form1 : Form
    {
        // public event egen_scroll_event Scroll;

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

            egen_scroll_event();
        }

        public void egen_scroll_event()
        {
            if (this.Scroll != null)
                {
            // Til test er der en melder her.
            string bt = "Du scroller.";
            string os = "Melder. Nummer 20";
            MessageBox.Show(bt, os, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            else
            {
                // Til test er der en melder her.
                string bt = "Du scroller ikke.";
                string os = "Melder. Nummer 21";
                MessageBox.Show(bt, os, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

        }
    }
}

Der kommer dog stadig en fejl-meddelelse, fordi this.Scroll nogle gange er lig "null". Men det kigger jeg på.

Smid et svar, så giver jeg point.
Avatar billede bjarnefilm Juniormester
29. januar 2012 - 11:57 #10
Det er til test at der står
// this.Scroll += new egen_scroll_event(Scroll);
Det er lidt indviklet.
Avatar billede arne_v Ekspert
29. januar 2012 - 17:51 #11
svar
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