IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Jak přidám referenci na radiobutton z jiného xaml okna?

Aktivity
Avatar
David Mrázek:20.4.2021 10:12

Ahoj, pokouším se přidat if-statement do okna xaml.cs s požití podmínky na radiobutton z jiného xaml okna. Všude jsem to hledal i se dotazoval na zahraničních webech ale vždy stejná odpověď, a to, ať to předělám do MVVM ale já bych byl rád kdybych nemusel.

Zkusil jsem:

if (scitani.IsChecked.HasValue && scitani.IsChecked.Value)
           {
               znamenko.Text = "+";

           }

scitani je radiobutton z jiného xaml.

Chci docílit: Tak se ptám, zda někdo neví o nějakém jednoduchém řešení, jak to vyřešit? zda nějak odkázat a nebo vytvořit metodu v xaml.cs, kde se daný radiobutton vyskytuje.

Pokud bude nutné dodám celý kód.

Budu rád za každou radu.
Děkuju vám :)

Editováno 20.4.2021 10:13
Odpovědět
20.4.2021 10:12
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:20.4.2021 11:08

na to co chceš si musíš někde sehnat handle toho okna kde je ten prvek scitani... chňápeš jo ?
máš několik možností .. předat ho do konstruktoru nebo si vytvořit globální třídu se static construktorem a static proměnnýma, kam to uložíš ... nebo handle předáš až po vytvoření oběktu MainWindow

 
Nahoru Odpovědět
20.4.2021 11:08
Avatar
Odpovídá na JerryM
David Mrázek:20.4.2021 11:23

doufám že ano, uvidím až to zkusím :D

Nahoru Odpovědět
20.4.2021 11:23
kde je vůle, tam je cesta
Avatar
Odpovídá na JerryM
David Mrázek:20.4.2021 11:28

Jak vytvořím konstruktor pro Radiobutton?

Nahoru Odpovědět
20.4.2021 11:28
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:20.4.2021 11:37

konstuktor ??? pro Radiobutton ?? ten je přeci v knihovně .NET ne ? ten už znova neuděláš ... chápeš jo ?
děláš to v čem ???

MS VS 2019 C# .NET 4.7.2 WPF ???
MS VS 2019 C# .NET 4.7.2 WinForms ???
MS VS 2019 C# .NET 5/6 WPF ???
MS VS 2019 C# .NET 5/6 WinForms ???

v čem to děláš ???

 
Nahoru Odpovědět
20.4.2021 11:37
Avatar
Odpovídá na JerryM
David Mrázek:20.4.2021 11:50

radši se zeptám než psát nějakou kravinu, kde zjistím jaká je to WPF aplikace?

Nahoru Odpovědět
20.4.2021 11:50
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:20.4.2021 12:14

no to sis přeci musel zvolit když sis ten projekt zakládal ne ?
jestli máš poslední verzi Visual Studia tak tam je typ .NET core což je nová verze
a .NET framework cože je stará verze ...
a navíc u .NET core si volíš podverzi čili .NET core 3.0 nebo 3.1 nebo nejnovější doporučovanou .NET5/6...
a navíc se to píše v konfiguračním souboru tvé aplikace

 
Nahoru Odpovědět
20.4.2021 12:14
Avatar
Odpovídá na JerryM
David Mrázek:20.4.2021 12:24

ano volil, proto se ptám, kde to zjistím nyní :) je to WPF aplikace a mám .NET core 3.1

Editováno 20.4.2021 12:26
Nahoru Odpovědět
20.4.2021 12:24
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:20.4.2021 13:46

to bys už mít neměl ... teď je .NET5 ... upgradni si Visual Studio a přepni projekt do .NET5 ...

 
Nahoru Odpovědět
20.4.2021 13:46
Avatar
Odpovídá na JerryM
David Mrázek:20.4.2021 14:03

přepnuto

Nahoru Odpovědět
20.4.2021 14:03
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:20.4.2021 15:08

tak teď ještě ten handle .. buď jako globální class s static constructorem a uvnit static proměnnou nebo předat jako parametr do třídy ..

 
Nahoru Odpovědět
20.4.2021 15:08
Avatar
JerryM
Člen
Avatar
JerryM:20.4.2021 16:08

tady je příklad
https://uloz.to/…/wpfapp3-zip
ke sdílenému RadioButtonu se musí v XAML přidělit vlastnost x:FieldModifi­er="public"
předávat tu referenci mužeš vícero způsoby - constructorem, po inicializaci (to je udělaný v příkladu), přes .Cast<Window>(). atd atd...
a tady sou vysvětlení:

https://stackoverflow.com/…ss-or-window

https://stackoverflow.com/…fier-in-code

https://stackoverflow.com/…indow-in-wpf

https://social.msdn.microsoft.com/…-code-in-wpf?…

 
Nahoru Odpovědět
20.4.2021 16:08
Avatar
JerryM
Člen
Avatar
JerryM:20.4.2021 19:40

abych nezapomněl .. jestli chceš dělat programátora tak základní podmínkou je prfektní angličtina
bez AJ si neškrtneš .. všechny manuály jsou dneska jen v AJ

 
Nahoru Odpovědět
20.4.2021 19:40
Avatar
Odpovídá na JerryM
David Mrázek:21.4.2021 9:44

s angličtinou trochu bojuju :D normální mluvená je v pohodě ale ta počítačová mi přijde jak kdybych se učil jiný jazyk :D

Nahoru Odpovědět
21.4.2021 9:44
kde je vůle, tam je cesta
Avatar
Odpovídá na JerryM
David Mrázek:21.4.2021 9:56

Děkuju moc, snad už to dám :)

Nahoru Odpovědět
21.4.2021 9:56
kde je vůle, tam je cesta
Avatar
Odpovídá na JerryM
David Mrázek:21.4.2021 10:51

zkoušel jsem to přes to Cast<> jak je i na stackoverflow.... ale to mi nějak hapruje

Nahoru Odpovědět
21.4.2021 10:51
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:21.4.2021 10:58

asi něco děláš blbě :) možná to chce větší programátorské zkušenosti

 
Nahoru Odpovědět
21.4.2021 10:58
Avatar
Odpovídá na JerryM
David Mrázek:21.4.2021 11:06

to rozhodně :D

Nahoru Odpovědět
21.4.2021 11:06
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:21.4.2021 11:17

měnit controls z jednoho okna do druhého není "standardní postup" ...
a navíc sis vybral knihovnu .NET5/6 WPF (z roku 2008), která je ... poněkud výrazně složitější než
.NET 5/6 WinForms (z roku 2001) ... ale zato ji vyžaduje jako pracovní znalost větší množství zaměstnavatelů...
učit se v dnešní době obě už asi nemá smysl ...

 
Nahoru Odpovědět
21.4.2021 11:17
Avatar
Odpovídá na JerryM
David Mrázek:21.4.2021 11:34

"standardní postup" by byl jaký? přes MVVM?

Nahoru Odpovědět
21.4.2021 11:34
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:21.4.2021 11:45

přiznám se že nechápu co děláš za "divnou" aplikaci ale .. možná by se všechno vešlo do jedný aplikace
a okna by sis udělal na TabControls pomocí UserControl v jednom projektu ...

https://www.wpf-tutorial.com/…-tabcontrol/

 
Nahoru Odpovědět
21.4.2021 11:45
Avatar
Odpovídá na JerryM
David Mrázek:21.4.2021 12:00

snažím se vytvořit "matematickou hru" kde si v prvním okně vybereš, jakou početní operaci chceš(sčítání, odčítání, násobení) dále si zvolíš, jakou chceš úroveň, zda lehčí čí těžší (lehčí dá možnosti výsledku, těžší musíš vypočítat sám) pak jdeš k samotné hře, kde máš čas a životy, po vypršení času naběhne průměrný čas na příklad, který se zapíše do tabulky

Nahoru Odpovědět
21.4.2021 12:00
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:21.4.2021 12:52

ano tak to by se asi hodilo dát na ten TabControl a vše v jednom okně a několik UserControls oken ..

 
Nahoru Odpovědět
21.4.2021 12:52
Avatar
Odpovídá na JerryM
David Mrázek:21.4.2021 12:52

tak to zkusím

Nahoru Odpovědět
21.4.2021 12:52
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:21.4.2021 17:29

tady je příklad
https://drive.google.com/…PRCxpu7/view?…
duležitý sou řádky
xmlns:controls="clr-namespace:WpfApp"
a
<controls:User­Control1/>

 
Nahoru Odpovědět
21.4.2021 17:29
Avatar
Odpovídá na JerryM
David Mrázek:22.4.2021 10:18

pokouším se to ještě dodělat v původní verzi lae nyní mám problém s tímto:

private void Window_Loaded(object sender, RoutedEventArgs e)
       {
           MainWindow window1 = Application.Current.Windows.OfType<MainWindow>().First();
           var scitani = window1.scitani ;
           var odcitani = window1.odcitani;
           var nasobeni = window1.nasobeni;
           vysledekhrac.Focus();
           suma++;
           pocetprikladu.Text = suma.ToString();
           mt.Start();
           timer.Value = 0;
           posunTimer.Start();
           Random prvni = new Random();
           Random druhy = new Random();
           int maxprvni = 10;
           int maxdruhy = 10;
           int prvnic = prvni.Next(1, maxprvni);
           int druhyc = druhy.Next(2, maxdruhy);
           if (scitani.IsChecked.HasValue) && scitani.IsChecked.Value)
           {
               znamenko.Text = "+";

           }
           if (odcitani.IsChecked.HasValue && odcitani.IsChecked.Value)
           {
               znamenko.Text = "-";

           }
           if (nasobeni.IsChecked.HasValue && nasobeni.IsChecked.Value)
           {
               znamenko.Text = "*";

           }
           if (znamenko.Text=="+")
           {
               int total = (prvnic+druhyc);
               prvnit.Text = prvnic.ToString();
               druhyt.Text = druhyc.ToString();
               vysledek.Text = total.ToString();

           }
           if (znamenko.Text == "-")
           {
               int total = (prvnic - druhyc);
               prvnit.Text = prvnic.ToString();
               druhyt.Text = druhyc.ToString();
               vysledek.Text = total.ToString();

           }
           if (znamenko.Text == "*")
           {
               int total = (prvnic * druhyc);
               prvnit.Text = prvnic.ToString();
               druhyt.Text = druhyc.ToString();
               vysledek.Text = total.ToString();

           }


       }

všechny tři možnosti jsou stejné:

if (scitani.IsChecked.HasValue) && scitani.IsChecked.Value)
           {
               znamenko.Text = "+";

           }
           if (odcitani.IsChecked.HasValue && odcitani.IsChecked.Value)
           {
               znamenko.Text = "-";

           }
           if (nasobeni.IsChecked.HasValue && nasobeni.IsChecked.Value)
           {
               znamenko.Text = "*";

           }

ale neuzná mi to jen první a když ji odstraním abych to zkusil bez toho tak mi to hodí chybu:
Program neobsahuje statickou metodu Main vhodnou pro vstupní bod.

Nevíš co to může být za chybu?

Nahoru Odpovědět
22.4.2021 10:18
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:22.4.2021 11:37

hm asi ještě chvíli potrvá než to dáš dohromady ... hele ty se asi učíš z manuálů na internetu co ?
neměl by si používat výrazy typu

if (odcitani.IsChec­ked.HasValue && odcitani.IsChec­ked.Value)

ale měl bys psát

if (odcitani.IsChec­ked.HasValue == true && odcitani.IsChec­ked.Value == true)

jinak tvuj program v .NET5/6 WPF musí obsahovat vstupní bod což je toto:

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeCom­ponent();

}
}

z tohoto vsupního bodu pak voláš další funkce...
není dobré zapisovat tvuj algoritmus do funkce
private void Window_Loaded(ob­ject sender, RoutedEventArgs e)
protože ta se volýá pokaždé když se např. tvuj pc probouzí z režimu spánku a pod..
takže je taky možný že něco voláš dvakrát po sobě a pak je v tom chaos

 
Nahoru Odpovědět
22.4.2021 11:37
Avatar
Odpovídá na JerryM
David Mrázek:22.4.2021 11:44

ano jedu podle internetu, já to v ve vstupním okně mám:

using System.Windows;


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


            public  MainWindow()
        {
                InitializeComponent();

            }



            private void Button_Click(object sender, RoutedEventArgs e)
            {
                if (scitani.IsChecked.HasValue && scitani.IsChecked.Value)
                {
                    uroven lvl = new uroven();
                    lvl.Show();
                    this.Close();
                }
                else if (odcitani.IsChecked.HasValue && odcitani.IsChecked.Value)
                {
                    uroven lvl = new uroven();
                    lvl.Show();
                    this.Close();
                }
                else if (nasobeni.IsChecked.HasValue && nasobeni.IsChecked.Value)
                {
                    uroven lvl = new uroven();
                    lvl.Show();
                    this.Close();
                }
                else if (deleni.IsChecked.HasValue && deleni.IsChecked.Value)
                {
                    uroven lvl = new uroven();
                    lvl.Show();
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Musíš zvolit, jednu z početních operací!");

                }
            }

        }
    }
Nahoru Odpovědět
22.4.2021 11:44
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:22.4.2021 12:45

tady máš nějaké vysvětlení
https://stackoverflow.com/…become-false

 
Nahoru Odpovědět
22.4.2021 12:45
Avatar
Odpovídá na JerryM
David Mrázek:22.4.2021 12:59

ale radiobutton nemá možnost že nebude mít hodnotu, nebo se pletu?

Nahoru Odpovědět
22.4.2021 12:59
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:22.4.2021 13:07

podle manuálu jo

https://docs.microsoft.com/…on.ischecked?…

píše se tam :

public bool? IsChecked { get; set; }

takže ? značí 3 hodnoty ... null, true, false

 
Nahoru Odpovědět
22.4.2021 13:07
Avatar
Odpovídá na JerryM
David Mrázek:23.4.2021 11:09

je možné, když mám dvě skupiny radiobuttonů, abych zkontroloval jestli jsou obě označené nebo je musím vypsat?

if (scitani.IsChecked.HasValue == true && scitani.IsChecked.Value == true && nizsi.IsChecked.HasValue == true && nizsi.IsChecked.Value == true)

takto když mají hodnotu aby se dalo dále pokračovat

else if (nazevprvniskupiny.IsChecked.HasValue == false && nazevprvniskupiny.IsChecked.Value == false && nazevdruheskupiny.IsChecked.HasValue == true && nazevdruheskupiny.IsChecked.Value == true)
            {
                MessageBox.Show("Musíš zvolit, jednu z početních operací!");

            }

takto nějak kdyby to vypadalo
Je to možné?

Nahoru Odpovědět
23.4.2021 11:09
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:23.4.2021 11:20

místo tristate-checkboxu mužeš zvolit combobox se 3 možnostma...
jestli to dobře chápu tak scitani je checkbox ..

co myslíš tim "vypsat" ????
dotaz na stav musí bt u každého zvlášť nebo se to dá dělat cyklem for, ale pak musíš někam do Listu<Checkbox> uložit handle těch checkboxů ...

 
Nahoru Odpovědět
23.4.2021 11:20
Avatar
Odpovídá na JerryM
David Mrázek:23.4.2021 11:36

scitani je radiobutton, vypsat myslím že bych do podmínky if vypsal všechny možně kombinace IsChecked.HasValue == false a IsChecked.Value == false

Nahoru Odpovědět
23.4.2021 11:36
kde je vůle, tam je cesta
Avatar
David Mrázek:23.4.2021 11:39

ale tich kombinací by bylo hrozně

Nahoru Odpovědět
23.4.2021 11:39
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:23.4.2021 12:05

tak ten RadioButton nedělej třístavovej ale jenom normální dvoustavovej ne ??? k čemu ti bude třístavovej RadioButton ???

https://thomasmartinsen.com/…sthreestate/

 
Nahoru Odpovědět
23.4.2021 12:05
Avatar
JerryM
Člen
Avatar
JerryM:23.4.2021 12:06

tady to je popsaný

https://social.msdn.microsoft.com/…-as-expected?…

jestli nepotřebuješ 3 stavy udělej dvoustavovej ne ?

 
Nahoru Odpovědět
23.4.2021 12:06
Avatar
David Mrázek:23.4.2021 12:07

