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: c# form - uložení více hodnot komponent do jednoho pole

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

Aktivity
Avatar
Michaal.K
Člen
Avatar
Michaal.K:26.1.2016 9:03

Ahoj,
potřebuju poradit. Mám aplikaci a ve formuláři je celkem hodně komponent numericUpDown (pojmenované jsou numericUpDown1 až 50). Potřeboval bych ze všech numericUpDown uložit hodnoty do pole. Nechce se mi psát 50 řádek numericUpDown1­.value = pole[0]. Nelze to nějak přes cyklus for nebo jinak??
Díky za odpověď.

 
Odpovědět
26.1.2016 9:03
Avatar
Odpovídá na Michaal.K
Michal Štěpánek:26.1.2016 9:30

To zavání špatným návrhem... K čemu je potřeba mít tolik NumericUpDown?

Nahoru Odpovědět
26.1.2016 9:30
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Michaal.K
Člen
Avatar
Michaal.K:26.1.2016 9:39

Jsou to parametry k uživatelskému nastavení. Tyto parametry zadá uživatel a následně jsou komunikací odeslány.

 
Nahoru Odpovědět
26.1.2016 9:39
Avatar
Michaal.K
Člen
Avatar
Michaal.K:26.1.2016 9:41

Potřebuji jen hodnoty těchto komponent načíst do pole abych je mohl uložit do ini souboru;)

 
Nahoru Odpovědět
26.1.2016 9:41
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Michaal.K
Jan Vargovský:26.1.2016 11:44

Buď skrz reflexi nebo si přidej reference do jednoho pole a pak s tím normálně pracuj.

 
Nahoru Odpovědět
26.1.2016 11:44
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Jan Vargovský
Michaal.K:26.1.2016 12:12

Díky za rady. Nemohl bys mi to lépe popsat ani jedno jsem zatím nepoužíval....

 
Nahoru Odpovědět
26.1.2016 12:12
Avatar
Honza
Člen
Avatar
Honza:26.1.2016 12:44

Můžeš v cyklu projít kolekci Controls a hledat v nich všechny položky které jsou typu NumericUpDown a hodnotu si pak ukládat do pole. Pokud ty NumericUpDowny vložíš do nějakého panelu nebo groupboxu, tak se ti tam nebudou plést ostatní itemy, protože budeš prohledávat pouze kolekci <tvujGroupbox>­.controls (předpokládám že používáš winforms).

Nahoru Odpovědět
26.1.2016 12:44
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Honza
Michaal.K:26.1.2016 13:21

To zní dobře. Winform používám. Ty NumericUpDown mám umístěné v TabControl (ve třech záložkách) šlo by nějak prohledávat jednotlivé záložky?? Prosím o více infa control nikdy jsem stouto kolekcí nedělal. Díky

 
Nahoru Odpovědět
26.1.2016 13:21
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Michaal.K
Jan Vargovský:26.1.2016 18:55

Skrz tu reflexi by to bylo zbytečně složité. Pak je tu ten způsob co navrhl Honza, ale ten je taky takový, že nemáš zajištěnou sekvenci těch kontrolů. Takže skrz to pole:

NumericUpDown[] numericUpDowns = new NumericUpDown[]
{
   numericUpDown1, numericUpDown2, ... , numericUpDownN
};

Lepší způsob, který by byl zároveň i čitelný není. Reflexe může být napsána i hezky, ale furt je to reflexe, které by ses měl vyhnout, pokud to jde.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
26.1.2016 18:55
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Jan Vargovský
Michaal.K:27.1.2016 15:45

Díky všem za rady. Nakonec jsem použil variantu od Honzi Vargovského a funguje to bezvadně, ještě jednou díky. ;-)

 
Nahoru Odpovědět
27.1.2016 15:45
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Jan Vargovský
Michaal.K:29.1.2016 10:02

Ahoj,
nezlob te se, že nezakládám nové téma, ale patří to ještě k tomuto. Vytvořil jsem si několi polí s referencemi:

RadioButton[] radiobuttons = new RadioButton[]
            {
                radioButtonM1_DC, radioButtonM1_Harmonic, radioButtonM1_Pulse, radioButtonM1_PulseIrc, radioButtonM1_PulseIrcTenz,
                radioButtonM2_DC, radioButtonM2_Harmonic, radioButtonM2_Pulse, radioButtonM2_PulseIrc, radioButtonM2_PulseIrcTenz,
                radioButtonM3_DC, radioButtonM3_Harmonic, radioButtonM3_Pulse, radioButtonM3_PulseIrc, radioButtonM3_PulseIrcTenz,
                radioButtonM4_DC, radioButtonM4_Harmonic, radioButtonM4_Pulse, radioButtonM4_PulseIrc, radioButtonM4_PulseIrcTenz,
                radioButtonM5_DC, radioButtonM5_Harmonic, radioButtonM5_Pulse, radioButtonM5_PulseIrc, radioButtonM5_PulseIrcTenz,
                radioButtonM6_DC, radioButtonM6_Harmonic, radioButtonM6_Pulse, radioButtonM6_PulseIrc, radioButtonM6_PulseIrcTenz,
                radioButtonM7_DC, radioButtonM7_Harmonic, radioButtonM7_Pulse, radioButtonM7_PulseIrc, radioButtonM7_PulseIrcTenz,
                radioButtonM8_DC, radioButtonM8_Harmonic, radioButtonM8_Pulse, radioButtonM8_PulseIrc, radioButtonM8_PulseIrcTenz,
                radioButtonM9_DC, radioButtonM9_Harmonic, radioButtonM9_Pulse, radioButtonM9_PulseIrc, radioButtonM9_PulseIrcTenz,
                radioButtonM10_DC, radioButtonM10_Harmonic, radioButtonM10_Pulse, radioButtonM10_PulseIrc, radioButtonM10_PulseIrcTenz,

            };

            NumericUpDown[] numericUpDowns = new NumericUpDown[]
            {

                numericUpDownM1_Harmonic_PulsWidth, numericUpDownM1_Harmonic_Freq, numericUpDownM1_Pulse_PulsWidth, numericUpDownM1_Pulse_SlotWidth, numericUpDownM1_Pulse_Freq,
                numericUpDownM1_PulseIrc_PulsWidth, numericUpDownM1_PulseIrc_SlotWidth, numericUpDownM1_PulseIrc_IrcPos, numericUpDownM1_PulseIrcTenz_PulsWidth,
                numericUpDownM1_PulseIrcTenz_SlotWidth, numericUpDownM1_PulseIrcTenz_IrcStart, numericUpDownM1_PulseIrcTenz_IrcStop, numericUpDownM1_PulseIrcTenz_Tenz,

                numericUpDownM2_Harmonic_PulsWidth, numericUpDownM2_Harmonic_Freq, numericUpDownM2_Pulse_PulsWidth, numericUpDownM2_Pulse_SlotWidth, numericUpDownM2_Pulse_Freq,
                numericUpDownM2_PulseIrc_PulsWidth, numericUpDownM2_PulseIrc_SlotWidth, numericUpDownM2_PulseIrc_IrcPos, numericUpDownM2_PulseIrcTenz_PulsWidth,
                numericUpDownM2_PulseIrcTenz_SlotWidth, numericUpDownM2_PulseIrcTenz_IrcStart, numericUpDownM2_PulseIrcTenz_IrcStop, numericUpDownM2_PulseIrcTenz_Tenz,

                numericUpDownM3_Harmonic_PulsWidth, numericUpDownM3_Harmonic_Freq, numericUpDownM3_Pulse_PulsWidth, numericUpDownM3_Pulse_SlotWidth, numericUpDownM3_Pulse_Freq,
                numericUpDownM3_PulseIrc_PulsWidth, numericUpDownM3_PulseIrc_SlotWidth, numericUpDownM3_PulseIrc_IrcPos, numericUpDownM3_PulseIrcTenz_PulsWidth,
                numericUpDownM3_PulseIrcTenz_SlotWidth, numericUpDownM3_PulseIrcTenz_IrcStart, numericUpDownM3_PulseIrcTenz_IrcStop, numericUpDownM3_PulseIrcTenz_Tenz,

                numericUpDownM4_Harmonic_PulsWidth, numericUpDownM4_Harmonic_Freq, numericUpDownM4_Pulse_PulsWidth, numericUpDownM4_Pulse_SlotWidth, numericUpDownM4_Pulse_Freq,
                numericUpDownM4_PulseIrc_PulsWidth, numericUpDownM4_PulseIrc_SlotWidth, numericUpDownM4_PulseIrc_IrcPos, numericUpDownM4_PulseIrcTenz_PulsWidth,
                numericUpDownM4_PulseIrcTenz_SlotWidth, numericUpDownM4_PulseIrcTenz_IrcStart, numericUpDownM4_PulseIrcTenz_IrcStop, numericUpDownM4_PulseIrcTenz_Tenz,

                numericUpDownM5_Harmonic_PulsWidth, numericUpDownM5_Harmonic_Freq, numericUpDownM5_Pulse_PulsWidth, numericUpDownM5_Pulse_SlotWidth, numericUpDownM5_Pulse_Freq,
                numericUpDownM5_PulseIrc_PulsWidth, numericUpDownM5_PulseIrc_SlotWidth, numericUpDownM5_PulseIrc_IrcPos, numericUpDownM5_PulseIrcTenz_PulsWidth,
                numericUpDownM5_PulseIrcTenz_SlotWidth, numericUpDownM5_PulseIrcTenz_IrcStart, numericUpDownM5_PulseIrcTenz_IrcStop, numericUpDownM5_PulseIrcTenz_Tenz,
            };

            ComboBox[] comboBoxs = new ComboBox[]
            {
                comboBoxM1_PulsIrcTenz_Edge, comboBoxM2_PulsIrcTenz_Edge, comboBoxM3_PulsIrcTenz_Edge, comboBoxM4_PulsIrcTenz_Edge,
                comboBoxM5_PulsIrcTenz_Edge, comboBoxM6_PulsIrcTenz_Edge, comboBoxM7_PulsIrcTenz_Edge, comboBoxM8_PulsIrcTenz_Edge,
                comboBoxM9_PulsIrcTenz_Edge, comboBoxM10_PulsIrcTenz_Edge, comboBoxM11_PulsIrcTenz_Edge, comboBoxM12_PulsIrcTenz_Edge,
                comboBoxM13_PulsIrcTenz_Edge, comboBoxM14_PulsIrcTenz_Edge, comboBoxM15_PulsIrcTenz_Edge, comboBoxM16_PulsIrcTenz_Edge
            }

