Články

Tisk článku Tisk článku

Proměnné a datové typy

[Zpět na kategorii]

Datum: 25. 4. 2007 17:28       Autor: Tomáš Herceg       Zobrazeno: 46091x

Kategorie: Začínáme

Témata: VB.NET

Seriál: VB.NET od začátku - Díl 3.

V tomto díle se naučíme používat proměnné, vysvětlíme si, co jsou to datové typy a jak se mezi nimi převádí. Nakonec si napíšeme jednoduchou kalkulačku, která bude umět základní početní operace.


Po nastudování minulého dílu byste měli být schopni zodpovědět, co je to komponenta, co je to vlastnost, co je to událost a co je to procedura. Pokud to velmi stručně shrnu, komponenty jsou běžné ovládací prvky aplikace (tlačítko, textové pole, popisek, obrázek atd.), každá tato komponenta má vlastnosti (pomocí nich upravujeme a měníme vzhled a chování komponenty) a události (které nastanou při nějaké akci uživatele nebo počítače, např. stisknutí klávesy, kliknutí atd.), na které můžeme reagovat spuštěním nějaké procedury, což je sada nějakých příkazů.

V minulém dílu jsme se dostali k příkazu, nebo lépe řečeno funkci, MsgBox, která zobrazila hlášku s textem a tlačítkem OK. Nyní si něco řekneme o proměnných a datových typech.

Proměnné a datové typy

Pokud chceme pracovat s nějakými hodnotami a daty, budeme potřebovat proměnné. Proměnná je jakési místo v paměti, které si nějak pojmenujeme a do kterého můžeme ukládat informace nebo je z něj číst. Proměnnou si můžeme představit jako takovou schránku, do které si můžeme vložit nějaká data, abychom je mohli později použít. Vše uvedu na tomto zdrojovém kódu a vysvětlíme si, co se na každém řádku děje. Zatím nic nikam nekopírujte, toto je pouze příklad:

 Dim mojePromenna As Integer 
 mojePromenna = 36 
 MsgBox(mojePromenna)

První řádek vytvoří proměnnou, která se bude jmenovat mojePromenna a bude mít datový typ Integer. Datový typ určuje, jakým způsobem se data do paměti uloží a hlavně kolik místa budou potřebovat. Integer znamená celé číslo (v paměti zabere 32 bitů, tedy 4 bajty). Vytvořili jsme si tedy v paměti místo o velikosti 4 bajtů pro uložení celého čísla a toto "místo" se jmenuje mojePromenna. Názvy proměnných mohou obsahovat písmena anglické abecedy, čísla a podtržítko, jejich název ale nesmí začínat číslem. Teoreticky sice lze používat i písmena s háčky a čárkami, ale důrazně doporučuji je nepoužívat. V praxi bývá zvykem pojmenovávat proměnné anglicky, ale abych vás nemátl, budu je pojmenovávat česky a bez háčků a čárek.

Druhý řádek do naší proměnné uloží (říkáme také přiřadí) hodnotu 36. A na třetím řádku zobrazíme okno se zprávou, ve kterém se zobrazí hodnota proměnné mojePromenna, čili číslo 36.

Všimněte si, že v mojePromenna není v uvozovkách. Kdyby byla, zobrazil by se text mojePromenna. To je velmi důležité. Pokud použijeme uvozovky, to, co je uvnitř, je jen textová hodnota, není to žádný kus programu. Je vidět na tomto příkadu:

 Dim mojePromenna2 As String 
 mojePromenna2 = "ahoj" 
 MsgBox(mojePromenna2)

Tento příklad je podobný, akorát používáme datový typ String, který říká, že do proměnné budeme ukládat text. Na druhém řádku přiřadíme do proměnné slovo ahoj. Musíme je ale také zapsat do úvozovek, aby bylo Visual Basicem pochopeno jako text. Bez úvozovek by ahoj bylo chápáno jako proměnná.

Datové typy nemůžeme jen tak míchat – obecně neplatí, že do proměnné jednoho typu můžeme přiřadit hodnotu jiného datového typu. Pokud někam napíšeme text v uvozovkách, jedná se automaticky o hodnotu typu String. Pokud někam napíšeme číslo bez uvozovek, je to typicky hodnota typu Integer (jsou tam trochu složitější pravidla, ale to teď nechme stranou).

Kontrolní otázka – jakého typu bude hodnota, kterou v kódu zapíšu jako “13” (i s uvozovkami)? Samozřejmě String. Je to něco v uvozovkách a ne samostatně stojící číslo.