i když vyřeším to jednoduše, prostě to vypíše hlášku na oboje

Nahoru Odpovědět
23.4.2021 12:07
kde je vůle, tam je cesta
Avatar
David Mrázek:23.4.2021 12:16

a ještě dotaz: jde udělat to, aby když uživatel odklikne ty radiobuttony( první na matematickou operaci a druhý na zvolenou obtížnost) aby poslali do vedlejší třídy, informace(hodnoty), že byly zvolený zrovna ty radiobuttony, a z té třídy se to dále zpracovalo do xaml.cs? Asi to vysvětluji blbě ale snad je to trochu k pochopení...

Nahoru Odpovědět
23.4.2021 12:16
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:23.4.2021 13:24

jo to de ...
opět potřebuješ mít aktivní tu třídu kam to posíláš ty zprávy a samozřejmě znát její handle ...
když nemáš RadioButton 3 stavovej tak se nemušíš ptát na scitani.IsChec­ked.HasValue ... chápeš jo ?
prostě hned za řádek
InitializeCom­ponent();
dáš
scitani.IsChecked = true;

 
Nahoru Odpovědět
23.4.2021 13:24
Avatar
Odpovídá na JerryM
David Mrázek:23.4.2021 13:37

jo už chápu co si tím myslel díky!!! ted zkusím tu třídu

Nahoru Odpovědět
23.4.2021 13:37
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:23.4.2021 14:15

třídu si musíš vytvořit příkazem new "třeba MOJE" a pak uchovat její handle a ve třídě si vytvoříš nějakou asi "public void SENDIT" metodu kterou pak zavoláš a předáš ji potřebný informace ... takže moje.sendit(pa­rametrA, parametrB) a ta metoda už pak něco udělá ..

 
Nahoru Odpovědět
23.4.2021 14:15
Avatar
JerryM
Člen
Avatar
JerryM:23.4.2021 19:51

eště drobnost ta glonálníá statická třída se vytvoří tak že si přidáš třídu t.j. z projectExplorer / Add / Class
s obsahem:

using System;
using System.Collec­tions.Generic;
using System.Linq;
using System.Text;
using System.Threadin­g.Tasks;

namespace WpfApp
{
public static class Class1
{
public static String value = "";

static Class1()
{

}// static Class1()

}// public static class Class1
}

a value pak je viditelná odkudkoliv .. nezapomeň že nejprve se inicializujou konstruktory jednotlivých xaml formulářů takže naplnit hodnotou mužeš value až po inicializaci .. t.j. až po volání metody Form_Load ...

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
23.4.2021 19:51
Avatar
Odpovídá na JerryM
David Mrázek:26.4.2021 10:28

safra díky moc!!! snad se s tím nějak porvu

Nahoru Odpovědět
26.4.2021 10:28
kde je vůle, tam je cesta
Avatar
Odpovídá na JerryM
David Mrázek:26.4.2021 11:01

nešlo by to řešit přes enumerátory, že bych nastavil scitaniNiz,
scitaniVys,
odcitaniNiz,
odcitaniVys,
nasobeniNiz,
nasobeniVys,
deleniNiz,
deleniVys,
Vys,Niz- podle obtížnosti
a podle toho pak řídil v konečném xaml.cs?

Nahoru Odpovědět
26.4.2021 11:01
kde je vůle, tam je cesta
Avatar
JerryM
Člen
Avatar
JerryM:26.4.2021 15:48

já se přiznám že teď se už v tom tvým programu vubec neorientuju :) :) :) :) :)
nevim .. asi jo .. ale v tom poli (asi List<Object>. nebo Array<Object>) co chceš enumerovat
budeš muset mít seznam těch tříd ...
a taková drobnost .. microsoftu se nepovedla aktualizace MS VS 16.9.4 ... nefunguje :) :) :) :)

 
Nahoru Odpovědět
26.4.2021 15:48
Avatar
Odpovídá na JerryM
David Mrázek:27.4.2021 9:46

už jsem raději otevřel nové okno diskuze :D

Nahoru Odpovědět
27.4.2021 9:46
kde je vůle, tam je cesta
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 48 zpráv z 48.