Anonymní profil Elvis – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Elvis – Programujte.comAnonymní profil Elvis – Programujte.com

 

Příspěvky odeslané z IP adresy 193.179.183.–

.NET › ASP.NET nebo PHP
5. 9. 2013   #181060

Ahoj,

ber to tak, že jsi to napsal do sekce ".NET", takže převážná část lidí tu má kladný vztah k .NET technologii.

Karlos to rozepsal moc hezky..

.NET je framework, který ti umožňuje vyvíjet desktop, web, mobilní aplikace (WinPhone) a mnoho dalšího. Tenhle jazyk je hojně využívaný na vysokých školám a pokud ne, tak používají Javu, ze které C# vzešel, tudíž toho mají mnoho společného.

PHP je intrepretovaný (skriptovací) jazyk a já mám v zásadě problém s jeho koncepcí i vývojem OOP.

Má mnoho kladů, je zdarma, hosting je prakticky taky zdarma, běží to na Linuxu, což u .NET technologií se říct nedá (i když jsou tu pokusy jako Mono) a na trhu je celkem poptávka po PHP programátorech.

Jestli neumíš OOP, tak bych s PHP vůbec nezačínal, protože se celkem snadno může stát, že spadneš do škatule "lepič kódu".

Chce to vědět jak OOP funguje, omrknout nějaký frameworky, např. český Nette a vyzkoušet si nějaký web pod tímhle frameworkem a s jistou štábní kulturou.

To samé ale platí i v .NETu, ať už u ASP.NET či jinde, jen díky tomu, že už to není tak snadný jazyk/technologie, tak těch bastličů je tam o dost méně než u toho PHP.

V zásadě je rozdíl mezi "umět" PHP/.NET a umět, jestli mi rozumíš :) 

Někdo se naučí syntaxu C# jazyka či PHP, udělá hello world a prohlásí, že umí.

Jiný v tom dělají 4 roky a neřeknou, že tu technologii zvládají, jen že jsou schopni v tom něco na úrovni napsat.

Ono je v podstatě jedno, co si vybereš teď, nejlepší je vyzkoušet oboje a co bude tvůj jazyk, který tě bude živit se zvolí až dle toho, jestli seženeš práci jako PHP nebo .NET programátor :)

Evžen

.NET › CheckBox change in BackroudW…
28. 8. 2013   #180855

#2 Dejv
Ahoj, 

spíš bys měl dodat, jestli to je WinForm nebo WPF.

Budu mluvit pouze o WPF.

Problém je v tom, že BackgroundWorker běží v jiném vlákně a z cizího vlákna nemůžeš přistupovat na UI.

Vylítne ti to na InvalidOperationException s komentářem:

- The calling thread cannot access this object because a different thread owns it.

Jediné, jak je možné to obejít je využít Dispatchera a použít Invoke.

XAML

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel>
            <Label Content="Test" FontWeight="Bold" />
            <CheckBox Name="chckBox" Content="Pokus" />
            <Button Name="btnTest" Content="test" Click="btnTest_Click" />
        </StackPanel>
        
    </Grid>
</Window>

CodeBehind

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnTest_Click(object sender, RoutedEventArgs e)
        {
            BackgroundWorker worker = new BackgroundWorker();

            worker.DoWork += worker_DoWork;
            worker.RunWorkerAsync(this);
        }

        private void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            Thread.Sleep(2000);
            MainWindow w = (MainWindow)e.Argument;

            // vyhodi vyjimku
            // w.ChangeCheckBox(true);

            // probehne v poradku
            w.Dispatcher.Invoke(
                new Action<bool>(ChangeCheckBox), 
                new object[] { true }
            );
        }

        public void ChangeCheckBox(bool check)
        {
            chckBox.IsChecked = check;
        }
    }
}

Snad ti to pomůže :)

Evžen

.NET › Delegát
21. 8. 2013   #180613

#6 Tayson
Ahoj,

samozřejmě taky možnost. Ale hezčí bude, když tu logiku zapouzdříš do metody a tou budeš obsluhovat tlačítka, textBoxy a jiné. 

Vyprdni se nanávrhové vzory a ber to z ryze praktického hlediska. Pokud vystavíš takto ty kontrolky a modifikátory, tak je budeš moct měnit z X míst v assembly. Teď třeba přemýšlíš jen o jednom místě, ale nikdy nevíš kde všude se to zvrhne. 

Nakonec budeš toto potřebovat upravit, např. budeš chtít přidat ještě jednu kontrolku, která bude reagovat na změnu toho modifikátoru a budeš to muset dělat na 10ti místech a testovat, jestli se to vždy chová tak, jak má.

Takhle to prostě můžeš zapouzdřit do jedné metody, tu vystavíš a upravuješ jen na jednom místě. 

Evžen

.NET › PHP HASH do C#
16. 8. 2013   #180452

#9 Matěj Andrle

Děláš si srandu? Já znám.NET dokonale

Slušně jsem požádal o radu a výsledkem je, že mě poníží, když mi pošle namespace - jako bych byl úplně vygumovaný...

Promiň, že jsem se tě snažil ukázat správný směr, já úplně zapomněl, že ty všechno umíš nejlíp. Já hlupák zapomněl, že ty píšeš na fórum jen proto, aby ses pochlubil, co novýho řešíš a jak, a vlastně ani radu nechceš, protože nad tebe není.

Evžen

.NET › Delegát
16. 8. 2013   #180440

Ahoj,

jestli jsem to pochopil, tak máš minimálně dvě třídy, jedna pro Form a druhá MyClass, kde máš metodu s try-catch blokem.

Zkrátka potřebuješ mít k dispozici referenci na Form ve třídě MyClass. Tak si prostě rozšiř kontruktor u MyClass o položku Form a ulož si referenci třeba do property. Pak v block catch zavoláš MyClass a specifickou metodu, která přenastaví barvu.

Pokud to chceš mít čistější, tak si udělej interface IForm, kde budeš mít nadefinovaný předpis metody, která mění barvičky na tlačítku a do konstruktoru MyClass nebudeš vkládat Form, ale IForm.

public interface IForm
{
  void ChangeButtonColor(Color color);
}

public class Form : IForm
{
  public void ChangeButtonColor(Color color)
  {
    // implementace
  }
}

public class MyClass
{
  public IForm Form { get; set; }

  public MyClass(IForm form)
  {
    Form = form;
  }

  public void DoWork()
  {
    try
    {
      // do something
    }
    catch (Exception)
    {
       Form.ChangeButtonColor(Colors.Red);
    }
  }
}

Pojmenování samozřejmě přiohni pro svoje potřeby, stejně tak předpis funkce pro změnu barvy.

Samozřejmě nezapomeň při inicializaci třídy MyClass předat referenci formu. Nevím, kde to inicializuješ, ale jestli přímo ve Formu, tak stačí něco takového:

MyClass class = new MyClass(this);

Evžen

.NET › Problem pri kompilacii
15. 8. 2013   #180410

Ahoj,

vypadá to, že tvůj program potřebuje ke spuštění nějakou další knihovnu nebo soubor (konfigurák třeba).

Mrkni se do složky s tvým programem po buildu (bin/release nebo bin/debug) a zkus nejprve zkopírovat celý obsah na plochu a spustit.

Prakticky můžeš odmazat soubory končíci vshost, protože ty tam má Visual studio, ale ke spuštění je nepotřebuješ, stejně tak soubory PDB, který slouží pro debugování.

K tomu vláknu. Vlákno se ukončí v tu chvíli, kdy dokončí veškerou svojí práci, tedy pokud mělo na starosti jen spustit program, tak by se mělo ukončit při ukončení programu pomocí křížku.

Mrkni se když tak do procesů, jestli ti tam po ukončení programu nevisí.

Evžen

.NET › WPF - editace DataGridu
14. 8. 2013   #180323

Ahoj,

pokud by jsi použil jen DataGridTextColumn, tak by ses nemusel starat o přepínání mezi TextBlockem a TextBoxem.

Já bych to viděl dvěma způsoby.

1) vyhodíš si do DataGridTemplateColumn pouze obrázek (ikonku) a přidáš normálně vedle DataGridTextColumn

2) nadefinuješ si, jak má vypadat položka při editaci pomoci CellEditingTemplate

<DataGrid x:Name="u_table" ItemsSource="{Binding}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Položka" SortMemberPath="nazev">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Ho­rizontal">
                        <Image Height="18" Source="{Binding image}" />
                        <TextBlock Margin="5, 0, 0, 0" Text="{Binding nazev}" />
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <!-- změna pri editaci -->
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding nazev}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>
        <DataGridTextColumn Header="Množství" Binding="{Binding mnozstvi}" />
    </DataGrid.Columns>
</DataGrid>

Klíčové je DataGridTemplateColumn.CellEditingTemplate, kde si v DataTemplate nastavíš vzhled při editaci.

Evžen

.NET › Serializace vs. Textový soub…
6. 8. 2013   #179981

#5 Matěj Andrle
Do textového souboru v podobě textu se ukládají data, u kterých už nepředpokládáš další zpracování, rádoby export.

Pokud s nimi chceš pracovat, resp. opětovně je načítat, je vhodné je serializovat a pracovat s nimi v XML, protože je snadno deserializuješ, tedy převedeš na objekty.

Databáze umí samozřejmě to samé, ale ta si umí uchovávat konzistentní stavy, takže by nikdy nemělo dojít k poškození dat např. výpadkem elektriky.

Dále taky hlídá integritu dat, pomocí constrainů, primárních a cizích klíčů.

Nespornou výhodou je, že databáze je k tomu optimalizovaná, zrychluje vyhledávání atp.

Obecně bych na kritický data používal jen databázi, nedokážu si představit, že by banka ukládala a načítala z XML.

Evžen

.NET › Překrývaní groupbox
6. 8. 2013   #179979

Všechno umím, všechno znám. Matěj Andrle, léta páně 2013

Tohle je můj poslední komentář k tvým příspěvkům, vem si z toho co chceš.

Ani můj vysokoškolský učitel programování Doc. Ing. Pavel Herout, Ph.D., jistě znáš jeho knihy, si nikdy nedovolil říct, že všechno umí a všechno zná. Všichni učení lidi totiž čím dál víc zjišťují, že vlastně nic neví, protože jsou to velice rozsáhlá témata a nezbývá nic jiného než se zaměřit na jednu specifickou oblast.

Na to pak přesně sedí citát: "Vím, že nic nevím."

Jedině blbec o sobě prohlásí, že všechno zná a umí.

Ale dejme tomu, že ty jsi jediný případ na světě u kterého by to tak skutečně bylo (ryze hypoteticky). 

Já osobně bych tě do týmu nechtěl ani za zlatý prase, to si radši vezmu k sobě studenta, který ví, že je před ním velká a dlouhá cesta, ale má chuť se učit a je týmovým hráčem.

Věř tomu, že dnešní IT firmy nehledají lidi, kteří všechno znají a umějí, ale naopak lidi, kteří jim zapadnou to týmu. Nikdo si totiž kvůli jednomu nadanýmu programátorovi nenechá zničit funkční oddělení.

A ještě jedna věc, můj předchozí šéf, budiž mu země lehká mi vždycky říkal dvě věty:

"Před tím, než něco vypustíte z pusy se zhluboka nadechněte, napočítejte do 3 a pak mluvte".

"Příště lépe".

Přeji příjemný den,

Evžen

.NET › Překrývaní groupbox
6. 8. 2013   #179970

#5 LukoSS
Musím se zastat LukaSS. Už delší dobu sleduji toto fórum a příspěvky od Matěje. Matěj má teď pravděpodobně prázdniny a zkouší si doma programovat. Dle jeho prvních příspěvků to tak i vypadalo kdy řešil ryze enterprise problémy typu: "Nejde by Console.Beep()".

Pravděpodobně si načetl během prvního měsíce nějakou chytrou knížku/článek a poslední dobou nedělá nic jiného než že buzeruje ostatní ohledně pojmenování a neustále se honosí jak navrhnout pořádný OOP kód. 

Popravdě jsem mu chtěl už několikrát napsat, aby se uklidnil, ale pak jsem si říkal, že za chvíli skončí prázdniny a bude tu opět klid.

Když už se to tu ale nakouslo, tak to sem napíšu.

Matěji, jediný kdo si tu honí ego jsi ty a nemalou dobu to sleduji. Jestli máš tak strašnou touhu všechny poučovat, tak si založ blog a tam si vylejvej svoje srdíčko, jak všichni programátoři píšou jako prasata a čekají na tebe až spasíš svět.

Až tu najdeš dotaz typu "Chtěl bych poradit jak správně navrhnout či pojmenovat .. ", tak tam se můžeš vyřádit, ale začínat každý druhý příspěvek stylem "fuj fuj fuj, takhle ne ne ne.." je dost dost ubohý a věř, že i dost odrazující. Takhle nikoho programovat nenaučíš. Osobně bych chtěl vidět nějaký tvůj zdrojový kód, když jsi takový skvělý programátor.

P.S.: Při nejhorším si počkáme až děti budou muset zpět do školy..

Evžen

.NET › VS2010, OnceClick a Sql serv…
19. 7. 2013   #179312

Ahoj,

programově si při prvním spuštění překopíruj databázi sem:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

Tam si vytvoř nějakou svojí složku a pak se připojuj přímo sem. Tato speciální složka je zahrabaná v Documents & Settings\local\ blabla.. je to jiný dle systému a dokonce i lokalizace, ale každá aplikace tam má přístup pro čtení i zápis, takže nemusíš řešit oprávnění u uživatelů.

Jediný s čím budeš mít problém je, pokud změníš databázové schéma, tak ti to bude čumět na starou DB s původním schématem. Ale s tím už si zajisté poradíš.

Evžen

.NET › Německé Windows: falsche Sys…
18. 7. 2013   #179289

#3 motorcb
 Formátuje to dle specifické kultury a Invariant má být kulturně nezávislý, tedy se bude chovat všude stejně.

Problém je, že některé oblasti používají desetinnou čárku, jiné desetinnou čárku a aby to nebylo málo, tak někde používají tečku jako oddělovač tisíců.

double d = 0.0;

string myString = "123456,7";
d = Double.Parse(myString, CultureInfo.InvariantCulture);
// vrati d=1234567.0
d = Double.Parse(myString, CultureInfo.CreateSpecificCulture("en-EN"));
// vrati d=1234567.0
d = Double.Parse(myString, CultureInfo.CreateSpecificCulture("cs-CZ"));
// vrati d=123456.7

myString = "123456.7";
d = Double.Parse(myString, CultureInfo.InvariantCulture);
// vrati d=123456.7
d = Double.Parse(myString, CultureInfo.CreateSpecificCulture("en-EN"));
// vrati d=123456.7
d = Double.Parse(myString, CultureInfo.CreateSpecificCulture("cs-CZ"));
// FormatException - Input string was not in a correct format.

Nevím, co přesně potřebuješ, nemám k dispozici zdroják, ale odlaď si to tak jak potřebuješ buď pro jednu "kulturu" nebo to udělej nad tím invariantem. Případně můžeš před parsováním použít string.Replace a zaměnit tečky za čárky nebo čárky za tečky, to záleží na tom, co v aplikaci preferuješ.

Určitě je vhodné uživatele informovat o tom, že se aplikaci to či ono nelíbí a ať to napraví :)

Evžen

.NET › Německé Windows: falsche Sys…
18. 7. 2013   #179285

Ahoj,

ano, to je dost pravděpodobné.

Zkus toto:

double d = Double.Parse(myString, CultureInfo.InvariantCulture);

Evžen

.NET › C# Lze detekovat kde uzivate…
4. 7. 2013   #178768

Lze kreslit i ve WPF a to vektorově. Takže si můžeš např. jednotlivé elementy ukládat do fronty a víš, jak šli jednotlivé elementy po sobě. 

Pak jednoduše můžeš projít kolekci "children" nad canvasem a odmazávat elementy, které chceš.

PaLo

.NET › Array.Exists...
28. 6. 2013   #178521

#1 PeterSura
Ano, jedná se o lambda funkce a objevují se čím dál častěji :)

Tvá funkce se dá česky popsat asi takto:

prohledej pole a zjisti, jestli se zde nachází prvek "element", který je roven hledanému číslu. 

Možná tě mate ten "element", ve výsledku je to proměnná, kterou si zavádíš ty sám, tzn. že stejně tak můžeš napsat toto: 

bool vyskyt = Array.Exists(pole, x => x == hladaneCislo)

Lamba výrazy celkem často využívám při komunikaci s DB. 

Pokud přistupuješ ke kolekci, která je silně typová, tak pak můžeš kontrolovat jednotlivé prvky toho daného typu a podmínky skládat stejně jako kdyby si dělal klauzuli IF

string supplierId = "supplier";
var solutions = Repository.GetAll<Solution>(s => s.ID_Supplier == supplierId && s.UpdatedDate > DateTime.Now.AddDays(-7));

Neboli vrať mi všechny řešení pro dodavatele "supplier", které byly změněny za poslední týden.

Takhle teoreticky to vypadá složitě, ale jakmile to začneš používat, tak zjistíš, že to není žádná magie.

Evžen

.NET › kompilacia
13. 6. 2013   #177962

Ahoj,

moc netuším, co ti na tom konkrétně nejde.

1) doporučuji používat IDE, nejlépe Visual Studio, konkrétní verzi si stáhni dle typu projektu.

2) pokud nevíš jak s csc, tak si vyvolej help např. pomocí: csc /?

3) vytvoř si jednoduchý příklad pro test např:

using System;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello");
        }
    }
}

4) Ulož to jako Program.cs

5) spusť si vývojářskou konzoli Start-> All programs-> Microsoft Visual Studio 2010 ->Visual Studio Tools ->Visual Studio Command Prompt (2010)

6) odkrokuj se na Céčko pomocí cd.. (ano jsou tam dvě tečky) 

7) zkompiluješ pomocí csc Program.cs

8) spusť pomocí Program.exe

Tadáá hello je v konzoli.

Evžen

.NET › Instalator - Updator
29. 5. 2013   #176914

Vyzkoušej ClickOnce od Microsoftu.

Evžen

.NET › [c#] Pohyb objektu pomoci kl…
28. 5. 2013   #176853

#22 Nonameboy
Ahoj,

jak již bylo zmíněno, používáš moc magických konstant..

Vytvoř si konstanty např UpKey, DownKey, EllipseWidth, EllipseHeight a další..

Budeš to mít přehledně na jednom místě a snadno to pak upravíš.

Dále v reakci na událost OnKeyDown musíš mít ty podmínky, jestli si nepřešel přes tvůj určený okraj, tím pádem budeš mít x nebo y vždy minimálně na 0 a vždy max na 1000 (třeba). Také bych tady nevolal Refresh(), to stačí jednou v Paint metodě (ale nejsem expert přes WinFormy).

private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = this.CreateGraphics();
            g.FillEllipse(Brushes.Red, x, y, EllipseWidth, EllipseHeight);
            Refresh(); // tedy jestli je vůbec třeba
        }

Ještě v tom Paintu koukám, že na začátku přičítáš na počátku + 25 k oběma souřadnicím. Tak to nedělej zde, ale udělej to při inicializaci x a y nebo v konstruktoru třídy.

Evžen

.NET › Jak připojit k novému oknu a…
15. 4. 2013   #175013

Ahoj,

osobně se mi moc nelíbí dávat ty prvky na Canvas, zkus vyzkoušet něco rozumnějšího, třeba grid.

Jinak když jsem si hrál s takovým "kreslítkem" rádoby PaintBrushem, tak při dynamickém kreslení na Canvas jsem musel mít nastaven Background na transparent.

Osobně nevím proč to bylo třeba, ale vzhledem k tomu, že jsem si s tím jen hrál, tak jsem se potom nepídil.

Zkus něco jako:

okno2.Background = Brushes.Transparent;

Kód jsem nezkoušel, ale třeba ti to pomůže. Jinak bych určitě preferoval Grid ;)

Evžen

.NET › [c#] Pohyb objektu pomoci kl…
2. 4. 2013   #174265

#11 Programator3000GT
Díky za info, aspoň víme na čem jsme.

Evžen

.NET › [c#] Pohyb objektu pomoci kl…
26. 3. 2013   #173904

#9 Programator3000GT
Tak pokud chceš přispívat do fóra, tak není nic jednoduššího než se registrovat a přispívat. 

Pokud máš na mysli příspěvky = články, tak stačilo trochu prolézt tento web.

http://programujte.com/pridej-se/

Evžen

.NET › Nedaří se mi přidat referenc…
20. 3. 2013   #173083

Ahoj,

pr. tlačítko na projekt -> Add Reference -> Browse -> (najit a zvolit iTextSharp.dll) -> OK

Pak uz jen do tridy pridas:

using iTextSharp.text;
using iTextSharp.text.pdf;

A vse bezi bez problemu.

Evzen

.NET › Model3DGroup - CreateTriangl…
21. 2. 2013   #171767

Ahoj,

vhodnější by bylo vypsat obsah metody CreateTriangleModel. Bacha na směr normál!

Něco jsem si dříve taky zkoušel, třeba ti to pomůže.

<Window x:Class="WpfExample3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Maticová transformace" Height="350" Width="525">
    <Grid>
        <Viewport3D>
            <Viewport3D.Camera>
                <!-- nastaveni kamery -->
                <PerspectiveCamera UpDirection="0,1,0" Position="-10,-10,10" LookDirection="10,10,-10" FieldOfView="45" />
            </Viewport3D.Camera>
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <Model3DGroup>
                        <!-- bodove osvetleni -->
                        <PointLight Position="-2,-2,4" Color="White" Range="30" ConstantAttenuation="0.5" LinearAttenuation="0.05" QuadraticAttenuation="0.005" />
                        <GeometryModel3D>
                            <GeometryModel3D.Geometry>
                                <!-- pozice bodu a jejich spojeni do trojuhelniku -->
                                <MeshGeometry3D Positions="-1,1,1  -1,-1,1  1,-1,1  1,1,1  -1,1,-1  -1,-1,-1  1,-1,-1  1,1,-1" 
                                            TriangleIndices="0,1,2  0,2,3
                                                             3,2,6  3,6,7
                                                             4,5,1  4,1,0
                                                             7,6,5  7,5,4
                                                             1,5,6  1,6,2
                                                             4,0,3  4,3,7" />
                            </GeometryModel3D.Geometry>
                            <GeometryModel3D.Material>
                                <!-- material krychle -cervena barva a bily odlesk -->
                                <MaterialGroup>
                                    <DiffuseMaterial Brush="Red"/>
                                    <SpecularMaterial Brush="White" SpecularPower="2" />
                                </MaterialGroup>
                            </GeometryModel3D.Material>
                        </GeometryModel3D>
                        
                    </Model3DGroup>
                </ModelVisual3D.Content>
            </ModelVisual3D>
        </Viewport3D>

    </Grid>
</Window>

Přepsání do CodeBehind (pokud to vyžaduješ) by měla být trivka

Evžen

.NET › WPF
20. 2. 2013   #171712

#3 Evzen
Nevýhodou pak je, že C++ je o řád výš

Tím jsem myslel ve smyslu složitosti jazyka. 

Evžen

.NET › WPF
20. 2. 2013   #171711

Ahoj,

toto téma se řeší celkem pravidelně asi na všech možných fórech a výsledkem není nikdy jednoznačné řešení, tím mám na mysli, uč se C++. 

První věc je, že ti ten jazyk musí sedět jako takový i když to není úplně podmínkou, protože to se taky nechá časem zvládnout. Programátora nedělá programátorem to, že zná syntaxi toho, či onoho problému, ale spíše schopnost zanalyzovat daný problém, nastínit možné cesty řešení, přesně vytyčit klady a zápory, aby se lidé, kteří programování vesměs nerozumí mohli rozhodnout. 

To máš jako když si jdeš koupit auto, taky se rozhoduješ dle určitých aspektů, cena, značka (renomé), motor, výbava, reference od známých. Prakticky i tohle vyžaduje zákazník a nejen ten, i tvůj přímý nadřízený bude často stavěn do pozice rozhodnout, kterou se půjde cestou.

Opačný případ je samozřejmě pro čistého kodéra, který "jen" datluje do klávesnice. 

Poslední dobou je to spíše tak, že čistý kodér jsi z počátku a postupně tě začnou zapojovat do odhadů, architektury a analýz.

Co se týče C#, tak syntaxe jazyka je jedna věc a zvládnutí technologií okolo je věc druhá. Víceméně, co jsem pochopil, tak si zkoušel jednotlivé jazyky jako takové a hodnotíš, ve kterém jazyce se ti píše lépe.

C# je jazyk velice podobný Javě, takže přechod mezi základem (podmínky, cykly, aj.) je otázkou měsíce (dvou). Tyto jazyky jsou dnes hojně využívány, ale zejména pro webové řešení. Dnes, v době obláčků, telefonů atd. se moc desktopové aplikace nevyvíjejí. To je určité nutné si uvědomit.

S jazykem C# (resp. .NET technologií) jsou pak spojeny technologie WPF/WinForms, ASP.NET/ASP.NET MVC, WebServices, Linq, Entity Framework, ADO, Html, JavaScript, CSS a v neposlední řadě znalost databází, pro .NET technologii asi nejvíce MS SQL.

Tím chci naznačit, že od znalosti syntaxe jazyka je ještě dlouhá cesta poznání k tomu, abys mohl reálně vyvíjet. Nemusíš se bát tou změtí písmenek a všelijakých zkratek, výsledkem je to, že umíš udělat aplikaci běžící lokálně na PC, webovou aplikaci, umíš se nějak připojit do DB, víš jak navrhnout slušnou aplikaci, databázi, máš ponětí, jak se tvoří design aplikací (jak web, tak desktop) a ten zbytek přijde sám.

Co se týče C++, tak to je jazyk, který dle mého názoru nikdy nezapadne, protože vždy bude typ sw, kde se klade důraz na rychlost, odezvu jako je třeba automobilový průmysl atd. I zde samozřejmě platí, že syntaxe není vše, protože nikdo si dneska nepíše vše od základu.

Nevýhodou pak je, že C++ je o řád výš, protože tady neexistuje něco jako Garbage Collector, vše si budeš muset naalokovat a uklidit sám.

Závěrem ti řeknu už jen jednu věc, ve výsledku budeš programovat v tom, za co tě budou platit v práci. Já začínal na Javě, pak se uvolnilo místo v .NET týmu a od ty době nedělám nic jiného :)

Evžen

.NET › sql filtr like
12. 2. 2013   #171445

Ahoj,

osobně bych nepsal SQL dotaz do ASP.NET stránky přímo, ale využil bych procedur. Tam si můžeš doplnit procenta a navíc máš možnost modifikovat aplikaci bez zásahu do web. aplikace.

Evžen

.NET › Pole objektov
1. 2. 2013   #170959

Ahoj,

dynamické pole v C# (a i jiných jazycích) najdeš v tzn. kolekcích (zkus google, určitě najdeš podrobnosti).

Pro začátek si zajisté vystačíš s generickým listem:

List<Zamestnanec> zamestnanci = new List<Zamestnanec>();

S rozhraním tě teď ještě nebudeme trápit.

Jen pro vysvětlení toho tvého kódu:

zamestnanec[] zam = new zamestnanec[10000];

- toto prakticky znamená "vytvoř mi 10 000 škatulek, kam budu dávat objekty typu "zamestnanec"

- analogicky sis připravil 10 000 prázdných sklenic, ale ještě si do nich nenalil třeba pivo

- před napitím tedy musíš vůbec specifikovat, jestli to je pivo, džus, víno či jiná tekutina a nalít tam třeba jen půlku či celou

for(i=1;i<10000;i++)
- tady pozor! u C# a i jiných jazyků jsou pole indexovány od 0, nikoliv od 1, nevím, jestli to byl od tebe záměr

Chyba v tvém kódu (tedy aspoň ta zásadní) je, že nemáš inicializovaný objekt, se kterých pracuješ.

        static void Main(string[] args)
        {
            int i;
            zamestnanec[] zam = new zamestnanec[10000];
            for(i=0;i<10000;i++) // iterujeme od 0!
            {  
                // nejprve inicializujeme zamestnance
                zam[i] = new zamestnanec();

                zam[i].ziskajmeno();
                zam[i].ziskajpriezvisko();
                zam[i].ziskajvek();
                zam[i].ziskajmzdu();
                zam[i].vypis();
            }
            Console.ReadLine();
        }

Ty si zkrátka připravil 10 000 pracovních míst, ale zapomněl si najmout zaměstnance ;)