U běžných typů jako je String a Integer platí výjimky – hodnotu typu Integer můžeme přiřadit do proměnné typu String a kompilátor ji zkonvertuje (String je v paměti uložen jinak než Integer, String je uchováván po znacích, kdežto Integer se ukládá jako číslo ve dvojkové soustavě). Ale pro libovolné dva typy to rozhodně neplatí, protože u nich nemusí být konverze známá anebo to vůbec nemusí dávat smysl. Obecně platí, že Visual Basic (bohužel) leccos skousne a povolí.

Nicméně vždy musíte mít na paměti, s jakým datovým typem pracujete, a uvědomovat si, že když přiřadíte typ Integer do typu String, musí se provádět nějaká konverze, i když ji tam nenapíšete.

Nejběžnější datové typy

Dva nejběžnější datové typy jsme si již ukázali. String je pro texty a Integer je pro celá čísla. Základních datových typů pro začátečníky je pět, jsou zobrazeny v této tabulce:

Datový typ Použití Rozsah Konverzní funkce
String textové hodnoty max. 231 znaků CStr(hodnota) nebo hodnota.ToString()
Integer celá čísla -231 až +231 CInt(hodnota)
Boolean logická hodnota True (pravda, ano) nebo False (nepravda, ne) CBool(hodnota)
Double desetinná čísla čím větší číslo, tím menší přesnost; asi 15 platných číslic CDbl(hodnota)
Byte malé celé číslo 0-255 CByte(hodnota)

Pro ty z vás, co ještě neměli v matematice mocniny, 231 se čte “dvě na třicátou první” a je to jako když vedle sebe napíšete 31 dvojek a všechny je mezi sebou vynásobíte. Dohromady je to něco přes 2 miliardy.

Ptáte se, proč zrovna 31? Je to o 1 méně než 32. 32 je v počítačovém světě (stejně jako ostatní mocniny dvojky, tj. 1, 2, 4, 8, 16, 32 atd.) velmi důležité číslo. Procesory dnešních počítačů jsou 32 nebo 64-bitové, což znamená, že dokážou pracovat s 232 resp. 264 bajty paměti. To první jsou 4GB, což dnes má kdekdo, to druhé je strašně mega moc.

Konverzní funkce je funkce, která umí hodnotu základního typu překonvertovat na hodnotu nějakého konkrétního typu, pokud to má smysl.

Například Dim a As Integer = CInt(1.67) přiřadí do proměnné a číslo 1. Hodnotu typu Double, tedy desetinné číslo, převedeme na Integer, což vyvolá zaokrouhlení dolů. Pokud bychom chtěli zaokrouhlit “správně”, museli bychom použít jinou funkci.

Jinak pochopitelně pokud do kódu napíšeme desetinné číslo (používáme desetinnou tečku, ne desetinnou čárku!), je to automaticky hodnota typu Double.

Jak s proměnnými pracujeme?

Vytváření proměnných jsme již viděli v příkladu, zde jsou způsoby, jak to provést.

 Dim a As Integer 
 Dim b As Integer = 6 

První způsob pouze vytvoří proměnnou (rezervuje pro ni místo v paměti, tomuto procesu se říká alokace) určitého datového typu, druhý způsob navíc do této proměnné ihned uloží danou hodnotu, v našem případě číslo 6.

 a = 132 
 b = 6 + 142 - a 

První řádek do proměnné a přiřadí číslo 132. Druhý řádek je o něco zajímavější. Jako hodnotu jsme předali matematický výraz, ve kterém navíc figuruje proměnná. Nemusíme se toho ale bát, Visual Basic sám výraz vypočítá a za proměnnou a dosadí její hodnotu, kterou již zná. Výsledek tohoto výrazu pak uloží do proměnné b. Výrazy můžeme používat téměř všude a Visual Basic je nejprve vyhodnotí a pracuje až s výsledkem.

 MsgBox(5 + 18 - a) 
 MsgBox("5 + 18 - a")

Na příkladu máme dva řádky. Na prvním z nich hodnota není v úvozovkách, takže se to pochopí jako výraz - nejprve se spočítá a zobrazí až výsledek. Kdežto na druhém řádku není žádný složený výraz, je to pouze textová hodnota, která se normálně zobrazí. Objeví se tedy text 5 + 18 - a.

Obor platnosti

Při deklaraci proměnných záleží na tom, kde proměnnou deklarujeme. Obecně se řiďte pravidlem “proměnnou deklarujeme tam, kde ji potřebujeme, a až ve chvíli, kdy ji potřebujeme”.

Pokud proměnnou potřebujeme jen uvnitř nějaké procedury, deklarujeme ji tam, klidně někde v půlce. Takové proměnné se říká lokální proměnná, přičemž tato proměnná se vytvoří pokaždé, kdy je procedura zavolána, a zruší pokaždé, kdy se provádění procedury dokončí (provedou se všechny příkazy uvnitř). Pokud do proměnné něco uložíme, při příštím volání procedury to tam již nebude!

Druhá možnost je deklarovat proměnnou mimo proceduru, tj. typicky za řádkem Class Form1 v příkladu v minulém díle. Taková proměnná se vytvoří při zakládání instance třídy (tj. při vytvoření okna) a zruší se při ukončení života třídy (v našem případě po zavření okna). O tom, co je to třída, bude řeč mnohem později, teď je pro nás důležité, že proměnná existuje po celou dobu, co existuje okno. Můžeme ji samozřejmě používat z procedur.

Aritmetické operátory

Jak jsme se již dočetli výše, Visual Basic umí počítat a vyhodnocovat tzv. výrazy. Pokud jsou to výrazy s čísly, používáme v nich tzv. aritmetické operátory, česky bychom řekli znaménka. V této tabulce jsou operátory, které můžeme používat. Zápis některých znamének je v programování jiný než v běžném životě.

Operátor Operace Příklady
+ sčítání 5 + 6 = 11
- odčítání 11 - 6 = 5
* násobení 5 * 6 = 30
/ dělení 11 / 3 = 3.666666666667
\ celočíselné dělení 11 \ 3 = 3
Mod zbytek po dělení 11 Mod 3 = 2

První čtyři operace jsou jasné, zastavíme se až u posledních dvou. Kdysi na základní škole jste se asi učili tzv. dělení se zbytkem. Vypadalo to asi takhle: 11 : 3 = 3 (zbytek 2)

A přesně toto dělají operátory \ a Mod. 11 \ 3 je celá část (tj. 3) a 11 Mod 3 je zbytek (tj. 2). Tyto operace se musí provádět zvlášť.

Operátory samozřejmě můžeme používat s čísly i s proměnnými, můžeme používat i závorky ve výrazech, ovšem jen kulaté! Nemusíme se bát ani výrazů (((2 + 3) * 4) + 5), musíme ale dát pozor, abychom nám závorky seděly a nebyla tam nějaká navíc anebo jiná nechyběla.

Operátor slučování textů

Operátory nejsou jen aritmetické, máme i operátor pro práci s textem. Operátor & slučuje texty, tedy hodnoty typu String (může slučovat i text s číslem nebo naopak).

Takže "ahoj" & "ahoj" dá dohromady "ahojahoj". Uvozovky používáme, protože jsou to texty.

 Dim t As String = "chleba" 
 MsgBox(t & " s máslem")

Tento program zobrazí text chleba s máslem, texty se prostě připojí jeden za druhý.

Jednoduchá kalkulačka

Na závěr tohoto dílu si ukážeme velmi jednoduchou kalkulačku. Spusťte si Visual Basic a vytvořte si nový projekt Windows Forms Application. Na formulář přidejte 2 textová pole (TextBox) vedle sebe, 4 tlačítka (Button) pod nimi a úplně dole ještě jedno textové pole (TextBox), kterému nastavte vlastnost ReadOnly na True, aby do něj uživatelé nemohli psát. Nastavte také hodnoty vlastností tlačítkům Text, aby formulář vypadal jako na obrázku:

 Uživatelské rozhraní okna kalkulačky

Nezapomeňte, že když vytvoříte první komponentu TextBox, dostane jméno TextBox1, další bude TextBox2 a tak to pokračuje dále. Na obrázku jsou napsány názvy těchto komponent, je nutné, abyste zachovali jejich pořadí. Pokud omylem vytvoříte komponentu špatně, můžete jí změnit vlastnost Name. Musíte ale dát pozor, abyste nepojmenovali dvě komponenty stejně, objevila by se chybová hláška.

Program se bude ovládat tak, že do horních dvou textových polí zapíšete dvě čísla a kliknete na tlačítko s operací, kterou chcete provést. Ve spodním poli se ukáže výsledek.

Sčítání

Pokud již máte na formuláři všechny komponenty, dvakrát klikněte na tlačítko Sečíst. Otevře se nám okno kódu, do kterého zapíšeme, co se stane, když klikneme na dané tlačítko. Komponenty TextBox1 a TextBox2 budou obsahovat čísla, která budeme chtít sečíst. Tyto komponenty mají také vlastnost Text, která obsahuje jejich hodnotu. Tato hodnota je ale datového typu String, což je problém, protože nemůžeme počítat s texty. To ale vyřešíme snadno. V tabulce s datovými typy jsem uvedl konverzní funkci, která umí na daný typ převést. Pro Integer je to funkce CInt a za ni se do závorky uvede to, co převádíme na číslo.

Visual Basic totiž sám nepozná, jestli je v komponentě TextBox text, nebo číslo. Protože do TextBoxu se dá napsat i text, jeho vlastnost Text je typu String, ať už v ní je cokoliv.

Hodnotu z textového pole tedy musíme na typ Integer převést ručně, a proto si vytvoříme dvě proměnné a a b, do kterých si uložíme již převedené hodnoty. Nakonec tyto hodnoty sečteme a uložíme do proměnné c a tuto hodnotu přiřadíme do vlastnosti Text komponenty TextBox3.

Pokud chceme přistupovat k vlastnostem komponent v programovém kódu za běhu, napíšeme název komponenty, za ní tečku a hned za ní název vlastnosti. Vlastnosti komponent se chovají úplně stejně jako proměnné, mají taky své datové typy. Teď již víme vše, co potřebujeme.

 Dim a As Integer = CInt(TextBox1.Text) 
 Dim b As Integer = CInt(TextBox2.Text) 
 Dim c As Integer = a + b 
 TextBox3.Text = CStr(c)

První řádek tedy vezme hodnotu Text v komponentě TextBox1 (co uživatel napsal do prvního políčka), převede jí pomocí funkce CInt na datový typ Integer a přiřadí ji do proměnné a.

Druhý řádek vezme hodnotu z druhého textového pole, opět ji převede a přiřadí do nové proměnné b.

Třetí řádek do proměnné c přiřadí součet proměnných a a b. Čtvrtý řádek tento součet převede na typ String a uloží jej do třetího textového pole, do vlastnosti Text.

Takto funguje sčítání. Sami si jistě budete schopni udělat odčítání, násobení a dělení. Stačí se vrátit do formuláře pomocí záložek nahoře, dvakrát klepnout na další tlačítka a zapsat proceduru. Bude velice podobná, takže ji můžete přes schránku zkopírovat a vložit, stačí pak změnit jenom znaménko, aby se provedla správná operace.

Aby u dělení fungovala desetinná čísla, zkuste kalkulačku změnit tak, aby v ní nebyl všude typ Integer, ale Double. U dělení by to ještě chtělo ošetřit dělení nulou a vynadat uživateli, že dělit nulou se rozumně nedá, ale to zatím neumíme, o tom až příště.

Pokud použijete typ Integer a budete zkoušet dělit nulou, program spadne a musíte jej ukončit kliknutím na tlačítko modrého čtverečku v panelu (Stop). Tím se program natvrdo ukončí. Pokud při dělení nulou budete mít datový typ Double, nic se nestane a v textovém poli výsledku se objeví hodnota +nekonečno nebo –nekonečno (případně bude přeložená v jiném jazyce). Typ Double totiž podporuje i tyto speciální hodnoty.

To je pro tentok díl všechno. Doufám, že vás proměnné moc neotrávily a že se vám programování nepřestalo líbit.

A jako domácí úkol můžete zkusit vzít program z minulého dílu, kromě tlačítka na formulář přidat ještě textové pole. Při kliknutí na tlačítko se uvnitř zprávy zobrazí to, co tam je, a za tím ještě text, který uživatel zadal do textového pole.


> Na začátek

 

Hodnocení:

Hlasů: 109
Zvolte své hodnocení

Tomáš Herceg

Jsem hlavním softwarovým architektem ve společnosti Riganti. Mám dlouholeté zkušenosti s technologiemi ASP.NET, Silverlight, WPF a XNA. Působím též jako lektor ve společnosti Gopas a již třetím rokem jsem držitelem ocenění Microsoft Most Valuable Professional.

Podpořte vznik dalších článků

Související články

DílNázev článku 
Díl 1. Úvod, vývojové prostředí a základní pojmy 25. 4. 2007
Díl 2. Začínáme programovat 25. 4. 2007
Díl 3. Proměnné a datové typy 25. 4. 2007
Díl 4. Podmínky a operátory 26. 4. 2007
Díl 5. Složitější podmínky a rozhodovací struktury 26. 4. 2007
Díl 6. Cyklus For 5. 5. 2007
Díl 7. Pole 9. 5. 2007
Díl 8. Pole, cykly a práce se soubory 14. 5. 2007
Díl 9. Přidáváme druhý formulář 18. 5. 2007
Díl 10. Funkce a procedury 6. 7. 2007
Díl 11. Kolekce a pole 27. 7. 2007
Díl 12. Práce s textem a řetězci 17. 8. 2007
Díl 13. Úvod do grafiky 27. 8. 2007
Díl 14. Vykreslujeme graf 31. 8. 2007
Díl 15. Práce se soubory, úvod do objektově orientovaného programování 19. 11. 2007
Díl 16. Třídy a funkce .NET frameworku, o kterých je dobré vědět 31. 12. 2007
Díl 17. Objektově orientované programování - základy 30. 6. 2008
Díl 18. Dědičnost 6. 10. 2008