ale když ty pole dám mimo metody ve kterých jsem je používal a dám je jako globální proměnné (potřebuji k nim přistupovat z více metod), tak mi to hodí tuto chybu:

A field initializer cannot reference the non-static field, method, or property 'numericUpDownM1_Harmonic_PulsWidth'

Napadá mě jen jedno řešení vytvořit pro každé pole metodu a vracet hodnotu pole. Nelze nějak vytvořit jako globální proměnné?? Díky...

 
Nahoru Odpovědět
29.1.2016 10:02
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Michaal.K
Jan Vargovský:29.1.2016 10:11

Globální proměnná ne, ale instancni ano. Dej si ty deklarace mimo metody(kdekoliv do třídy) a nainicalizuj si to v konstruktoru.

 
Nahoru Odpovědět
29.1.2016 10:11
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Jan Vargovský
Michaal.K:29.1.2016 11:04

Teď to nějak nechápu. V C# jsem začátečník...
Když dám ty deklarace těch polí kdekoliv do třídy hned to vyhodí chybu:

A field initializer cannot reference the non-static field, method, or property 'numericUpDownM1_Harmonic_PulsWidth'

A teď nevím jak přesně vytvořit konstruktor pro to pole?? Když ho zkouším vytvořit pořád to hlásí chyby. Díky

 
Nahoru Odpovědět
29.1.2016 11:04
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Jan Vargovský
Michaal.K:29.1.2016 11:10

Tak konstruktor jsem už mám:-) Ale nevím jak tam mám nainicializovat ty pole??

 
Nahoru Odpovědět
29.1.2016 11:10
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Michaal.K
Jan Vargovský:29.1.2016 15:58
class X
{
// deklarace
private TypKontrolky[] kontrolky;

public X()
{
// inicializace v konstruktoru
kontrolky = new TypKontrolky[] {...};
}
}
 
Nahoru Odpovědět
29.1.2016 15:58
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na Michaal.K
ostrozan:29.1.2016 18:05

Ty NumericUpDown mám umístěné v TabControl (ve třech záložkách) šlo by nějak prohledávat jednotlivé záložky??

nejjednodušší asi bude, když si to pole rozdělíš na tři - numericUpDowns­Panel1,numeri­cUpDownsPanel2,nu­mericUpDownsPa­nel3 a do nich dáš odkazy na příslušné kontrolky

 
Nahoru Odpovědět
29.1.2016 18:05
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Jan Vargovský
Michaal.K:1.2.2016 13:18

Díky moc. Vše funguje jak má. Snad to byl poslední dotaz ;-) Ještě jednou díky

 
Nahoru Odpovědět
1.2.2016 13:18
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 17 zpráv z 17.