Diskuze: Ošetření uživ. vstupů - přetečení int
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 14 zpráv z 14.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Použij NumericUpDown, tomu lze nastavit Min a Max hodnota. https://msdn.microsoft.com/…vs.110).aspx
To je dobrý nápad. Děkuji.Tím by se to vyřešilo.
Jen jsem chtěl zkusit aplikovat jednu metodu z programu co jsem opsal -
výpočet faktoriálu, jsem začátečník. Viz. http://www.itnetwork.cz/dev-lighter/856
Liším se v tom, kde mám definované proměnné. Nevím z jakého důvodu mi
to nešlo je definovat před try, v bloku jsem je měl červěne podtržené a
tak jsem je definoval před public. V tom bude asi problém. Pokud to nenajdu,
použiji tvojí metodu.
Děkuji.
Try catch ti sice odchytí problém v programu jako takovém, ale už sám
neřekne, v čem uživatelem udělal chybu bez dalšího psaní. Kdežto
Ondřejova možnost rovnou uživateli nedovolí tam dát nic mimo to co chceš a
uživatel rovnou uvidí co tam může max dát 
Další možností by byla udělat nějakou akci která se podívá jak je velké číslo a zaokrouhlí ho dolů na nejvyšší možné. Teoreticky přímo na change event.
Samozřejmě použít NumericUpDown je dobré řešení.
Jsem sice taky začátečník, ale tvůj pokus se mě nelíbí hlavně ze dvou důvodů:
Trochu méně divně bych to viděl třeba takto:
public partial class Form1 : Form
{
Random nahoda = new Random();
string error1 = "Neplatné zadání čísla barvy, opravte zadání.";
string error2 = "Tolik teček neumím. :-(";
int pocet = 0;
SolidBrush stetec = new SolidBrush(Color.Black);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
int _pocet = Convert.ToInt32(txtpocet.Text);
if (_pocet > 32766) throw new Exception(error2);
int _r = Convert.ToInt32(txtcervena.Text);
int _g = Convert.ToInt32(txtzelena.Text);
int _b = Convert.ToInt32(txtmodra.Text);
if(_r < 0 || _r>255 || _g < 0 || _g > 255 || _b < 0 || _b > 255) throw new Exception(error1);
pocet = _pocet;
stetec = new SolidBrush(Color.FromArgb(_r, _g, _b));
panel1.Refresh();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "Chyba zadání", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
int maxX = panel1.Width - 1;
int maxY = panel1.Height - 1;
e.Graphics.Clear(Color.Silver);
e.Graphics.DrawRectangle(Pens.Black, 0, 0, maxX, maxY);
for (int a = 0; a < pocet; a++)
{
int x = nahoda.Next(1, maxX);
int y = nahoda.Next(1, maxY);
e.Graphics.FillRectangle(stetec, x, y, 1, 1);
}
}
}
Jedno malé vylepšení: Nepoužívej třídu Exception na vyhazovaní výjimek. Vždy použij nějakou již existující třídu, která právě z třídy Exception dědí a nebo si vytvoř vlastní a děď z ní taky. V tomto případě by bylo nejlepší použít výjimku ArgumentOutOfRangeException.
je nějaký jednoduchý způsob jak ve VS zobrazit nabídku dostupných Exceptions ? Ty základní si pamatuji z hlavy, ale ty ostatní..
Já to dělám tak že třeba napíšu Exception a dám ctrl + mezerník. To
mi pak vyjede seznam všech tříd co obsahují v názvu slovo Exception 
To je jasné, ale proklikej se těmi všemi, aby sis přečetl popis...
Ideální by byla nějaká tabulka včetně znění oznámení.
Obvykle se mi nechce s tím zdržovat a raději to si vygeneruji vlastní
znění.
Tak vždycky jde o to si říct co vlastně chceš tou výjimkou říct a tím se ti ten okruh možností značně zkratí. Jinak by jsi měl vždycky alespoň trochu popsat co se vlastně stalo:
if (validate && !ValidateString(input))
throw new ArgumentException("Input is not number", nameof(input));
Jasná zpráva, budu se snažit více se snažit přemýšlet o tom jestli
nepoužít nějakého potomka Exception.
Na popisu chyby si záležet dávám, nemám rád neurčitá chybová
hlášení.
Děkuji všem za zájem a pomoc.
HONZ4: Moc děkuji za tvojí práci. O tom, že bych neměl dávat oznámení na paint jsem nevěděl. Pro příště napravím dle tvého kódu. S tím typem int16 a byte jsem si hrál včera. Nyní již bych to uděla např. takto a vyhnul bych se tolika počtu podmínek. http://www.itnetwork.cz/dev-lighter/858
Ondřej: Děkuji, toto vyházování vyjímek vyzkouším, nevěděl jsem o ní. Učím se z knižky Radka Vystavěla a tam tuto situaci popisuje takto.
není zač, a ano takto nějak jsem to myslel.
Ještě poznámka ke kreslení: protože překreslování probíhá docela
často, je dobré tuto událost nezatěžovat ani zbytečnými výpočty.
(Proto jsem odebral globální proměnné R,G,B a rovnou vytvořil štětec,
abych jej nemusel znovu vytvářet po každém překreslení, a proměnné R,G,B
se uchovávaly v paměti pouze pro účel vytvoření štětce.)
V tomto případě se samozřejmě žádný rozdíl nepozná...
Zobrazeno 14 zpráv z 14.
