Avatar billede x-periment Nybegynder
12. januar 2006 - 23:31 Der er 6 kommentarer og
1 løsning

eventhandler string

Er total blank når det kommer til eventhandler....
men har brug for en fix ting som når en string ændre skal sætte diverse variable...
variablen er global og manipuleres et sted men hver gang den ændres sig skal der ske en serie af begivnheder....
Avatar billede bitsch Nybegynder
13. januar 2006 - 00:16 #1
For at lytte til events er det nødvendigt at din "globale variabel" har sådanne. F.eks. en almindelig string har ingen events du kan lytte til. Er det derimod en kontrol i en form, eller en brugerdefineret klasse er der andre muligheder.

Antag at din "globale variabel" er en TextBox
Så kan du lytte til et event som følger:
this.textBox1.TextChanged += new EventHandler(textBox1_TextChanged);

Derved kaldes nedenstående metode hver gang teksten ændres.
        void textBox1_TextChanged(object sender, EventArgs e)
        {
            throw new Exception("The method or operation is not implemented.");
        }

Og naturligvis dette laver ingenting, blot et meget meget kort eksempel.

Så du skal altså starte med at finde ud af noget mere vedr. din globale variabel. Hvis det er én du selv definerer så har du ingen problemer, så kan du gøre hvad du har lyst til, men er det f.eks. en systemvariabel så bliver det mere kompliceret.
Avatar billede bitsch Nybegynder
13. januar 2006 - 01:08 #2
Nedenstående eksempel viser hvorledes du kan lave din egen klasse som fyrer et event når en tekst ændres:
Men som sagt så er du nødt til at vide noget mere om din "globale variabel".

Eksemplet antager at du selv definerer din variabel.

namespace EventHandlerExample
{
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;

    public partial class Form1 : Form
    {
        private MyText myText = null;

        public Form1()
        {
            InitializeComponent();

            this.myText = new MyText();

            this.myText.TextChanged += new EventHandler<TextChangedEventArgs>(MyTextChanged);

            // Linien her vil fyre eventet.
            this.myText.Text = "Hello World";
        }

        void MyTextChanged(object sender, TextChangedEventArgs e)
        {
            MessageBox.Show(e.Text);
        }
    }


    /// <summary>
    /// Demo klasse som rejser TextChanged event når Text ændres.
    /// </summary>
    public class MyText
    {
        private string text = string.Empty;

        public event EventHandler<TextChangedEventArgs> TextChanged;
       
        public string Text
        {
            get
            {
                return this.text;
            }

            set
            {
                if (this.text != value)
                {
                    this.text = value;

                    // Fyr event
                    // Copy to a temporary variable to be thread-safe.
                    // ms-help://MS.VSExpressCC.v80/MS.NETFramework.v20.en/cpref2/html/T_System_EventHandler`1.htm
                    EventHandler<TextChangedEventArgs> temp = TextChanged;
                   
                    if (temp != null)
                    {
                        temp(this, new TextChangedEventArgs(value));
                    }
                }
            }
        }

        public MyText()
        {
        }
     
    }

    /// <summary>
    /// demo EventArgs som "overleveres" når TextChanged eventet fyres.
    /// </summary>
    public class TextChangedEventArgs : EventArgs
    {
        private string text = string.Empty;

        public string Text
        {
            get
            {
                return this.text;
            }
            set
            {
                this.text = value;
            }
        }

        public TextChangedEventArgs(string text)
        {
            this.text = text;
        }
    }

}
Avatar billede nielle Nybegynder
13. januar 2006 - 08:44 #3
Som bitsch er inde på, er en mulig løsning på din problemstilling at indkapsle din streng som en property. Men er du helt sikker på at du har brug for en eventhandler? Måske kan det gøres uden:

using System;

namespace e679152
{
    class Class1
    {
        private static string _dinString = "";
        public static string dinString
        {
            get { return _dinString; }
            set
            {
                string _oldDinString = _dinString;

                _dinString = value;

                if (_dinString != _oldDinString)
                {
                    DoSomething();
                }
            }
        }

        public static void DoSomething()
        {
            Console.WriteLine("dinString blev ændret");
        }

        [STAThread]
        static void Main(string[] args)
        {
            dinString = "Eksperten";
            dinString = "Eksperten";
            dinString = "Er du sikker på at det er en event du skal have fat på?";
        }
    }
}
Avatar billede bitsch Nybegynder
13. januar 2006 - 08:56 #4
Ja det er jo det samme. Det kommer an på hvad man vil og hvor fleksibel man vil lave sin kode (samt stadig... det kommer an på den "globale variabel")
Avatar billede x-periment Nybegynder
15. januar 2006 - 15:30 #5
hmm undskyld mit sene feedback.. har fået det til at virke selvstændigt.. Men skal bruge det sammen med det beskrevet problem i http://www.eksperten.dk/spm/676641 og problemet er det samme lige meget hvordan jeg bikser det her spm sammen med ovenstående. Kort beskrevet problem er at den ene tekstbox.text ikke bliver opdateret når itunes afyre sin event...
Avatar billede x-periment Nybegynder
15. januar 2006 - 19:27 #6
Har løst problemet nu...  så dn første af jer der smider et svar får pointene ... og unskyld ulejligeheden....
Avatar billede bitsch Nybegynder
15. januar 2006 - 19:41 #7
:-)
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