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.
Člen
Zobrazeno 17 zpráv z 17.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
To zavání špatným návrhem... K čemu je potřeba mít tolik NumericUpDown?
Buď skrz reflexi nebo si přidej reference do jednoho pole a pak s tím normálně pracuj.
Díky za rady. Nemohl bys mi to lépe popsat ani jedno jsem zatím nepoužíval....
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).
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
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.
Díky všem za rady. Nakonec jsem použil variantu od Honzi Vargovského a funguje to bezvadně, ještě jednou díky.
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...
Globální proměnná ne, ale instancni ano. Dej si ty deklarace mimo metody(kdekoliv do třídy) a nainicalizuj si to v konstruktoru.
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
Tak konstruktor jsem už mám:-) Ale nevím jak tam mám nainicializovat ty pole??
class X
{
// deklarace
private TypKontrolky[] kontrolky;
public X()
{
// inicializace v konstruktoru
kontrolky = new TypKontrolky[] {...};
}
}
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 - numericUpDownsPanel1,numericUpDownsPanel2,numericUpDownsPanel3 a do nich dáš odkazy na příslušné kontrolky
Díky moc. Vše funguje jak má. Snad to byl poslední dotaz Ještě jednou díky
Zobrazeno 17 zpráv z 17.