[ popmilan76 @ 23.09.2020. 20:47 ] @
Imam formu1 sa kontrolom button,i formu2,sa jednim buttonom,i zanima me kako da kada kliknem na dugme u formi 1,otvorim formu 2 i u ubacim drugi event za buttonclick?

Nesto tipa

form2 uplate = new form2();
uplate.button1.click += uplate.fakture;
uplate.show();
[ Mihajlo Cvetanović @ 24.09.2020. 11:02 ] @
Probaj samo form2.button1 da promeniš iz protected u public.
[ popmilan76 @ 25.09.2020. 14:15 ] @
To jesam uradio,nije to problem...Nego,taj button ima vec svoj onclick event,i ja treba da ucitam neki drugi,i to nece...Ali hoće tako što ne dodeljujem nikakav event ,dakle bez eventa onclick,samo ubacim taj drugi i tada radi..
[ Shadowed @ 25.09.2020. 17:54 ] @
A sta se tacno desava? Ili se ne desava a ocekujes?
Ako su i button1 i funckija fakture public i ako fakture ima odgovarajuci potpis da bude handler za event Button.Click ne bi trebalo da bude problem. Ako taj button vec ima handler za click i dodas mu i ovaj drugi izvrsice se oba, tim redom kojim su dodati.

S druge strane, to sto radis, cak i ako profunkcionise, najverovatnije ne bi trebalo (tako) da radis :)
[ popmilan76 @ 25.09.2020. 20:32 ] @
Hocu da izbrisem postojeći onclick event i da stavim drugi?Button je public.

Mislim može i ovako da nema event,pa da ga ja dodam,ali za nekada ce mi zatrebati.
[ Shadowed @ 25.09.2020. 20:45 ] @
Ako hoces da izbacis taj prvobitni, mozes sa -= (samo sto i on mora biti public ako hoces van forme to da uradis).

Npr. ako imas:

Code (csharp):

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

          public void button1_Click(object sender, EventArgs e)
          {
               MessageBox.Show("form2");
          }

          public void button1_Click2(object sender, EventArgs e)
          {
               MessageBox.Show("form1");
          }
     }


i button_Click je vec dodat kao event handler, mozes u glavnoj formi uraditi sledece:
Code (csharp):

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

          private void button1_Click(object sender, EventArgs e)
          {
               Form2 frm = new Form2();
               frm.button1.Click -= frm.button1_Click;
               frm.button1.Click += frm.button1_Click2;
               frm.Show();
          }
     }
 



Kada u glavnoj formi kliknes na button i pojavi se druga forma i na njoj kliknes na button, dobices samo poruku form1.
[ popmilan76 @ 25.09.2020. 22:42 ] @
Hvala.Znaci moram da ga izbrisem,pa da ga dodam.Ok,probacu.
[ Shadowed @ 25.09.2020. 22:52 ] @
Pa, rekao si da hoces da iznacis stari i ubacis novi. Sa -= uklanjas stari i sa += dodajes novi. Ne moras uklanjati i dodavati isti. Obrati paznju da tamo ima Click i Click2 metod. Na brzinu sam pravio pa nisam bas davao neka narocita imena :)

Edit: Evo, prikacio sam i projekat.
[ popmilan76 @ 26.09.2020. 09:49 ] @
Ne,razumemo se ...Ali ne mogu da ubacim novi ,ako već postoji onclick event...Ja sam mislio da je dovoljno samo da ubacim novi,bez obzira da l postoji stari...bez -=,samo +=...Hvala puno....
[ Mihajlo Cvetanović @ 26.09.2020. 11:21 ] @
Generalno možeš da ubaciš novi. Sistem će ih sve zapamtiti i pozvati. To odgovorno tvrdimo i ja i Shadowed. Možda nisi hteo da kažeš da "ne možeš" nego da "nećeš" da ubaciš novi ako jedan već postoji?

S druge strane, ako možeš da menjaš sve sorseve što opšte registruješ prvi OnClick? Nemoj ga registrovati, pa nećeš posle morati ni da ga deregistruješ.
[ popmilan76 @ 26.09.2020. 11:56 ] @
Ne,nemam ja problem da kažem i da ne znam,kao što i ne znam...Nego sam mislio da kada ubacim += new event,da samim tim dolazi na to mesto,i briše prethodni onclick?
[ Shadowed @ 26.09.2020. 12:23 ] @
Jasno. Ne brise, zato je +=, inace bi bila samo dodela tj. =
S druge strane, sto se arhitekture tice, ako ti je vec i event i handler u Form2, ne bi trebalo da spolja to menjas. Uglavnom je bolje da se forma bavi svojim poslom i da sama odredjuje kako ce obradjivati klik na dugme ili sta god da se na njoj desava. Naravno, to moze da radi na osnovu parametara prosledjenih od spolja i sl. Postoji i dependency injection gde se od spolja daje sta ce pozivati ili koristiti ali to drugacije funkcionise :)
Mislim, ne teram te da menjas, samo skrecem paznju na bolju praksu.

Takodje, baci pogled na WPF. Jako dobra tehnologija za UI a sve sto je MS kasnije pravio za UI su neke varijacije na tu temu.
[ mjanjic @ 26.09.2020. 12:47 ] @
Ostaje ti ili da svaki tater radi jednu i samo jednu stvar na klik, ili da sve te ostale događaje staviš u tu funkciju koja se poziva.

Postoje i složeniji načini, da klik na taster ne poziva uvek istu metodu, ali moraš da se zezaš sa argumentima ili da proveravaš stanje nekog drugog kontrolnog elementa (npr. da li je stanje nekog čekboksa ili radio tastera True ili False). Doduše, ako baš imaš potrebu da npr. jedan taster poziva 5 različitih Click metoda u zavisnosti od nečeg drugog, najjednostavnije je sve to staviti u jednu Click metodu pa uslovno izvršavati kod (Switch ili if/else), dok bi drugi način bio da stvarno imaš 5 tastera, ali da ti 4 uvek budu sakrivena ili ispod onog koji treba da bude aktivan. Međutim, UI ne treba da sadrži takve komplikacije zbog kasnijeg redizajna ili portovanja za drugu platformu.