Rady na závěr.

  • Když neznáš přesný počet, tak použil kolekce, třeba právě zmíněný List
  • Iteruj ve for cyklu od nuly (for (int i = 0; i < ....)
  • Názvy objektu piš s prvním velkým počátečním písmenem (zamestnanec-> Zamestnanec)

Evžen

.NET › pomalu zviditelňující se text
30. 1. 2013   #170836

Ahoj,

zkus tohle:

<Label Name="MagicText" Content="Text">
    <Label.Triggers>
        <EventTrigger RoutedEvent="Window.Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation
                        Storyboard.TargetName="MagicText"
                        Storyboard.TargetProperty="Opacity"
                        From="0.0" To="1.0" Duration="0:0:5"
                        AutoReverse="True" RepeatBehavior="Forever" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Label.Triggers>
</Label>

Evžen

.NET › C sharp Windows application
21. 12. 2012   #169161
.NET › Načítání dat z excelu
12. 12. 2012   #168703

   

    using Microsoft.Office.Interop.Word;

    /// <summary>
    /// Trida, ktera usnadnuje praci s WordInterop knihovnou.
    /// </summary>
    public class WordInterop : IDisposable
    {
        #region Fields

        /// <summary>
        /// Reprezentace null objektu.
        /// </summary>
        protected static object NULLOBJECT = System.Reflection.Missing.Value;

        /// <summary>
        /// Reference na aplikaci.
        /// </summary>
        protected Application _application;

        /// <summary>
        /// Reference na dokument.
        /// </summary>
        protected Document _document;

        #endregion // Fields

// Tvuj vykonny kod v nejakych metodach

        #region CleanUp

        /// <summary>
        /// Ukonceni prace s Wordem pres Interop knihovnu.
        /// </summary>
        public void Dispose()
        {
            _document.Close(ref NULLOBJECT, ref NULLOBJECT, ref NULLOBJECT);
            _application.Quit(ref NULLOBJECT, ref NULLOBJECT, ref NULLOBJECT);

            // uzavreni dokumentu
            if (_document != null)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(_document);

            // ukonceni aplikace
            if (_application != null)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(_application);

            // _document.Close(ref NULLOBJECT, ref NULLOBJECT, ref NULLOBJECT);
            // _application.Quit(ref NULLOBJECT, ref NULLOBJECT, ref NULLOBJECT);

            _document = null;
            _application = null;
        }

        #endregion // CleanUp
    }

Je to sice pro Word, ale predpokladam, ze pro excel to nebude o moc jiny..

Evžen

.NET › Kreslení ve WPF
10. 12. 2012   #168567

Ahoj,

nevím, jestli přímo explicitně nepotřebuješ vykreslovat přes DrawingContext, ale jestli ne, tak bych se tomu vyhnul a jak píše Vaizo, použil bych Canvas.

Canvas je jen jeden z mnoha layoutů. Umožňuje ti fixní pozicování elementů na Left, Top ( a případně Z) souřadnice. Pro vykreslování pak použiješ další prvky jako je Rectangle, Patch, Elipse. 

Mrkni třeba sem, pro inspiraci.

Možná tě bude i zajímat kontrolka InkCanvas, která umí rovnou kreslit.

Evžen

.NET › String do tab. WPF v reálnem…
5. 12. 2012   #168084

Ahoj,

nejprve si přečti něco o C# a WPF. Ukládat něco do labelu je při nejmenším divné.

Navrhneš si jednoduché GUI, ať už pomocí designeru nebo pomocí layout prvků.

Tip: Osobně nejvíc využívám Grid, je asi nejpracnější na zapracování, ale uděláš v něm vše a pokud si někdy navrhoval tabulky pro HTML, tak nebudeš mít moc problém.

Na GUI si přidáš 3x textBox a jeden button a pokud jedeš ve WPF 4.0, tak ten má v základu DataGrid, tedy tabulku. Pokud používáš framework 3.5, tak si budeš muset dotáhnout knihovnu z codeplexu.

Vytvoříš si model objekt, který bude obsahovat tvé tři (nebo i víc) hodnoty a vytvoříš si BindingCollection obsahující právě tyto prvky.

Pak už jen jednoduše budeš reagovat na stisk tlačítka a po stisku si přečteš hodnoty z textBoxů, vytvoříš model objekt a přidáš ho do kolekce.

DataGrid si ho díky bingingu automaticky nabere a zobrazí.

P.S.: Existuje dvojí způsob používání WPF.. 1) standardně jako WinFormy a nebo 2) MVVM :)

.NET › ASP.net - rozbalovací menu
28. 11. 2012   #167768
.NET › Vyvolání události s dopadem…
27. 11. 2012   #167700

#6 nirman
ReadMessage bude událost jak napsal Ingiraxo, prostě si jí deklaruješ jako public a zvenčí se na ní budeš registrovat přes toto:

server.ReadMessage += ReadMessage

Kde ReadMessage bude metoda odpovídající předpisu události.

Pak ale ty sám někde v kódu, když ti přijde zpráva, tak budeš vyvolávat událost ReadMessage (ten event). Pokud nikdo nebude registrován, tak se nic neděje, pokud ale zaregistruješ více metod, tak budou všechny notifikovány o čtení zprávy.

Výhoda je v tom, že budeš mít server zapouzdřen, zprávy budeš odesílat třeba pomocí metody SendMessage a pokud nebudeš potřebovat čtení, tak se jednoduše registrovat nemusíš.

Dělal jsem něco obdobného, tak se klidně inspiruj:

http://code.google.com/…rowse/trunk/#…

Evžen

.NET › Načítání dat z excelu
22. 11. 2012   #167379

Ahoj,

práce s interopem je velice ošidná. Ten jiný PC bude muset mít stejnou verzi Office. 

V referencích u projektu, kde máš přilinkovanou knihovnu pro práci s Excelem, tedy něco jako Microsoft.Office.Interop.Excel ve vlastnostech nastav "Copy local" na true.

Tím docílíš, že se ti po kompilaci zkopíruje toto DLLko do cílového adresáře.

Bacha na verze!  Verze 14 = Office 2010, Verze 12 = Office 2007. Mám takový pocit, že pokud přilinkuješ 14tku, tak ti to s Office 2007 běhat nebude, naopak pokud přilinkuješ 12., tak ti to poběží jak na 2007, tak i na 2010.

Jinak do excelu (pokud máš office) se dá dostat i jinak, např nastavením connection stringu přímo na excel a pak do souboru přistupuješ stejně jak k databázi, tedy přes selecty, inserty .. 

Jen pro inspiraci http://www.connectionstrings.com/excel

Další alternativou jsou knihovny třetích stran, např. můžu doporučit Gembox Spreadsheet, která je zatraceně jednoduchá, při určitých omezení zdarma a hlavně rychlá.

Evžen

.NET › Střední škola programování
15. 11. 2012   #166839

#4 Vaizo
Já bych zase naopak radši volil střední školu technického směru, průmku, než gympl. Nikde není psáno, že člověk vysokou 100% dodělá a mít jen papír z gymplu je dost málo.

#3 Yohaku

Ty klobouky zrovna nevypadají jako technická škola. Buďto si vyber něco přímo na IT (tedy nejen školu, která dělá do hnoje, ale protože jde s trendem, tak přidá obor Informační technologie) a nebo jdi do elektra.

Pokud budeš mít elektro průmku, třeba se zaměřením na IT a pak začneš VŠ, tak minimálně budeš mít lepší přehled. Kdyby se ti pak nedej bože VŠ  nepovedla (alespoň na poprvé) dotáhnout do zdárnýho konce, tak budeš mít větší záběr.

Resp. budeš moci hledat práci jak v IT (programátor, admin..), tak i v elektru.

Na druhou stranu, já jsem osobně zhodnotil svoje znalosti z elektra na IT VŠ několikrát, např. na ryze technických předmětech zabývající se stavbou ALU. I když otázka je, jestli se to vůbec ještě bude učit :)

Ber to jako další názor, ale já osobně bych svoje děti na gympl neposílal, protože bez VŠ nejsi nic.

Evžen

Delphi › Překážky + Gravitace (2D hra)
12. 10. 2012   #164535

Ahoj,

tomu "propadávání" se říká kolize. Zkus zapátrat na internetu a určitě najdeš plno materiálů jak na to.

Ve výsledku jde o to, že kontroluješ, jestli lze pohybující se "čtvereček" umístit na danou pozici, tedy jestli již na dané pozici něco není.

Složitost a náročnost se odvíjí od toho, co vlastně děláš. Pokud budeš mít jednoduchou hru typu hledání min nebo tetris, tak to lze řešit pomocí pole (nebo spíše dvourozměrného pole). U náročnějších se jednotlivé prvky obalují právě třeba čtverečkem nebo jiným zjednodušeným obrazcem a kontroluješ, jestli nedošlo k průniku.

Evžen

.NET › Tutorial na asp.net + ms sql
9. 10. 2012   #164338
.NET › Syncronizace databází
2. 10. 2012   #164000

Ahoj,

microsoft má na to vlastní framework, ale nějaké zkušenosti s tím nemám.

Zkus zapátrat po "Microsoft Sync Framework".

Evžen

.NET › C# WinForm programování
27. 9. 2012   #163814

#12 P
To byla obecná odpověď a ASP.NET jsem uvedl pouze jako příklad. 

Evžen

.NET › C# WinForm programování
27. 9. 2012   #163810

#10 matesz
Ahoj,

designery úplně nezatracuj. Já osobně miluju designer v MSSMS (Microsoft SQL Server Management Studio).

Ano, umím SQL, ale nevidím důvod, proč bych měl dělat otrockou práci s vypisováním vytváření jednotlivých tabulek, sloupců, cizích, primárních klíčů, indexů aj., když lze velice snadno vytvořit diagram a elegantně si všechny tabulky vytvořit a hned vizuálně vidím, co s čím je propojené atd.

Tady třeba já osobně pociťuji přínos.

Ale ta myšlenka s chodem na pozadí, to jsem myslel tak, že když jsem já začínal s ASP.NET, tak jsem přesně nevěděl, jak jednotlivé komponenty stavět ve smyslu plnění v XML struktuře.

Příklad:

<asp:Label ID="lbDisplayName" runat="server" Text="Můj popisek" />

Dřív než jsem pochopil k čemu je runat, tak jsem vypozoroval, že u všech komponent pracující se serverovou částí prostě tento parametr mají vždycky vyplněn a smysl mi časem došel.

To byl jen triviální příklad na pochopení :)

Jde o to, že každá komponenta má milion možných parametrů jak ji přiohnout k obrazu svému, ale nikde se dvakrát nepopisuje, který ty vlastnosti jsou zrovna ty důležitý.

Pokud vezmu opět jako příklad sám sebe, tak například při studiu netriviální komponenty GridView, na kterých jsou postaveny všechny přehledové stránky, jsem postupoval tak, že jsem si naklikal jednoduchý příklad v designeru a zpětně jsem zkoumal, co to ten designer vygeneroval do stránky aspx a takto jsem pochopil, že zde musí být něco jako DataSourceID a definice jednotlivých sloupců zanořených v tagu <Colums>

Jen jsem to využil jako berličku, zjistil jsem si jak nejtriviálněji komponenty používat a pak při samotným používání se ty složitější věci okolo člověk doučí :)

Jak už bylo zmíněno, designer ve VS není všemocný, jakmile do toho zapojíš JS,CSS, jakože bez toho se dnes stránky skoro neobejdou, tak jeho užití jde do kopru. To samý při tvorbě layoutu.

Jakmile se člověk naučí používat komponenty, tak designer nepotřebuje, zapne zdroják a sází to tam jak brambory, přesně tak jak chce a potřebuje ;)

Evžen

.NET › DataBinding vs. VisualStudio…
24. 9. 2012   #163682

Ahoj,

jestli tomu spravne rozumim, tak mas problem zejmena s designerem..

Pokud pouzivas nektere pokrocilejsi techniky, tak doporucuju designer uplne vynechat popr. pouzivat ho jen velice ramcove. Osobne mi prijde prace v x(a)mlu daleko rychlejsi nez-li pretahavani a nastavovani vlastnosti pomoci designeru. Navic se ti negeneruji zbytecne parametry, ktere nepotrebujes, ci ponechavas je v defaultnim nastaveni. 

Designer taky vetsinou sazi prvky GUI fixne, tedy pozice X, Y, vyska, sirka + margin. 

V praxi ale vetsinou vyuzivame layouty (http://www.wpftutorial.net/Layout.html).

Po pravde receno, wpf ma tak propracovany system bindingu, ze vyuzivat udalosti ala WinForms mi prijde skoda.

Napr. pokud mas ve WPF jednoduchy datagrid, textBox a tlacitko a chces pomoci tlacitka pridavat text do gridu, tak muzes vyuzit bud standardni udalostni model tzn:

  • napr. v udalosti Loaded si nactes zdroj dat ItemsSource (napr. xml, db ci jinak)
  • double klikem vytvoris udalost onClick nad tlacitkem
  • do OnClick udalosti zapises sebrani hodnoty z textBoxu, pridani do ItemsSource
  • dale musis vytahnout View a refreshnout, aby se ti to vubec zobrazilo

Toto vypada relativne jednoduse, ale prijde zakaznik (ktery je vzdycky nespokojeny), umane si, ze misto gridu chce listView, misto textBoxu chce comboBox a pro tebe to bude znamenat rozkopat pulku jak GUI (cemuz se nevyhneme nikdy), tak ale i pulku vykonnyho kodu. Udalosti jsou zkratka prilis vazany na konkretni prvky GUI.

WPF ale nabizi novy a po zvladnuti daleko prijemnejsi model propojovani dat.

V dnesni dobe se ruzny odnoze MVC vyuzivaji vsude. I WPF ma svoji odnoz nazyvajici se MVVM neboli

Model-View-ViewModel

Spravne by to asi melo spis byt Model-ViewModel-View, protoze ten dulezity prvek je ViewModel, ktery reprezentuje ten "klin" mezi daty a GUI.

Vysledek je vlastne ten, ze nepises udalosti pro konkretni prvky, ale pises obecne nejakou akci, a na GUI zadas, kterou akci ma tlacitko spustit. To jestli akce je implementovana ci neni, o tom GUI nevi naprosto nic, analogicky ani ViewModel nevi, jestli data, ktery pozmenil View zobrazuje ci ne.

Komunikace View-> ViewModel jde celkem bez problemu, vyuzivaji se tzn. Commandy, ktere se z GUI vyvolavaji. Horsi je ale komunikace z ViewModelu na View. 

Pokud napr. pomoci tlacitka pridas nejaky prvek, tak i pres udalosti musis obnovit datagrid, aby se ti data zobrazily.

U MVVM to funguje trocha jinak. ViewModel musi implementovat rozhrani INotifyPropertyChanged a pri zmene jakyhokoliv prvku odpali udalost o tom, ze se zmenila vlastnost se jmenem XXX. Na to reaguje View.

Z pocatku se toto zda jako slozite, ale je to velice elegantni a zrovna mne uz se to nekolikrat osvedcilo, protoze zakaznik meni nazor ze dne na den a tam, kde jeden den byl checkBox je druhy den comboBox a treti den opet checkBox.

Pokud te to aspon trochu zaujalo, doporucuju tyto stranky:

http://msdn.microsoft.com/…d419663.aspx

http://xaml.cz/…za-krokem-1/

Evzen

.NET › C# WinForm programování
24. 9. 2012   #163681

Ahoj,

nevim jak u WinFormu, ale u ASP.NET a WPF prakticky designer vubec nepouzivam. 

Pri pouzivani komponent tretich stran, svojich vlastnich a pri propojeni s DB a nastylovanim se designer povetsinou zacne chovat vice ci mene silene a clovek je nucen ho prakticky uplne ignorovat.

Maximalne, pokud mam hodne rozsahlou stranku nebo komponentu zanorenou nekolikanasobne v ruznych panelech, tak nekdy vyuziju toho, ze po nakliknuti komponenty v designeru se oznaci i v ASP.NET/XAML prehledu.

Nicmene designer nezatracuj, v pocatcich ti urcite pomuze pochopit co se deje "na pozadi" pri tom ci onom nastaveni.

Evzen

.NET › Co byste si přáli v .NET a C#
19. 9. 2012   #163441

Mně by se líbilo, kdyby fw 4.0 měl automaticky v sobě (vedle sebe) fw 3.5 a analogicky pro ostatní.

Už se mi párkrát stalo, že klient měl nainstalovaný pouze .net 4.0 a 3.5 chyběla úplně.

Pak by se mi líbilo u WPF, kde tradičně využívám MVVM pattern, nějaká vychytávka (atribut?) nad property, abych nemusel pořád tupě opisovat toto:

        private string _displayName;
        public string DisplayName
        {
            get
            {
                return _displayName;
            }
            set
            {
                if (_displayName != value)
                    _displayName = value;
                NotifyOfPropertyChange(() => DisplayName);
            }
        }

Evžen

.NET › Vícenásobné ukládání do soub…
30. 8. 2012   #162406

Ahoj,

popsal si to celkem zmateně, ale dejme tomu že máš dva problémy:

1) Jak ukládat do text. souboru bez odmazání původního obsahu

Zkrátka chceš začít zápis tam, kde skončil zápis poslední neboli appendovat textový soubor.

Zkus http://msdn.microsoft.com/en-us/library/system.io.file.appendtext.aspx

Nebo vygůgli něco jako "C# append text file"

2) Potřebuješ ukládat vícero záznamů za běhu a nevíš předem přesný počet

Na toto jsou v .net frameworku (a nejen tam) kolekce. 

http://msdn.microsoft.com/en-US/library/ybcx56wz(v=vs.80)

Popravdě to je celkem základ, bez toho se nehneš. Zkus zapátrat, určitě najdeš i nějaký text v ČJ, pokud ti nevyhovuje AJ.

Evžen

.NET › Řetězec nemá správný vstupní…
23. 8. 2012   #161963

Ahoj,

koukám na tu diskuzi a musím více méně souhlasit s Ingiraxem. 

Dle kódu vidím, že pracuješ na prográmku ala "Yoko Injection" pro hru UO na Kelevaru. Kdysi dávno jsem ultimu taky hrával a psával jsem tuny skriptů pro yoko. 

Celé mi to přijde jako když hráč se rozhodne napsat si lepší prográmek, než jsou ty stávající a nesystematicky lepí řádky   kódu a doufá, že ono to "nějak" klapne. Samozřejmě, proč ne, třeba tě to nakonec uchvátí a vrhneš se na programování na profesionální dráze.

Ale, nejprve by bylo určitě dobrý seznámit se s jazykem jako takovým, tutoriálů a knížek je na světě nepočítaně. 

Pokud chceš psát program, tak jak již Ingiraxo psal, určitě je nutné mít možnost debuggovat kód. Neříkám, že musíš vyloženě využívat Debugger, nevím jak je to s tím provozem přes UO, nicméně aspoň výpisy do konzole, popř. do souboru aby sis sám mohl vyzkoušet, jestli to či ono má na výstupu, to co ty očekáváš. Takový logování.

Když už něco sesmolíš a ono to nefunguje, tak aspoň zkus zapátrat sám po příčině než to hned odešleš na fórko. Jak už ti "něco" chybku vypsalo, tedy že "Řetězec nemá správný vstupní formát", tak jako první zapátrám po řetězcích v tvém kódu. 

Na začátku chytneš item např.: "0x1BC4,0x1BC5,0x07EA", rozparsuješ ho, v tom nevidím problém až na to, že já bych to rozparsoval jednou a pak už přistupovat k již vytvořenému poli nežli 3x za sebou parsovat ten samý řetězec, ale to vedlejší. Pak se snažíš převézt hexadecimální zápis v řetězci (pokud není nulové) na ushort (UInt16).

Tohle místo se mi nezdálo hned při průletu zdrojákem.

Zkus si založit nějaký testovací projekt bokem a zkus toto:

    public class Program
    {
        public static void Main(string[] args)
        {
            string Type_one = "0x1BC4";
            ushort u = ushort.Parse(Type_one); 
        } 
    }

Vylítne ti výjimka FormatException: Input string was not in a correct format.

Neboli česky to samý, co máš  v nadpisu.

Provedeme malou modifikaci:

    public class Program
    {
        public static void Main(string[] args)
        {
            string Type_one = "0x1BC4";
            ushort u = Convert.ToUInt16(Type_one, 16);
            Console.WriteLine(u);

            if (u == 0x1BC4)
                Console.WriteLine("stejne");
        } 
    }

A, chyba odstraněna.

P.S.: Programátor se ve většině času nezabývá psaním kódu, ale naopak odstraňování chyb v rozsáhlém zdrojovém kódu. Důležitý je si umět poradit ;)

Evžen

.NET › C# > the name textBox1 doesn…
7. 8. 2012   #161190

No, u toho DispatcherPriority ti spis bude chybet using.

Najed na "DispatcherPriority", zmackni ctrl  + . nebo najed na nu ikonku, co se tam objevi a dej

using System.Windows.Threading

To je preci zaklad chlape.

Nebo ruco pridej 

using System.Windows.Threading;
.NET › C# > the name textBox1 doesn…
7. 8. 2012   #161176

1) zkontroluj si existenci TextBoxu s nazvem TextBox1

2) metoda nesmi byt staticka

3) protoze je to cizi vlakno musis pouzit Dispatcher.Invoke

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            Timer cti = new Timer();
            cti.Elapsed += new ElapsedEventHandler(VypisCas);
            cti.Interval = 1000;
            cti.Start();
        }

        protected void VypisCas(object source, ElapsedEventArgs e)
        {
            Dispatcher.Invoke(
            DispatcherPriority.Normal,
            (Action)(() =>
            {

                TextBox1.Text = DateTime.Now.ToString("d.M.yyyy  hh:mm:ss");

            }
            ));
        }
    }
}
.NET › [C#] editovanie .doc dokumen…
25. 5. 2012   #158397

Ahoj, 

no nejsem si úplně jistý, jestli vůbec tímto způsobem budeš schopen manipulovat s Word dokumenty.

Pokud chceš pracovat s Wordem v jeho binární podobě (*.doc), tak buď můžeš sáhnout po Office Interopu (viz google), nutností je mít nainstalovaný Microsoft Office a přilinkovat knihovnu z Office balíku. 

Nicméně já toto zkoušel s různými verzemi a často se to v různých prostředí a s různými Office balíky chová jinak.

Popravdě se tomu vždy vyhýbám jak čert kříži a když už, tak je ideální to odladit na jednu konfiguraci a vyřešit to jako serverovou záležitost.

Od office balíku 2007+ i Microsoft pochopil, že mít tento dokument jako binárku není ideální a vytvořil formáty končící "x" písmenkem (*.docx aj). Toto je vlastně jen zip soubor a v něm jsou uloženy všechny potřebné soubory, veškerá data se ukládají do xml formátu a přílohy do extra složky a z xml jsou pouze odkazy.

I přesto, že jde o XML soubor, tak je to nehorázný moloch a snažit je to editovat standardním způsobem je cesta do pekel. Microsoft si toto uvědomil a tak nám vývojářům .net usnadnil práci, protože vytvořil Open XML SDK.

Ke stažení: http://www.microsoft.com/en-us/download/details.aspx?id=5124

Vývojáři sobě: http://openxmldeveloper.org/

Osobně se mi tento přístup líbí. Nejsi závislý na Office balíku, vše je zdarma. Ale má to i nevýhody, protože k tomu přistupuje pořád jako do XML, tak třeba nezjistíš, kolik má výsledný dokument stránek, neumí to generovat automaticky obsah, protože to si rekonstruuje word sám atd.

FAQ: http://social.msdn.microsoft.com/Forums/en-US/oxmlsdk/thread/19032efe-80af-4a16-b954-1f5a6d2f2236

Pak už ti zbudou jen placené komponenty třetích stran, u kterých si nemůžeš být jist, že až Microsoft vydá novou verzi, že to vše bude pořád fungovat :)

Choise is yours ;)

Evžen

Offtopic › Někdo to Ráth horké
16. 5. 2012   #158003
C / C++ › Prace
16. 5. 2012   #158001

#3 sullucie
Na tohle clovek nemusi byt specialista na cestinu.

Na to ze o neco zadas, tak bys mel urcite napsat:

  • Kdo jsem/jsme (pokud jde o firmu) a trochu se predstavit
  • Svoje pozadavky, priblizit problem
  • Co za to nabizim
  • Termin ukonceni
  • Kontakt na sebe

Na zaver to dat precist komukoliv dalsimu, aby ti rekl, jestli to ma hlavu a patu a jestli nepises treba po K mekky I, popr. pouzit nejaky programky z netu, kterych je dneska halda (vzdyt zakladni korekci ti udela i Word).

Nevim jak ostatni, ale ja kdyz vidim takovyhle nabidky, tak je automaticky radim do skatule "15cti lety kluk, co chce za krabicku lentilek naprogramovat novy GTA". 

Mozna to zrovna tvoje situace neni, ale takovyhle nabidek typu, "Neni to nic slozityho, jen extrahovat PDF do wordu a pridat obrazek (programove)", je tu na netu hromada a vetsinou je to tak akorat pro zasmani.

Jestli se ti zda, ze do tebe jen nepravem siju, tak to se ti omlouvam, ze to tak citis, ale ver, ze to myslim presne obracene. Spis doufam, ze az si to prectou i ostatni, tak se treba pred napsanim podobne nabidky chytnou za hlavu a daji tomu trochu hlavu a patu.

.NET › LINQ - klauzule where a kvan…
24. 4. 2012   #156994

Ahoj Jirko,

já si myslím, že jdeš na to správně. 

Předpokládám, že potřebuješ najít všechny kurzy, kam chodí VŠICHNI studenti, takže pokud na jeden kurz bude chodit jen jeden člověk a druhý ne, tak tento kurz nechceš (tady by stačilo vyměnit All za Any, předpokládám).

Nezapomínej hlavně na to, že když porovnáváš jednotlivé instance mezi sebou, tak opravdu musí být stejné.

Prostě pokud si vytvoříš další instanci studenta, který se bude jmenovat "Jiri Novak" a id bude mít 1, tak už je to jiná instance a pak bys muset porovnávat to, aby se shodovali jména a id a né instance.

/// <summary>
    /// Trida reprezentujici studenta.
    /// </summary>
    public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    /// <summary>
    /// Trida reprezentujici kurz.
    /// </summary>
    public class Course
    {
        public string Name { set; get; }
        public List<Student> Students { get; set; }
    }

    /// <summary>
    /// Testovaci balicek dat.
    /// </summary>
    public class DummyData
    {
        /// <summary>
        /// Seznam vsech kurzu.
        /// </summary>
        public List<Course> Courses { set; get; }

        /// <summary>
        /// Konstruktor plnici seznam dummy daty.
        /// </summary>
        public DummyData()
        {
            Course tempCourse;

            Courses = new List<Course>();

            // prvni kurz
            tempCourse = new Course();
            tempCourse.Name = "first course";
            tempCourse.Students = new List<Student>();

            Student student1 = new Student();
            student1.Id = 1;
            student1.Name = "Jiri Novak";

            tempCourse.Students.Add(student1);

            Student student2 = new Student();

            student2 = new Student();
            student2.Id = 2;
            student2.Name = "Tomas Novacek";

            tempCourse.Students.Add(student2);

            Student student3 = new Student();

            student3 = new Student();
            student3.Id = 3;
            student3.Name = "Petr Novy";

            tempCourse.Students.Add(student3);
            Courses.Add(tempCourse);

            // druhy kurz
            tempCourse = new Course();
            tempCourse.Name = "second course";
            tempCourse.Students = new List<Student>();

            tempCourse.Students.Add(student1);
            tempCourse.Students.Add(student2);

            Student student4 = new Student();
            student4.Id = 4;
            student4.Name = "Jan Tlusty";

            tempCourse.Students.Add(student4);
            Courses.Add(tempCourse);
        }
    }

    /// <summary>
    /// Trida programu. Vstupni bod aplikace.
    /// </summary>
    public class Program
    {
        public static void Main(string[] args)
        {
            // vytvorim si dummy data
            DummyData query = new DummyData();

            // vytahnu si instanci studenty s id == 1 a 3
            IEnumerable<Student> students = query.Courses.SelectMany(c => c.Students).Where(s => s.Id == 1 || s.Id == 3).Distinct();

            // vratim kurzy kde aspon jeden student navstevuje
            var any = query.Courses.Where(c => c.Students.Any(s => students.Contains(s)));
            Console.WriteLine("ANY EXAMPLE:");
            foreach (var x in any)
            {
                Console.WriteLine(x.Name);
            }

            // vratim kurzy kde kazdy student navstevuje kazdy kurz
            var all = query.Courses.Where(c => c.Students.All(s => students.Contains(s)));
            Console.WriteLine("ALL EXAMPLE:");
            foreach (var x in all)
            {
                Console.WriteLine(x.Name);
            }
        }
    }

Vystup do konzole:

ANY EXAMPLE:
first course
second course
ALL EXAMPLE:
// nic :)

Snad ti to pomuze ;)

Evžen.

Inzerce › Hledáme PHP programátora
12. 4. 2012   #156497

Příště bych zkusil PHP fórum ;)

.NET › Binding s property mimo Data…
5. 4. 2012   #156042

Ahoj, 

musím říct, že mi z tvého popisu není úplně zcela jasné o co jde. Každopádně MVVM využívám aktivně s WPF. Možná kdyby si více popsal svůj problém, tak by bylo snazší ti odepsat na konkrétní věc.

Každopádně pokud si vytvoříš okno, dejme tomu ShellView a k tomu ShellViewModel snadno je propojíš takto:

<Window x:Class="MyApp.ShellView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MyApp"
        Title="Moje Okno"
                  WindowStartupLocation="CenterScreen" Width="1000" Height="730">
    <Window.DataContext>
        <local:ShellViewModel/>
    </Window.DataContext>
    <Grid>
	// ...
    </Grid>
</Window>

Díky dědičnosti v XML máš zajištěno to, že každý element v okně bude mít nastavený DataContext na tvůj ViewModel.

Samozřejmě se to dá nastavit i jinak, např.:

        // metoda napr. v app.xaml.cs

	private void Application_Startup(object sender, StartupEventArgs e)
        {
	    ShellView view = new ShellView();
            view.DataContext = new ShellViewModel();
	    
            view.Show();
        }

No když máš zajištěn přístup z okna na ViewModel, tak si do ViewModelu můžeš přidat properties kolik chceš a různě si je bindovat.

// na View
..
<Label Content="{Binding Title}" />
..

// ViewModel
public class ShellViewModel : INotifyPropertyChanged
{
      private string _title;
      public string Title
      {
         get { return _title; }
         set
         {
               _title= value;
               NotifyPropertyChanged("Title");
         }
      }

      public event PropertyChangedEventHandler PropertyChanged = delegate { };

      public void NotifyPropertyChanged(string propName)
      {
	  PropertyChanged(this, new PropertyChangedEventArgs(propName));
      }
}

Samozřejmě těch properties tam můžeš mít kopec. Jen nezapomeň na implementaci INotifyPropertyChanged, protože se jinak View nikdy nedoví, že si za běhu něco na ViewModelu změnil.

Pokud konkretizuješ otázku, tak ti budu schopen napsat více. Snad ti toto pomohlo.

.NET › Spustit jiný program, uložit…
14. 3. 2012   #154930

Ahoj, 

musí říct, že jsem si tvůj příspěvek přečetl několikrát a pořád se nemůžu zbavit myšlenky: "Co tím chtěl básník říci?".

1) ukládání do souboru

Otázka je, co míníš tím "ukládat soubor jinam". Pokud zapisuješ třeba text do souboru, tak každý stream má parametr path, kde si můžeš specifikovat, kam se má soubor ukládat.

            string filename = "c:\test.txt";

            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@filename))
            {
                file.WriteLine("blabla bla");
            } 

Mně spíš připadá, že si začal programovat, přečetl sis obecný věci typu cykly, větvení a abys nedělal jen obyčejný příklady, tak sis chtěl udělat něco jako vir. Prostě zkopírovat aplikaci jinam a spustit tu jinou instanci.

Pokud budeš chtít vyloženě kopírovat použij http://msdn.microsoft.com/en-us/library/system.io.file.copy(v=vs.71).aspx.  

Pozor ale kam zapisuješ, uživatel může mít omezený práva a třeba nepůjde zapisovat všude.

2) Spuštění programu

Lze vynutit ze systému spustit proces a ten spustí aplikaci. 

System.Diagnostics.Process.Start("pbrush");

Pokud místo "pbrush" napíšeš např. cestu k pdf, tak se ti standardně spustí aplikace, která je asociovaná s koncovkou pdf.

.NET › c# razeni pole stringu dle k…
13. 3. 2012   #154811

Ahoj, pokud si vylozene nehrajes a jen potrebujes realizovat tento ukol, tak bych si usnadnil praci s linqem.


            // vycet vsech slov (muze byt i v kolekci)
            string[] words = { "slovo", "abeceda", "text", "nic", "nevim", "a", "abc", "abcd" };

            // ukazka kratsiho zapisu
            var shortQuery = words.OrderBy(q => q.Length).ToList();

            // ukazka delsiho zapisu
            var longQuery = from word in words
                                orderby word.Length
                                select word;

            // vypis kratkeho zapisu
            Console.WriteLine("Kratsi zapis:");
            foreach (string item in shortQuery)
            {
                Console.WriteLine(item);
            }

            // odradkovani
            Console.WriteLine();

            // vypis delsiho zapisu
            Console.WriteLine("Delsi zapis:");
            foreach (string item in longQuery)
            {
                Console.WriteLine(item);
            }
.NET › C# - rozhrani a vlastnosti
12. 3. 2012   #154768

#3 jirkab

Ahoj Jirko, zcela chápu jak to myslíš. Vsadím se, že si začal programovat nějaký klasický příklad na OOP a chtěl sis ho vyzkoušet. Teď si možná říkáš: "sakra k čemu tam vlastně to rozhraní je?".

Když jsem já začínal, byl jsem na tom stejně. 

Tak tedy od začátku:

K čemu je rozhraní (interface)?

Rozhraní jako takový bylo zavedeno proto, abychom se vyvarovali problematice s mnohonásobnou dědičností. 

Pěkná věta, ale její důsledek není asi na první pohled viditelný. Teď mi napadá, to samé si asi řekneš o "E = mc^2". Kdo by si kdy představil, že dnešní jaderná energie stojí na takto pěkném vzorečku :)

Problém s vícenásobnou dědičností je ten, že pokud oba předci obsahují stejnou proměnnou, tak kterou si vybrat?

// ber to jako pseudokod, samozrejme, c# nema mnohonasobnou dedicnost, ale napr. c++ ano 

public class Matka {
  public string oci;
  public string usi;
}

public class Otec {
  public string nos;
  public string oci;
}

public class Dite : Otec, Matka {
  // ci pak oci dite dostane?
}

Samozřejmě tento problém lze řešit různě a plno jazyků se s ním potýká (C++, python a kdoví co ještě). Ale pak přišli chytří pánové, dali hlavy dohromady a řekli si, co když pouze předepíšeme, že daná třída musí obsahovat danou vlastnost (metodu, udalost..) a o implementaci se již starat nebudeme.

Takže zpět k tvýmu dotazu, jestli když je property non-public, tak ji do inteface nepíšu

Svým způsobem ty ani interface používat nemusíš, můžeš používat přímo objekty/třídy. Rozhraní má tu výhodu, že pokud chceš různé objekty používat stejným způsobem, tak si nadefinuješ rozhraní, do kterého předepíšeš metodu, kterou ty potřebuješ zvenčí používat a všech objektech si danou metodu doimplementuješ dle tvojí potřeby.

Automaticky to tedy neznamená, že do interface musíš přepisovat všechny public metody či property. Pouze ty, které pro daný interface jsou pro tebe důležitý a který musí všechny objekty typu IAuto mít. Navíc těch rozhraní můžeš mít víc ;)

Abstraktní třída pak slouží tobě k tomu, abys nemusel pořád psát stejný kód ve všech třídách dokola, zejména je to dobré, pokud tuto vlastnost (metodu) potřebuješ zpětně upravit. Stačí ti jedna změna v jednom souboru.

.NET › VB vs. VisualC++ vs VisualC#
3. 2. 2012   #153138

Ahoj, 

C++ je pořád nejsilnějším jazykem, ale psát v něm není procházka růžovým sadem. Pokud na to máš koule a troufneš si, tak proč ne :)

V C++ se programují zejména výkonově náročné aplikace a většina dnešních her (což se samosebou nevylučuje), ALE začínat rovnou v C++ bez "učitele", který ti bude radit co a jak, když si nevíš rady, tak to ve většině případů dopadne tak, že to zabalíš a vrhneš se jinam. Tím samozřejmě vyzdvihuji ty, kteří to překousli a vydrželi :)

VB.NET se v našich končinách až tak nechytil. To za velkou louží pravděpodobně frčí daleko víc. To si troufám říct hlavně kvůli tomu, že pokud člověk shání nějakou radu/sample, tak se s ním velice často setkávám.

Já  osobně VB.NET nepoužívám, nevyhovuje mi jeho ukecanost, která (pro mne) činí tento kód velice nepřehledným. Zkrátka jsem zvyklý na céčkovou syntaxi a když si projedeš inzeráty na .net developery, tak v drtivé většině hledají programátora ovládající c# a ne vb.

Já šel zlatou střední cestou. C# mi vyhovuje po všech stránkách, vliv "nižšího" výkonu jsem prozatím nepocítil, resp. nikdy jsem nepotřeboval napsat aplikaci, která by měla být výkonově až tak odladěna.

Syntaxe je céčková, obsahuje některé vychytávky z C++, které nejsou v Javě. Vývoj je rychlý a zdrojový kód je přehledný (pokud si to nenapíšu jako prase, což je u všech jazyků :) ).

Ostatně věřím, že nejvíc programy brzdí programátorské seky namísto Garbage Collectoru :)

Každý jazyk si najde svoje zastánce, kteří ti budou říkat, že ten jejich je ten nejlepší, to já si netroufám posoudit, jen jsem ti sem napsal svůj osobní názor s tím, že ti to třeba pomůže ve volbě.  Ta je koneckonců stejně na tobě. Vyber si a programuj. Jinak se to člověk nenaučí.

.NET › C# Problém s databází
3. 1. 2012   #151908

Ahoj, 

nevim, jestli je to chteny nebo ne, ale pripojujes se na databazi SQL CE (Sql Compact Edition). Tento postup by ti +- mel fungovat, pokud se budes pripojovat na SQL server at uz lokalni nebo vzdaleny.

Nevim, jestli je to chteny nebo ne, jestli to mas v zadani nebo jedes dle nejakeho navodu a zkousis si jen tak neco pro sebe. Urcite je dulezity vedet, kterou verzi SQL CE pouzivas, jestli 3.5 nebo 4.0. Pak urcite by bylo dobry vedet, ze jaky ma SQL CE omezeni oproti standardni DB.

Jinak co si ja pamatuju, tak pro vyuzivani SQLCE 3.5 jsem musel doinstalovat jakousi podporu do VS2010, pak pridat reference na System.Data.SqlServerCe a pak vyuzivas misto SqlConnection tridy SqlCeConnection.

Na internetu najdes urcite furu ukazek jak se pripojit napr. http://www.dotnetperls.com/sqlce.

Kdyz napises to vice konkretizujes, tak ti snad budu schopen vice pomoci ;)

P.S.: Nezapomen na zaver pridat ke zkompilovane aplikaci knihovny pro praci s DB.

napr. pro SQLCE 3.5 jsem musel pridat toto:

  • sqlceca35.dll
  • sqlcecompact35.dll
  • sqlceer35EN.dll
  • sqlceme35.dll
  • sqlceoledb35.dll
  • sqlceqp35.dll
  • sqlcese35.dll
  • System.Data.SqlServerCe.dll

Vypada to pak blbe, kdyz u tebe to slape jako hodinky, protoze ty to mas nekde v program files a u zakaznika to vyhodi jakousi chybu :)

P.S.S.: Data source lze zkratit na "Data Source = |DataDirectory|\KOZY.sdf" a bude ti cist z adresare, odkud si dany program spustil

Elvis
.NET › Kniha pro učení .NET 4
20. 12. 2011   #151508

Ceska kniha to neni, ale serie HeadFirst jsou fakt pekne napsany. Mezi nimi je jak kniha pro Javu, tak i pro C#. Urcite bys je nasel i v sede zone internetu a bez jeziska.

Po precteni teto knihy bys mel vedet jak napsat nejakou jednoduchou aplikaci v C#, necekej zadny zazraky.

C# pote vyuzijes jak u okennich aplikaci (WPF nebo WinForms), tak i u webovek (ASP.NET vs ASP.NET MVC). Urcite jako startovni bod dobry, ale spis hledej informace na netu, protoze nez knihu nekdo sepise -> vyda -> nasledne cech precte -> prelozi -> opet vyda, tak uz to bude opet jen minulost.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý