C# Dynamisch button koppelen aan lokaal event

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dag Allen,

Zit het volgende probleem;
In een file staat een functie welke dynamisch buttons aanmaakt voor een andere file.
LinkButton myBtn = new
myBtn.Text = "test";
myBtn.Command += <gewenst event op de pagina waar de button zal komen;
myBtn.CommandArgument = "testargument";

Wanneer ik nu een command event wil opvangen gaat dat natuurlijk niet.

Weet iemand hoe ik dit goed kan aanpakken?

Alvast bedankt voor de hulp! _/-\o_

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Geef de delegate door als argument naar de functie die de button maakt :?
Ik zie 't probleem niet of ik snap de vraag niet. Misschien helpt 't als je iets meer moeite doet in een topicstart (zoals beschreven in onze Quickstart) voortaan. Voor nu volstaat 't als je je probleem even in wat meer detail zou willen uitleggen.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op vrijdag 13 april 2012 @ 17:35:
Geef de delegate door als argument naar de functie die de button maakt :?
Ik zie 't probleem niet of ik snap de vraag niet. Misschien helpt 't als je iets meer moeite doet in een topicstart (zoals beschreven in onze Quickstart) voortaan. Voor nu volstaat 't als je je probleem even in wat meer detail zou willen uitleggen.
Ok, zal het wat verder uitleggen.

In class A maak ik een instance van class B.
Vervolgens roep ik een method aan in class B (vanuit class A).
Deze method maak dynamisch een asp:linkbutton aan met een command event.
Wanneer er dus op de button geklikt wordt dient er een method aangeroepen te worden in class A.
Deze -in class A- aan te roepen method moet dus bij het aanmaken van de button in class B aan de myBtn.command += <>.

Als ik zoek op Google e.d. kom ik uit bij delegates, action<>, func<> en wat niet.
Maar ik kom er gewoon niet aan uit.

Hierbij mijn code
class A;
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
protected void Page_Init(object sender, EventArgs e)
    {
        nvannu.layout l = new nvannu.layout();

        Ltabs.Controls.Add(l.layout_tabs());
    }

    public void BvorigeClick(object sender, CommandEventArgs e)
    {
        if (Page.IsValid)
        {
            opslaan();
        }

        Response.Redirect(e.CommandArgument.ToString());
    }


class B;
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public Panel layout_tabs()
        {
            string sPath = System.Web.HttpContext.Current.Request.Url.AbsolutePath;
            System.IO.FileInfo oInfo = new System.IO.FileInfo(sPath);
            string scriptnaam = oInfo.Name;

            LTabs.Add("test.aspx|1.test");
            LTabs.Add("test2.aspx|2.test");
            LTabs.Add("test3.aspx|3.test");

            int stap = 0;
            if (scriptnaam == "test.aspx") stap = 1;
            if (scriptnaam == "test1.aspx") stap = 2;
            if (scriptnaam == "test2.aspx") stap = 3;

            Panel myPnl = new Panel();

            myPnl.Controls.Clear();

            for (int i = 1; i < LTabs.Count; i++)
            {
                string[] tabInfo = LTabs[i-1].Split('|'); //WV -1 want is 0 based!
                
                LinkButton myBtn = new LinkButton();
                myBtn.Text = tabInfo[1];
                if (stap > i)
                {
                    myBtn.CssClass = "tab_afgerond";
                    //BvorigeClickDelegate testdel = delegate(object sender, CommandEventArgs e);

                    myBtn.Command += delegate(object sender, CommandEventArgs eventArgs) { /**/ };
                    myBtn.CommandArgument = tabInfo[0];
                    myBtn.Enabled = true;
                }
                else if (stap < i)
                {
                    myBtn.CssClass = "tab";
                    myBtn.Enabled = false;
                }
                else if (stap == i)
                {
                    myBtn.CssClass = "tab_sel";
                    myBtn.Enabled = false;
                }
                
                myPnl.Controls.Add(myBtn);
            }

            return myPnl;
        }



EDIT:

Inmiddels is het opgelost. Ik hoefde niets met delegate te doen.
Maar met action<> en dan de signature van de method aanhouden.
Dan kun ik de method meegeven en als argument toekennen aan de btn.command. :D

[ Voor 3% gewijzigd door Verwijderd op 16-04-2012 14:22 ]