NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Jak pouzit funkci z Form1 ve Form2

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
davaj
Člen
Avatar
davaj:11.3.2016 14:01

Ahoj, mam 2 formy, kde pouzivam stejne funkce treba tyto:

//form1.cs
/* play */
private void playPB_Click(object sender, EventArgs e)
{
    play();
}
private void play()
{
    WMPlayer.URL = @current_song;
    WMPlayer.Ctlcontrols.play();
    if (WMPlayer.playState == WMPLib.WMPPlayState.wmppsPaused)
    {
        WMPlayer.Ctlcontrols.play();
    }
}
//form2.cs
/* play */
private void playPB_Click(object sender, EventArgs e)
{
    play();
}
private void play()
{
    WMPlayer.URL = @current_song;
    WMPlayer.Ctlcontrols.play();
    if (WMPlayer.playState == WMPLib.WMPPlayState.wmppsPaused)
    {
        WMPlayer.Ctlcontrols.play();
    }
}

Ja bych chtel tu funkci ve formu2 pouzit tak, aniz bych mel 2x to stejne v obou formularich. Nevim jak ji vyvolat.

 
Odpovědět
11.3.2016 14:01
Avatar
Odpovídá na davaj
Lukáš Hypša:11.3.2016 14:26

Já se v tom nevyznám :D ale nešlo by něco jako Form1.Play()?
Prostě jako když voláš metodu z jiné třídy?

 
Nahoru Odpovědět
11.3.2016 14:26
Avatar
Michal Pipal
Člen
Avatar
Odpovídá na davaj
Michal Pipal:11.3.2016 15:10

Nevim, v cem delas (WF, WPF, UWP), ale predpokladam, ze se ti formular dedi, z Form, neco jako Form2 : Form nebo z Page, pokud pracujes v necem jinem.
Zkusil bych vytvorit mezitridu, tzn. neco jako:

public class MyHelpForm : Form
{
        //spolecny kod pro obe stranky
}

A z tehle pomocne tridy az tvorit formulare, tudiz prepsat hlavicku formularu na:

public class Form1 : MyHelpForm

, resp.:

public class Form2 : MyHelpForm
 
Nahoru Odpovědět
11.3.2016 15:10
Avatar
davaj
Člen
Avatar
davaj:11.3.2016 15:49

Editováno 11.3.2016 15:52
 
Nahoru Odpovědět
11.3.2016 15:49
Avatar
davaj
Člen
Avatar
Odpovídá na Michal Pipal
davaj:11.3.2016 15:51

Ten MyHelpForm nezna dane komponenty, ktere jsou ve formu obsazeny..
treba WMPlayer
Error 3 The name 'WMPlayer' does not exist in the current context

Jak bych pak volal funkci v MyHelpForm ve form1 ?

 
Nahoru Odpovědět
11.3.2016 15:51
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na Michal Pipal
ostrozan:11.3.2016 19:06

Podle toho "Form" je to WF - ve WPF by to bylo "Window " :-)

 
Nahoru Odpovědět
11.3.2016 19:06
Avatar
jzvire01
Člen
Avatar
jzvire01:11.3.2016 21:40

Udělej si třídu, která je public static a poté tam dej tu metodu, která bude taky public static. Pak stačí u těch oken dát jen Třída.Metoda.

Editováno 11.3.2016 21:42
 
Nahoru Odpovědět
11.3.2016 21:40
Avatar
jzvire01
Člen
Avatar
jzvire01:11.3.2016 21:51

A nebo tu metodu v to m formu1 udělej public a v tom druhym stačí v tom kliku udělat

Form1 form1 = new Form1();
form1.Metoda();
 
Nahoru Odpovědět
11.3.2016 21:51
Avatar
Odpovídá na davaj
Michal Štěpánek:11.3.2016 23:28

Funkci ve Form1 udělej jako public. Do Form2 si předej instanci Form1 a pak můžeš použít tu funkci z Form1.

Nahoru Odpovědět
11.3.2016 23:28
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
davaj
Člen
Avatar
davaj:12.3.2016 12:14

Tlacitko pak nereaguje a nic nedela.

kdyz mam ve form2:
Form1 form1 = new Form1();

form1.play();
(VS ukazuje Form1 Form2.form1 kdyz najedu mysi na form1)
mam to jako public

Chtel bych to vyresit pomoci te pomocne tridy.. ale nedari se mi to .. Je tu nekde clanek ?
Podarilo se mi akorat z Form2 (temi stejnymi tlacitky) ovladat formular Form1, coz nechci..

 
Nahoru Odpovědět
12.3.2016 12:14
Avatar
jzvire01
Člen
Avatar
jzvire01:12.3.2016 12:24

Udělej si třídu a v ní metodu:

public static class Trida
{
 public static void Play()
{
 WMPlayer.URL = @current_song;
    WMPlayer.Ctlcontrols.play();
    if (WMPlayer.playState == WMPLib.WMPPlayState.wmppsPaused)
    {
        WMPlayer.Ctlcontrols.play();
    }
}
}

A pak stačí dát jen Trida.Play;

 
Nahoru Odpovědět
12.3.2016 12:24
Avatar
davaj
Člen
Avatar
Odpovídá na jzvire01
davaj:12.3.2016 12:57

Error 3 The name 'WMPlayer' does not exist in the current context
Error 3 The name 'current_song' does not exist in the current context
Error Trida.cs

 
Nahoru Odpovědět
12.3.2016 12:57
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.