RSS Feed RSS Feed

Diskuse

Preklep

Datum: 21.5.2007 9:18
Autor: neregistrovaný (147.230.88.161)
Hodnocení autora: není
Příspěvků: 0
Opravit překlep: Mod zbytek po dělní 11 Mod 3 = 2
 
           [Odpovědět]
 
Hodnocení: 6 Čekejte, prosím...

Re: Preklep

Datum: 21.5.2007 17:32
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Děkuji. Opraveno.
 
           [Odpovědět]
 
Hodnocení: 7 Čekejte, prosím...

Desetina tecka/carka

Datum: 20.2.2008 8:15
Autor: neregistrovaný (193.85.164.168)
Hodnocení autora: není
Příspěvků: 0
Napsal jsem si dle tohoto clanku tvou kalkulacku a trochu jsem ji vylepsil. Pouzivam datovy typ Double misto Integer, abych mohl pocitat s desetinymi cisly. Ovsem co me zarazilo, je to, ze ve zdrojovem kodu se pouziva desetina tecka a v programu co jsem vytvoril musim pouzivat destinou carku. Ja jsem odpurce desetinych carek, neslo by to nejak prenout na desetinou tecku?
 
           [Odpovědět]
 
Hodnocení: 2 Čekejte, prosím...

Radio button

Datum: 11.5.2008 19:48
Autor: neregistrovaný (89.203.152.14)
Hodnocení autora: není
Příspěvků: 0
Jak napsat v rozhodovací struktuře že Radiobutton1.(označený)?
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

novy datovy typ

Datum: 18.7.2008 16:06
Autor: neregistrovaný (77.48.34.7)
Hodnocení autora: není
Příspěvků: 0
Můžu si ve VB vytvořit svůj vlastní datový typ?
 
           [Odpovědět]
 
Hodnocení: -3 Čekejte, prosím...

Re: novy datovy typ

Datum: 18.7.2008 21:37
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Záleží jaký. Můžete si vytvořit strukturu, což je několik proměnných pohromadě, takže můžete mít např. datový typ Bod, který bude mít dvě proměnné X a Y. Ale klasický primitivní datový typ vytvořit nejde.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Konverzní funkce

Datum: 25.9.2008 20:45
Autor: Jozef Hollý
Hodnocení autora: 33
Příspěvků: 82
Na co a jak se používají konverzní funkce?
 
           [Odpovědět]
 
Hodnocení: -2 Čekejte, prosím...

Datový typ - Single, Long, Date a Variant

Datum: 11.10.2008 13:11
Autor: neregistrovaný (82.208.45.222)
Hodnocení autora: není
Příspěvků: 0
Dobrý den, mohl byste prosím popsat tyhle datové typy? Použití a rozsah? Děkuji Honza
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

Re: Datový typ - Single, Long, Date a Variant

Datum: 11.10.2008 16:02
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
http://msdn.microsoft.com/en-us/library/...
Variant už v nové verzi VB.NET není, místo něj je Object, ale doporučuji jej používat jen v případě, že to jinak nejde.
 
           [Odpovědět]
 
Hodnocení: 4 Čekejte, prosím...

Mno

Datum: 10.11.2008 18:52
Autor: Václav Chochola
Hodnocení autora: 0
Příspěvků: 1
Nevím jestli je to tak dobře, ale i když přidám CInt, tak mi do textových polí jdou psát čísla, takže nevidím rozdíl v tom, jestli tam je nebo není.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

NullReferenceExeption

Datum: 11.12.2008 22:31
Autor: neregistrovaný (89.102.180.98)
Hodnocení autora: není
Příspěvků: 0
Když napíšu v deklaraci
Public Class Form1
    Dim a As Integer = CInt(TextBox1.Text) 
td.
jak píšeš - tak se mi objeví chyba NullReferenceExeption.
Ať mám Optin Explicit nastavený na ON nebo OFF.
Pochopil jsem že jde o problém, kdy v proměnné není žádná hodnota.
Co s tím ale ???

Díky

Petr
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

Re: NullReferenceExeption

Datum: 27.2.2009 20:05
Autor: neregistrovaný (89.176.199.67)
Hodnocení autora: není
Příspěvků: 0
Kód na vypočítání máš napsat do procedury události click na objekt button.

a ne do třídy Form1.
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

Kalkulačka

Datum: 27.4.2009 18:37
Autor: neregistrovaný (213.194.221.54)
Hodnocení autora: není
Příspěvků: 0
Hezká kalkulačka, ale já jsem do ní přidal porovnávání:

Dim p1 As Integer = CInt(TextBox1.Text)
Dim p2 As Integer = CInt(TextBox2.Text)
If p1 > p2 Then
TextBox3.Text = p1 & ">" & p2
ElseIf p1 < p2 Then
TextBox3.Text = p1 & "<" & p2
Else
TextBox3.Text = p1 & " se rovná " & p2
End If
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Chyba Kalkulačka

Datum: 12.5.2009 19:47
Autor: neregistrovaný (212.158.134.242)
Hodnocení autora: není
Příspěvků: 0


Private Sub Command1_Click()
Dim a As Integer CInt(Text1.Text)
 Dim b As Integer = CInt(Text2.Text)
 Dim c As Integer = a + b
 TextBox3.Text = c

End Sub

 
Ahoj když jsem delal tu kalkulačku kterou máš
a napsal jsem kod do všech tlačítek tak když jsem spustil
program a chtel neco vypočitat objevila se mi Chyba Sytaxe
používám Vb6 a ne 5 tak nevím jestli to není tím?KOD VÝŠE
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

Re: Chyba Kalkulačka

Datum: 12.5.2009 20:24
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Tento článek není o 10 let starém VB6, ale o nejnovějších verzích Visual Basic 2005 a Visual Basic 2008. Tento kód vám ve staré verzi VB6 fungovat nebude a kromě toho vám na druhém řádku chybí =.
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

Re: Chyba Kalkulačka

