Komunikace mezi okny c# – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Komunikace mezi okny c# – .NET – Fórum – Programujte.comKomunikace mezi okny c# – .NET – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
pejtrik0
Newbie
18. 1. 2016   #1
-
0
-

Zdravim mohli by jste mi poradit, jak mám nastavit okna aby četli proměnný?

Tady je vlastně hlavní okno 

namespace Pexeso_kludsky
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.btnStartGame.IsEnabled = false;
        }

        private void btnAddPlayer_Click(object sender, RoutedEventArgs e)
        {
            if (this.txtPlayerName.Text != "")

potom otevřu další a chtěl bych vlastně přečíst ty data co se mi uloží do listboxu, ale ta proměnná se mi tam neukazuje. Nejspíš mám nastavený blbě ty třídy. Jsem v tom nový. Děkuju

namespace Pexeso_kludsky
{
    /// <summary>
    /// Interaction logic for MemoryGame.xaml
    /// </summary>
    public partial class MemoryGame : Window
    {

        private MainWindow mainData;
        public MemoryGame()
        {
            
            InitializeComponent();

            var lblPlayer1Name = lbxPlayerName.Items[0].ToString();
        }

        private void Window_Loaded_1(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("appka funguje", "test", MessageBoxButton.OK, MessageBoxImage.Information);
        }

    }


nejde mi vlastně přečíst ta proměnná lbxPlayerName

Díky za rady

Nahlásit jako SPAM
IP: 89.102.83.–
BDS+3
Věrný člen
18. 1. 2016   #2
-
0
-

proměnné, které chceš sdílet musí být public a musíš předávat "odkazy" na okna, ke kterým chceš přistupovat. Něco jako: 

MainWindow mainwindow;

public MemoryGame(MainWindow wnd)
{
 InitializeComponent();
 mainwindow  = wnd;
}

pak přes mainwindow budeš přistupovat k jeho public prvkům

Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
pejtrik0
Newbie
18. 1. 2016   #3
-
0
-

#2 BDS
to já bych spíš to potřeboval obráceně aby to window memory game četlo ty hodnoty z mainwindow...já jsem si vlastně nedefinoval ten listbox používám ho jako jenom na to aby se mi někam ukládali ty jména co se napíšou v textboxu. Možná bude lepší když to sem dám celý ten kod.

 public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.btnStartGame.IsEnabled = false;
        }

        public void btnAddPlayer_Click(object sender, RoutedEventArgs e)
        {
            if (this.txtPlayerName.Text != "")
            {
                lbxPlayerName.Items.Add(this.txtPlayerName.Text);
                this.txtPlayerName.Focus();
                this.txtPlayerName.Clear();

                if (lbxPlayerName.Items.Count == 2)
                {
                    this.txtPlayerName.IsEnabled = false;
                    this.btnAddPlayer.IsEnabled = false;
                    this.btnStartGame.IsEnabled = true;
                }
            }
            else
            {
                MessageBox.Show("Prosím vyplnte jméno","Error",MessageBoxButton.OK, MessageBoxImage.Warning);
            }
        }


        private void txtPlayerName_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                btnAddPlayer_Click(sender, e);
            }
        }

        public void btnStartGame_Click(object sender, RoutedEventArgs e)
        {
            MemoryGame play = new MemoryGame();
            play.ShowDialog();
            this.Close();
        }
    }
}
Nahlásit jako SPAM
IP: 89.102.83.–
Řešení
BDS+3
Věrný člen
18. 1. 2016   #4
-
0
-
Vyřešeno Nejlepší odpověď

#3 pejtrik

aby to window memory game četlo ty hodnoty z mainwindow

když to uděláš jak jsem psal tak může:

    public partial class MemoryGame : Window
    {

        private MainWindow mainData;
        public MemoryGame(MainWindow wnd)
        {            
           mainData = wnd; 
           InitializeComponent();
        }

        private void Window_Loaded_1(object sender, RoutedEventArgs e)
        {
          CtiZMain();  
          MessageBox.Show("appka funguje", "test", MessageBoxButton.OK, MessageBoxImage.Information);
        }
        
        private void CtiZMain()
        {
         MessageBox.Show(mainData.Title); 
         //přes mainData můžeš přistupovat ke všemu co je public
        }

    }

a takhle MainWindow předáš:

public void btnStartGame_Click(object sender, RoutedEventArgs e)
        {
            MemoryGame play = new MemoryGame(this);
            play.ShowDialog();
        }
Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
pejtrik0
Newbie
18. 1. 2016   #5
-
0
-

