Delegat i Zdarzenie == Nerwy

0

Witam wszystkich.
Mam problem odnośnie delegata i zdarzenia. Napisałem klase i podczepiłem pod nią delegata oraz stworzyłem zdarzenie z delegata. Dodałem kod który wywołuje metodę:

Zdarzenie += new Delegat(Klasa.Metoda)

I tutaj zaczynają się problemy <ort>otóż </ort>metoda ta znajduje się w innej klasie więc musiałem wpisać ją w delegacie poprzez referencje - OK. W tej metodzie znajduje sie kod, który dodaje do kontrolki listBox wpis i właśnie ta linia nie chce sie wykonać. Podkraślam, iż wszystkie linie się wykonują oprócz tej.
Co zrobić chlopaki?
Pozdrawiam.

0

Co znaczy 'nie chce sie wykonac' ? Jak wywolujesz zdarzenie?

0
majster590 napisał(a)
Zdarzenie += new Delegat(Klasa.Metoda)

Chyba raczej chodziło o:

Zdarzenie += delegate(Klasa.Metoda)

Czyli z małej litery i "e" na końcu. Mi tak śmiga.

0

Czy metody wywoływane przez delegata nie mają dostępu do kontrolek? Na to by wyglądało. Ponieważ wszystkie instrukcje w metodzie się wykonują oprócz tych dotyczących kontrolek (np. ListBox).
Pomocy jak to obejść ?

0

Sam się zamieszałem.. w sumie po co używasz delegate? :| Ten przykład powyżej to sam napisałem nonsens, bo w sumie poprawiłem tylko kawałek.

Zdarzenie += Klasa.Metoda;

Takie coś działa bez problemu.
Chyba, że jeszcze o coś innego chodzi, czego nie odkryłem w C# ;)

0

Dobrze, wszystkie podane tu przykłady działają tylko chodzi o to, iż metoda wywoływana przez zdarzenie nie wykonuje żadnej lini związanej z kontrolkami Windows Forms (w moim przypadku ListBox'em) wszystko jest ok tylko ze metoda nie chce dodać wpisu do kontrolki. Projekt się kompiluje.

0
        public Form1()
        {
            InitializeComponent();
            button1.Click += this.metoda;
        }

        void metoda(object sender, EventArgs e)
        {
            textBox1.Text += "zostało wywołane zdarzenie jako metoda klasy";
        }

Po kliknięciu buttona widzę nowy tekst w texBox - więc działa. Może u Ciebie problem leży gdzie indziej?

0
public delegate void DodajEventHandler(object sender, DodajEventArgs e);
    public class DodajEventArgs
    {
        private string nick;
        private string ip;

        public DodajEventArgs(string nick, string ip)
        {
            this.nick = nick;
            this.ip = ip;
        }

        public string Nick
        {
            get
            {
                return this.nick;
            }
            set
            {
                this.nick = value;
            }
        }

        public string Ip
        {
            get
            {
                return this.ip;
            }
            set
            {
                this.ip = value;
            }
        }
    }
public partial class Add : Form
    {
        Form1 f;
        public event DodajEventHandler Dodaj;

        public Add()
        {
            InitializeComponent();
            f = new Form1();
            Dodaj = f.dodaj_list;
        }

        public void dodaj_add(DodajEventArgs e)
        {
            if (Dodaj != null)
            {
                Dodaj(this, e);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
                dodaj_add(new DodajEventArgs(textbox1.Text, textbox2.Text));  
        }
    }


delegate void SetTextList(string nick, string ip);

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void dodaj()
        {
            Add add = new Add();
            add.ShowDialog();
        }

        private void SetText(string nick, string ip)
        {
            string wpis = nick + ".:|:." + ip;

            if (list.InvokeRequired)
            {
                SetTextList f = new SetTextList(SetText);
                this.Invoke(f, new string[] { wpis });
            }
            else
            {
                list.Items.Add(wpis);
            }
        }

        public void dodaj_list(object sender, DodajEventArgs e)
        {
            SetText(e.Nick, e.Ip);
        }

        private void dodajToolStripMenuItem_Click(object sender, EventArgs e)
        {
            dodaj();
        }
   }

to mój kod. Bardzo prosiłbym się nie śmiać ponieważ jestm początkujący i nie wiele wiem i nie wiem jak sie rozwijac za bardzo. Jeśli ktoś widzi błąd który mógł spowodować omawiany problem prosze o odp.
Dziękuję.

0

A po co set, get? Nie lepiej:

public string nick;?

0
markac napisał(a)

A po co set, get? Nie lepiej:

public string nick;?

"Nie zaleca się" używania składowych publicznych, lepiej tworzyć akcesory ;]

0

Akurat w przypadku klas dziedziczących po EventArgs nie ma to znaczenia.

Gdybyś skrócił trochę ten kod i dodał komentarze byłoby miło - i pewnie jakieś odpowiedzi by leciały.

1 użytkowników online, w tym zalogowanych: 0, gości: 1