Datum: 5.6.2009 13:24
Autor: neregistrovaný (212.158.134.242)
Hodnocení autora: není
Příspěvků: 0
no tak už běžím do obchudu pro novy VB :-(
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

desetina čísla

Datum: 21.5.2009 8:49
Autor: neregistrovaný (194.228.73.233)
Hodnocení autora: není
Příspěvků: 0
ahoj prosimte chci se zeptat jak udelat to aby mi to pocitalo i s desetinejma cislama protoze kdyz tam zadam desetiny cislo tak mi to zaokrouhli :(
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: desetina čísla

Datum: 5.6.2009 13:27
Autor: neregistrovaný (212.158.134.242)
Hodnocení autora: není
Příspěvků: 0
POužij datový typ Double misto Integer
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: desetina čísla

Datum: 5.6.2009 13:29
Autor: neregistrovaný (212.158.134.242)
Hodnocení autora: není
Příspěvků: 0

Private Sub Command1_Click()
Dim a As Double = CInt(Text1.Text)
 Dim b As Double = CInt(Text2.Text)
 Dim c As Double = a + b
 TextBox3.Text = c

End Sub


 

 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

Re: desetina čísla

Datum: 7.7.2011 11:30
Autor: Tomas
Hodnocení autora: 0
Příspěvků: 2
Jeste musi zmenit CInt() na CDbl() jinak mu to bude davat cely cisla.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Opět desetinné tečky a čárky

Datum: 25.6.2009 22:53
Autor: Petr Vavřinec
Hodnocení autora: 0
Příspěvků: 43
Dobrý den.

Mám proměnnou typu string, která nabývá např. následujících hodnot:

"255.0000"
"255.00"
"255"

a chci z nich získat proměnnou typu Double a tuto proměnou pak zobrazovat v LabelCena ve formátu:

255,00 Kč

Proč musím postupovat takhle složitým způsobem?

Sub PrevodNaKc()
Dim Cena As String = "255.000"
Dim CenaNum As Double
If Double.TryParse(Cena.Replace(".", ","), CenaNum) = False Then
                    MsgBox("Nebylo to číslo!")
Exit Sub
End If

LabelCena.Text = CenaNum.ToString("########0.00Kč;-#######0.00Kč;Nic")
End Sub
 
Nenapadá mně jiný způsob, jak obecně převést string s desetinnou tečkou na string s desetinnou čárkou s formátem dvě desetinná místa plus symbol Kč, aniž bych nepoužil tu pomocnou proměnnou CenaNum.

Nebo uvažuju špatně?

Petr Vavřinec
 
           [Odpovědět]
 
Hodnocení: 4 Čekejte, prosím...

Re: Opět desetinné tečky a čárky

Datum: 18.10.2010 17:35
Autor: Ondřej Ondryáš
Hodnocení autora: 100
Příspěvků: 237
Nemusíte nic složitě převádět.
Existuje způsob jak to převést podle aktuálního systémového nastavení. Pokud máte CZ systém tak to jde do Kč:


Dim cena As Double = 58.5
LabelCena.Text = String.Format("{0:c}", Cena)
 
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

zmena hodnoty promenne

Datum: 11.8.2009 11:58
Autor: neregistrovaný (82.99.163.195)
Hodnocení autora: není
Příspěvků: 0
Dobry den,
nevite nahodou, kdyz deklaruji promennou napr.

dim A, B
A = InputBox ("zadej promennou")
B = InputBox ("zadej promennou")
 

a chtela bych, aby to bylo porad A, aby se mi v prubehu zmenilo a az do konce by bralo jako konecnou hodnotu A to druhe co tam napiseme. Jak to udelat?


dim A
A = InputBox ("zadej promennou")
A = InputBox ("zadej promennou")
 

 
           [Odpovědět]
 
Hodnocení: -2 Čekejte, prosím...

Přenos proměnných

Datum: 14.11.2009 22:50
Autor: neregistrovaný (81.201.60.140)
Hodnocení autora: není
Příspěvků: 0
Ahoj, mohu-li se zeptat na jednoduchou otázka, ale teprve začínám... :)
Jak si udržím proměnnou v celém programu, tj. aby byla přenosná (shared) jako u jiných jazyků?
Když si např. nadimenzuji proměnnou A mezi PRIVATE SUB a END SUB jednoho tlačítka, pak v jiném tlačítku ji musím nadimenzovat mezi PRIVATE SUB a END SUB znovu... Já ale potřebuji, aby byla platná v celém programu bez výjimky, nikoli jen lokálně.
Díky předem!
 
           [Odpovědět]
 
Hodnocení: -3 Čekejte, prosím...

Práce s textem

Datum: 15.6.2010 13:01
Autor: neregistrovaný (62.4.97.43)
Hodnocení autora: není
Příspěvků: 0
Musím poděkovat za tyto tutorialy, moc mi pomohly v mý samovýuce v VB.NET. POtřebuji ale pomoct. Mam dvě textove pole, pomocí MsgBox potřebuju vypsat věty, ve kterých budou proměné z TextBox. Celý kod se mi podařilo napsat, tak aby se vypisovalo to co potřebuji, ale nevím jak oddělit ty dvě věty na řádky. Tuším, že to bude nějakým oddělovacím znakem, jako u spojovatelu &.
Díky za odpověď
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Chyba

Datum: 22.10.2010 19:33
Autor: neregistrovaný (213.192.1.45)
Hodnocení autora: není
Příspěvků: 0
Zdravím, potřeboval bych poradit, používam VB2010Express, mám následující kód:

Public Class Form1

Dim DVAL As Integer = CInt(TextBox9.Text)
Dim MOR As Integer = CInt(TextBox11.Text)

Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick

If DVAL > MOR Then
TextBox13.BackColor = Color.Red

Else
TextBox13.BackColor = Color.Green

End If

End Sub
End Class

Chci cyklicky tedy ve spuštěném timeru vyhodnocovat podmínku If a podle toho měnit pozadí textbox13, Textbox9 (čili DVAL) plním jako String trojmístnou číslici (ne ručně ale z ethernetu). Proměnnou MOR chci vyplnit ručně do Textboxu.

A teď problém, když deklaruju proměnné a naplnim je přímo v programu, tak vše funguje, když přes "CInt(TextBox9.Text)" tak na mě vyletí chyba:

No source Available - No symbols are loaded any call stack frame. The source code cannot be desplayed.
InvalidOperationException was unhandled - An error occurred creating the form. See Exception.InnerException for details. The error is: Object reference not set to an instance of an object.
Jestli to správně chápu tak to znamená, že objekt není nastaven na instanci objektu. Vzhledem k tomu že jsem docela amatér, tak poprosím, jestli někdo neví co s tím?

 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Chyba

Datum: 22.10.2010 21:34
Autor: neregistrovaný (213.192.1.45)
Hodnocení autora: není
Příspěvků: 0
vyřešeno.. deklarace proměnných musí být přímo v timeru, říkam, že jsem amatér :)
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

ukol

Datum: 28.10.2010 16:33
Autor: neregistrovaný (82.117.156.234)
Hodnocení autora: není
Příspěvků: 0
Zdravim,
zkoušel jsem ten ukol a když jsem to napsal takhle :

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


Dim a As String = TextBox1.Text

MsgBox(a, "výborne")



End Sub

tak mě to furt házi chybu že "vyborne" nelze prevest do integer to mě je jasny když je to text, ale proc to program chce prevadet do integer ?
Mužete prosim někdo poradit jak by to mělo byt aby to fungovalo podle zadani ? diky :)
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: ukol - mohlo by to být takhle

Datum: 30.1.2011 15:12
Autor: neregistrovaný (89.102.83.252)
Hodnocení autora: není
Příspěvků: 0
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a As String = TextBox1.Text
MsgBox("Do pole jste napsali tento text:" & a)
End Sub

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dim a As String = TextBox1.Text
End Sub
End Class
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Cvičení 1 lekce

Datum: 28.11.2010 1:24
Autor: neregistrovaný (89.103.96.12)
Hodnocení autora: není
Příspěvků: 0
Zdravím prosím o zkontrolování domácího cvičení z 1 lekce poněvadž jako začátečník mam v tom trochu víc hokej


Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        MsgBox("klik")

        MsgBox(TextBox1.Text)

    End Sub

End Class
 
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Překlep

Datum: 28.11.2010 1:30
Autor: neregistrovaný (89.103.96.12)
Hodnocení autora: není
Příspěvků: 0
Teda 3.lekce cvičení
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

Zaokrouhlení a zobrazení destinných míst

Datum: 26.12.2010 22:11
Autor: neregistrovaný (82.114.200.221)
Hodnocení autora: není
Příspěvků: 0
Dobrý den,
Rád bych se zeptal, jak zobrazit v TextBox1.Text desetinné číslo např. promenna = 123,256898 (deklarované jako Double) jen se dvěmi desetinnými místy??? tedy 123,26 ???

Děkuji za odpovědi.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Zaokrouhlení a zobrazení destinných míst

Datum: 27.12.2010 23:04
Autor: Milan Suk
Hodnocení autora: 33
Příspěvků: 91
Druhý odkaz na Googlu a dokonce vede na vlákno ve fóru přímo tady na webu...

Ale což :D

Dim promenna As Double = 123,256898
Dim zaokrohlene As Double = Math.Round(promenna, 2)
'Kde ta dvojka je počet desetinných míst
 
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Zaokrouhlení a zobrazení destinných míst

Datum: 27.12.2010 23:06
Autor: Milan Suk
Hodnocení autora: 33
Příspěvků: 91
Potom už samozřejmě upravíte podle svého, popř. zobrazíte v tom svém TextBoxu, ale princip je stejný, protože je tam asi největší problém v tom zaokrouhlení...
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

2 proměnné v jedné

Datum: 8.1.2011 17:18
Autor: neregistrovaný (90.181.50.177)
Hodnocení autora: není
Příspěvků: 0
Dobrý den jsem hodně mírně pokročilý a potřeboval bych jak nadeklarovat proměnou která bude mít 16 indexu "A(16)" a bude se skládat z dalších dvou proměnných "B(8)" a "C(8)"...

Děkuju za odpověď
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

VB

Datum: 15.9.2011 14:52
Autor: neregistrovaný (88.100.217.128)
Hodnocení autora: není
Příspěvků: 0
Ahoj

Prosím chtěl jsem se zeptat, jak by se dalo v tomto kódu ošetřit, aby v polích kde se má zadat číslo bylo opravdu číslo a kde text, tak aby se zadalo aspon něco, a né aby to mohl nechat uživatel bez vyplnění.
Předem díky moc

Dim a As Integer
Dim b As String


a = InputBox("Zadejte jakékoliv číslo, které vás napadne")
b = InputBox("Napiste jakoukoliv věc co vás napadne")

Text1.Text = CStr(a)
Text2.Text = CStr(b)


End Sub

 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: VB

Datum: 3.11.2011 20:39
Autor: Milan Suk
Hodnocení autora: 33
Příspěvků: 91
Viz. další díl o podmínkách ...
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

kam to napsat.

Datum: 4.12.2011 11:18
Autor: neregistrovaný (89.24.4.129)
Hodnocení autora: není
Příspěvků: 0
Kam se má napsat toto?
Dim a As Integer = CInt(TextBox1.Text)
Dim b As Integer = CInt(TextBox2.Text)
Dim c As Integer = a + b
TextBox3.Text = CStr(c)
 
           [Odpovědět]
 
Hodnocení: -2 Čekejte, prosím...
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.