super díky... tak jsem to skoro měl akorát jsem nevěděl jak tomu předat ten argument tím myslím to this v new Memory game... sice to pořád nedělá to co chci ale aspon už vím jak na to. díky ještě jednou

Nahlásit jako SPAM
IP: 89.102.83.–
pejtrik0
Newbie
16. 2. 2016   #6
-
0
-

můžu poprosit jak mam přečíst label v jednom formuláři a uložit tu jeho hodnotu do labelu ve druhym formuláři?

 tady vkládám v tom prvním labelu

 if (this.txtAddPlayer.Text != "")
	{
           if (lblPlayer1Name.Text == "")
                    {
                       lblPlayer1Name.Text = txtAddPlayer.Text;
 			this.txtAddPlayer.Focus();

a takhle to zkouším přečíst, ale nic se mi nezobrazuje

lblPlayer1NameGame.Text = mainData.lblPlayer1Name.Text;

mainData.lblPlayer2Name.Text = Convert.ToString(lblPlayer2NameGame.Text);

lblPlayer1test.Text = mainData.lblPlayer1Name.Text.ToString();


ještě moc neumim pracovat s těma oknama. díky za rady

Nahlásit jako SPAM
IP: 89.102.83.–
BDS+3
Věrný člen
16. 2. 2016   #7
-
0
-

#6 pejtrik
1. nemusíš se snažit konvertovat string na string, je to zbytečné.  

lblPlayer1NameGame.Text = mainData.lblPlayer1Name.Text;

musí stačit.

2a. pokud "nic se mi nezobrazuje" znamená, že ti se ti nezobrazí žádný text, bez chybových hlášení, tak ve zdrojovém labelu žádný text v tu chvíli není, nebo máš barvu textu písma stejnou jako pozadí.

2b. pokud ti to hlásí chybu nebo nejde sestavit, tak viz předchozí příspěvky (nebo nastav Modifiers toho labelu který chceš vidět z jiného formu na public), případně upřesni.

Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
pejtrik0
Newbie
17. 2. 2016   #8
-
0
-

#7 BDS
žádný chyby tam právě nemám a taky jsem myslel, že to bude fungovat normálně.

Písmo je ok.

takže teda upřesnuji, tady to je ten první form kde mám vypsané ty jména v labelu už

            if ((lblPlayer1Name.Text != "") && (lblPlayer2Name.Text != ""))
            {
                MemoryGame play = new MemoryGame(this);
                play.ShowDialog();
                this.Close();
            }


a tady to je ten druhý, kde bych chtěl aby to přečetlo ty labely

namespace pexeso_kludsky_winform
{
    public partial class MemoryGame : Form
    {
        
        Random location = new Random();// will set random location 
        List<Point> pointsCards = new List<Point>(); // get values of location

        PictureBox FirstCardOpen; 
        PictureBox SecondCardOpen;

        public Form1 mainData;
        public MemoryGame(Form1 mwn)
        {
            InitializeComponent();
            mainData = mwn;
            mainData = new Form1();
        }

        public void MemoryGame_Load(object sender, EventArgs e)
        {
            lblPlayer1NameGame.Text = mainData.lblPlayer1Name.Text;
            mainData.lblPlayer2Name.Text = mainData.lblPlayer2Name.Text;


všechno mám nastavené na public

Nahlásit jako SPAM
IP: 89.102.83.–
BDS+3
Věrný člen
17. 2. 2016   #9
-
0
-

není nutné mít vše public, když to nepotřebuješ 

    public partial class MemoryGame : Form
    {
        
        Random location = new Random();// will set random location 
        List<Point> pointsCards = new List<Point>(); // get values of location

        PictureBox FirstCardOpen; 
        PictureBox SecondCardOpen;

        public Form1 mainData;
        public MemoryGame(Form1 mwn)
        {
            InitializeComponent();
            mainData = mwn;
            mainData = new Form1(); // toto tu máš proč?!!
        }

        public void MemoryGame_Load(object sender, EventArgs e)
        {
            lblPlayer1NameGame.Text = mainData.lblPlayer1Name.Text;
            mainData.lblPlayer2Name.Text = mainData.lblPlayer2Name.Text; // a toto je co?
Nahlásit jako SPAM
IP: 94.113.253.–
W11 :)
BDS+3
Věrný člen
17. 2. 2016   #10
-
0
-

Myslel jsem to tak, že můžeš labelu nastavit vlastnost Modifiers na public a pak přímo k labelu přistupovat z jiných formulářů.

Nahlásit jako SPAM
IP: 94.113.253.–
W11 :)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 36 hostů

Podobná vlákna

Komunikace mezi pc — založil delete

Komunikace mezi třídami — založil rich

Komunikace mezi aplikacemi? — založil hamir

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý