Proměnné a datové typy

3. díl - Proměnné a datové typy

Tomáš Herceg       25.04.2007       VB.NET       35810 zobrazení

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.

 

hodnocení článku

6 bodů / 6 hlasů       Hodnotit mohou jen registrované uživatelé.

 

Všechny díly tohoto seriálu

18. Dědičnost 06.10.2008
17. Objektově orientované programování - základy 30.06.2008
16. Třídy a funkce .NET frameworku, o kterých je dobré vědět 31.12.2007
15. Práce se soubory, úvod do objektově orientovaného programování 19.11.2007
14. Vykreslujeme graf 31.08.2007
13. Úvod do grafiky 27.08.2007
12. Práce s textem a řetězci 17.08.2007
11. Kolekce a pole 27.07.2007
10. Funkce a procedury 01.06.2007
9. Přidáváme druhý formulář 18.05.2007
8. Pole, cykly a práce se soubory 14.05.2007
7. Pole 09.05.2007
6. Cyklus For 05.05.2007
5. Složitější podmínky a rozhodovací struktury 26.04.2007
4. Podmínky a operátory 26.04.2007
3. Proměnné a datové typy 25.04.2007
2. Začínáme programovat 25.04.2007
1. Úvod, vývojové prostředí a základní pojmy 25.04.2007

 

Mohlo by vás také zajímat

Používáme T4 šablony

V aplikacích často potřebujeme generovat složitější textové výstupy, do nichž na jistých místech chceme dosazovat různé hodnoty. V tomto článku si představíme, jak k tomuto úkolu použít T4 šablony, které jsou ve Visual Studiu již poměrně dlouhou dobu.

Řešené příklady v ASP.NET - díl 4.: Jak na dlouhotrvající úlohy

Občas potřebujeme ve webových aplikacích provádět dlouhotrvající úlohy, které se nevejdou do jednoho HTTP požadavku. V tomto článku si ukážeme jeden z možných přístupů k řešení tohoto problému.

Windows Presentation Foundation (WPF) - díl 7.: Grid

Grid je jedna z nejdůležitější a nejpoužívanějších pozicovacích komponent ve WPF. Ulehčuje návrh formulářů a své uplatnění nachází v řadě scénářů.

 

 

Nový příspěvek

 

Diskuse: Proměnné a datové typy

Mám problém s chybou, kterou poněkud nechápu. Mohl by mi to někdo vysvětlit prosím

    Dim a As Double = CDbl(TextBox1.Text)
        Dim b As Double = CDbl(TextBox2.Text)
        Dim c As Double = CDbl(TextBox3.Text)
        Dim max As Double

        If a > b Then a = max
        Else b = max

        End If


        If c > max Then max = c

        Label1.Text = ("Největší číslo je: " & max)

já v tom nevidím chybu. Podtržené jako chybné jsou 'Else' a 'End If' hlásí mi to následující 2 hlášky

1)'Else' Must be proceded by a matching 'If' or 'ElseIf'

2) 'EndIf' must be preceded by a matching 'If'

ad1) když napíšu else a za něj hodnou 'b = max' tak vyskočí chybová hláškačíslo 1

ad2) v okamžiku kdy napíšu za 'then' 'a = max' vyskočí chybová hláška

(pro všechny IT, zkoušel sem opakovaně počítač vypnout a zapnout)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

If a > b Then

a = max

Else

b = max

End if

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné a datové typy

kalkulačku jsem vylepšil ještě o tohle doporučuji

(mocniny

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Dim a As Integer = CInt(TextBox1.Text)
        Dim c As Integer = a * a * a
        TextBox3.Text = CStr(c)
    End Sub

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Proměnné a datové typy

Aby program fungoval opravdu jako kalkulačka, je potřeba nastavit datový typ Double.

Tak jsem to udělal já. Přikládám příkal pouze dělení, to se mi zdálo jako nejtěžší- :-)

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim a As Double = CDbl(TextBox1.Text)
        Dim b As Double = CDbl(TextBox2.Text)
        Dim c As Double

        If (b > 0) Then
            c = a / b
            TextBox3.Text = CStr(c)
        ElseIf (b < 0) Then
            c = a / b
            TextBox3.Text = CStr(c)
        Else
            TextBox3.Text = "Nemá řešení"
        End If

    End Sub
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné a datové typy

Dobry den, proc se musi vysledek pocitaci prevest na text a nemuze zustat integer?

TextBox3.Text = CStr(c)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné a datové typy

Když jsem v programu psal více proměnných a došlo k použití proměnné "e" tak mi to vypíše Error

"e"is already declared as a parameter of this metod.

Mohl by mi to někdo prosím nějak lépe vysvětlit

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Funkce, uvnitř které proměnné deklarujete, již má parametr s názvem e, tudíž ho nemůžete použít jako proměnnou.

Jinak je docela dobrý nápad proměnné pojmenovávat nějak logicky a smysluplně.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Proměnné a datové typy

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)

nahlásit spamnahlásit spam -2 / 2 odpovědětodpovědět

Diskuse: Proměnné a datové typy

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

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Viz. další díl o podmínkách ...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné a datové typy

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 :(

nahlásit spamnahlásit spam 0 odpovědětodpovědět

POužij datový typ Double misto Integer

nahlásit spamnahlásit spam 0 odpovědětodpovědět
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


nahlásit spamnahlásit spam -2 / 2 odpovědětodpovědět

Jeste musi zmenit CInt() na CDbl() jinak mu to bude davat cely cisla.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné a datové typy

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?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

vyřešeno.. deklarace proměnných musí být přímo v timeru, říkam, že jsem amatér :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

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 :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

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

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné a datové typy

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ěď

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné a datové typy

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.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

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
nahlásit spamnahlásit spam 0 odpovědětodpovědět

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í...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné a datové typy

Teda 3.lekce cvičení

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Diskuse: Proměnné a datové typy

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

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné a datové typy

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

nahlásit spamnahlásit spam 4 / 4 odpovědětodpovědět

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)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Diskuse: Proměnné a datové typy

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ěď

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné a datové typy

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!

nahlásit spamnahlásit spam -2 / 2 odpovědětodpovědět

Diskuse: Proměnné a datové typy

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")

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Proměnné a datové typy


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

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

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í =.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

no tak už běžím do obchudu pro novy VB :-(

nahlásit spamnahlásit spam -3 / 3 odpovědětodpovědět

Diskuse: Proměnné a datové typy

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

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Diskuse: Proměnné a datové typy

Když napíšu v deklaraci

Public Class Form1
    Dim a As Integer = CInt(TextBox1.Text)

atd.

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

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Kód na vypočítání máš napsat do procedury události click na objekt button.

a ne do třídy Form1.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Proměnné a datové typy

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í.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné a datové typy

Dobrý den, mohl byste prosím popsat tyhle datové typy? Použití a rozsah? Děkuji Honza

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

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.

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

Diskuse: Proměnné a datové typy

Na co a jak se používají konverzní funkce?

nahlásit spamnahlásit spam -2 / 2 odpovědětodpovědět

Diskuse: Proměnné a datové typy

Můžu si ve VB vytvořit svůj vlastní datový typ?

nahlásit spamnahlásit spam -3 / 3 odpovědětodpovědět

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.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Proměnné a datové typy

Jak napsat v rozhodovací struktuře že Radiobutton1.(označený)?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Proměnné a datové typy

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?

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Diskuse: Proměnné a datové typy

Opravit překlep: Mod zbytek po dělní 11 Mod 3 = 2

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji. Opraveno.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback