Új hozzászólás Aktív témák
-
nagyúr
Sziasztok!
Most kezdtem el foglalkozni a VS.NET -tel és a C# nyelvvel. Ha van köztetek olyan, aki ezzel foglalkozik vagy csak érdekli itt a helye.
Szívesen vennék egy-két magyar nyelvű leírást, ha van valakinek. Angolul a Microsoft ellátja az embert temérdek tutoriallal meg sample progival, de magyarul eddig alig találtam valamit.
Nagyon tetszik egyébként a környezet, mert nem kell minden windows-os dolgot lekódolni. Egy sor alapvető műveletet kivesz a kezünkből a VS.NET.
Ettől függetlenül nem a legkönnyebb nyelv, mert full objektumorientált, ami (nekem) kicsit nehezebb téma a régi c++ -os tömbkezelésnél, stb.Szóval várok minden nemű írást ide, legyen az vélemény attól, aki próbálta, kódrészlet, kérdés... bármi a témában.
Hali !!!
[Szerkesztve]
[ Módosította: Kalandor ]
-
nagyúr
Igen. Tetszik, hogy a formokat VS.NET -ben csak berakod és csak az eventeket kell leprogramozni. A gombok, menük és a többi alapelem rendelkezésedre állnak készen.
A másik ami megfogott az a köztes nyelvre fordítás. Ezek szerint akkor a nagyvállalati összevisszaságokra (ami MO-on különösképp jellemző) is lehet egységes felületet fejleszteni. Megírom a progimat XP alatt és egy SPRAC procis unixos rendszerben futtatom (persze ez nem ilyen egyszerű, de majdnem). -
nagyúr
LOL!!
Köszi a hozzászólást. Nem kellett volna off topc-ként írnod.
Igazad van. A .NET Framework nélkül nem megy. Persze ez is MS trükk, hogy vegyél inkább MS terméket...gondolom
A Borland C++ Builderről már hallottam, de sose néztem meg. EDDIG! Mostmár érdekel.
Az IDE kérdésről tudtam. Nem ez az első, de aVS.NET-ben ''IS'' nagyon hasznos.
Tudod hogy reklámozzák ezzel magukat? Azt mondják, hogy e .NET Framework bevezetésével minden szoftvercsaládjukat lecserélték, ezzel ELSŐKÉNT ismerve fel az XML és a webes programozás nyújtotta lehetőségeket.
És ezt ki veszi be? Szerintem már régen a köztudatban él az XML és a web fontossága és létjogosultsága.
Persze mindezek mellett szerintem a .NET valóban a haladást szolgálja és nem is kis mértékben. -
nagyúr
Senki nem használ C# -ot? Pedig lenne pár kédésem. PLS.
-
nagyúr
Lenne is egy kérdésem: Kivételkezelés.
Számomra ez egy bonyolult téma. Vajon használhatok kivételt az előre várt problémákra is? Honnan tudom, hogy melyik kivétel a ''megfelelő'' az eldobhatók közül és lehet ezeket rangsorolni, hogy ne mindent dobjon el, ha már nem kell?
(Lehet, hogy a kérdések buták, de igazán nem vagyok othon az ilyesmiben.) -
nagyúr
ok. És ha mondjuk én azt szeretném, hogy egy dolog az x-edik formon kivételként eldobandó, a másikon meg elfogadható, akkor ezt hogyan oldom meg? ''Helyben '' kell definiálni?
Most itt arra gondolok, mit fogadunk el és mit nem és ezek néha megváltozhatnak formtól függően.
Vagy ez nagy marhaság? -
nagyúr
Nah, itt vagyok végre.
szóval: egy köztes nyelvre fordít és aztán a natív, tehát minden eshetőséget le kéne programoznod ahhoz, hogy a procit felismertesd. Szerintem ez felesleges.
ezt szerintem nem erre találták ki...
Inkább webes felületekre, adatbázisokkal babrálásra...
Szerintem -
nagyúr
Eléggé az elején járok még ennek az egésznek, de érdekel, úgyhogy írjatok minél több kérdéssel, felvetéssel, stb.
-
nagyúr
Hogyan oldjam meg, hogy egy gomb megnyomására bizonyos helyen a formon magjelenjen egy előre megadott szöveg. Láttam erre példákat, de csak előre meghatározott textmezőben. Lehet valahogy akkor dönteni a helyről, ha már aktuális? Vagy ez hülyeség?
-
nagyúr
válasz paramparya #25 üzenetére
Ettől még a Delphi jó, de a.NET -et nagyon el akarja terjeszteni a MS, úgyhogy el is fogja... ez sem rossz, persze.
-
nagyúr
Én is utálom, hogy programozó suliba jártam pár éve és pascal meg ansi C volt a legmenőbb, amit tanítottak. itt a fősulin szintén c++, de sammi ojjektumorientáltság, assembly, Magic, Prolog... mindből semmi és nincs ma használatos vagy kicsit modern. Felháborító.
ez a C# meg .NET is csak a végén és csak fakultációban. Fakk. -
nagyúr
alapvetően az az elv, hogy van a köztes nyelv (IL) kiküszöböli a pointerek alkalmazását, mivel a fordítás a kész kódot az IL-re fordítja és az adott specifikáción fordít gépi kódra (vagyis futtatáskor). Nem határozható meg előre semmi a futtatókörnyezetről.
Így nem használhatsz pointereket ''csak úgy''. Felügyelt a kód is, tehát szól, hogy a programod ''unsafe'' környezetben használható. -
nagyúr
Hú, hát ez nagy téma.
Az a lista egy adatbázis, mert akkor ha nem konzisztens és nem mentes az ismétlődésektől, hibásan kitöltött mezőktől, akkor még lehet vele bajod.
Ha jól szerkesztett, akkor igazából lekérdezéseket akarsz? CSak ezért, mert ha nem jó az adatbázis szerkezeted, akkor sok fejfájásod lehet vele.
ezt a kiegészítős dolgot díjazom. Jó ötlet. Megvalósítani első elgondolásom szerint úgy tudod, ha a külön file-ban tárolt adatbázisod sorait figyelteted bevitelkor és egyezésnél felkínálja (esetleg legördülőben) a lehetséges egyezéseket. (Ami addig egyezik a karakterláncoddal). Aztán ha bevitted a szót, a listából kiválasztod a neked kellőt.
Most jövök rá: hatalmas LISTA és nem adatb. Sebaj. Akkor is ezt a ''keresést'' próbálnám először, de majd gondolkodom rajt, mert ez lelassíthatja a progidat.
Formon ezt nem nehéz win-es felülettel ellátni. Pl.:Visual Studio.NET
Lehet, hogy ez hülyeség, mert még én is igencsak kezdő szinten vagyok -
nagyúr
válasz return.value #54 üzenetére
ez jó és működik!
Pedig már gondolkodtam, hogyan is csinálnám meg... nem így írtam volna, hanem valószínűleg bonyolultabban.
Kösz a linket! -
nagyúr
Azért én a VS-t nem használnám "másolgatva", telepítés nélkül. okozhat kellemetlen perceket fejlesztés közben. mindenben ilyen bonyolultan gondolkodsz? Mennyi programot kell újra feltelepíteni? Office, VS, SQL szerver, stb. alap, miért működne telepítés nélkül? Igen, tovább tart a programokat újra felpakolni, mint az prendszert, de erre találták ki a ghostolást. Feltelepítesz egy alapot és lemented. Ha reinstall van, csak visszarakod. Én viszont magasról teszek rá, mert ha már tiszta Win, akkor legyen minden más is az. Évente kétszer kibírom, de ez magánvélemény.
-
nagyúr
Ha ez házifeladat, akkor nem szóltam, de ha nem, akkor gondolkodj egyszerűbben:
Ha nem százas nagyságrendű a kategóriák száma, fogod a DataSet-et (vagy bármit) és a kategóriákat betolod egy legördülőbe és abban lépegetve a kiválasztott elem (SelectedItem) lesz a szűrő a gridre. Ez szerintem szebb megoldás és még talán gyorsabb is és nem fogsz elveszni a bindingsource-ok között sem és kevesebb lesz a copy-paste is.
Meg használj hibakezelést (try-catch) is, ha lehet. Az úgy szebb, mint hagyni elveszni a hibákat.
mod:
és konkrétan ezzel a binding cuccal kell megoldani? Csak mert a példa úgy nem életszerű, nem úgy szoktuk.[ Szerkesztve ]
-
nagyúr
eh, lejárt az időm...
Akkor viszont talán érdemes azon elgondolkodni, hogy feltehetnél egy gombot, képet, amin mondjuk nyilak vannak és azok reprezentálák a lépéseket. Azokkal is lehet léptetni a Dataset-ben a következőre. Az OleDb is kikötés vagy Oracle és amiatt van ez?Bár távol álljon tőlem, hogy beledumáljak.
[ Szerkesztve ]
-
nagyúr
Ha connectionstring-ként tárolod az app.configban, akkor úgy is kell kiolvasni onnan:
string cnString = ConfigurationManager.ConnectionStrings["kapcsolatNeve"].ConnectionString;
De mindenek előtt hozzá kell adni a referenciákhoz a System.Configuration.dll-t és a using blokkba is fel kell venni.
[ Szerkesztve ]
-
nagyúr
Egybe is vehető a connstring, viszont az app.configos nevét kell használni.
con.ConnectionString = ConfigurationManager.ConnectionStrings["dbproba.Properties.Settings.Kapcsolat"].ConnectionString;
Szerintem jó a sima DataSet is, nem kell ezt túlcifrázni egy ekkora feladatnál.
Ha a Tables[0] is benne van, elvileg jó lesz. Szerintem az object reference a connectionstring miatt volt. Használj break pointokat debugoláskor.
mod:
Ezeket megmutathatnád még, ha nem megy, mert ezekről nincs infó a kódban, amit linkeltél:dsAdatok dsAdatok;
KategoriakTableAdapter taKategoriak;
TermekekTableAdapter taTermekek;[ Szerkesztve ]
-
nagyúr
No meg a finally-t érdemes használni a kapcsolat lezárásához, nem a try-ba betenni:
finally
{
con.Close();
}Különben kivétel esetén nyitva maradhat.
Így talán szebb és jobb (a rendezést ne nézd...):
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings["app.configban a connstring neve"].ConnectionString;
SqlDataAdapter adapter = new SqlDataAdapter();
DataSet ds = new DataSet();
try
{
con.Open();
adapter.SelectCommand = new SqlCommand("SELECT * FROM Termekek WHERE KaterogiaAzonosito=1", con);
adapter.Fill(ds);
dgvForm1.DataSource = ds.Tables[0];
}
catch(Exception ex)
{
MessageBox.Show("hiba: " + ex.Message);
}
finally
{
con.Close();
{
}[ Szerkesztve ]
-
nagyúr
Értem. Sose használtam még varázslóval mdb-t. Sőt, utálom az Access-t.
megoldás:
OleDb-t kell használni, nem SqlCommandot!
private void button1_Click(object sender, EventArgs e)
{
var con = new OleDbConnection
{
ConnectionString =
ConfigurationManager.ConnectionStrings["dbproba.Properties.Settings.Kapcsolat"].
ConnectionString
};
var adapter = new OleDbDataAdapter();
var ds = new DataSet();
try
{
con.Open();
adapter.SelectCommand = new OleDbCommand("SELECT * FROM Termekek WHERE (KategoriaAzonosito = 1)", con);
adapter.Fill(ds);
dgvForm1.DataSource = ds.Tables[0];
}
catch (Exception ex)
{
MessageBox.Show(@"hiba: " + ex.Message);
}
finally
{
con.Close();
}
}-Zeratul-:
SqlCommand nem ismer olyan providert, hogy OoleDb, erre értettem. Az eleje varászslós és utána már nem OleDb-t használt a kolléga, itt csúszott el.[ Szerkesztve ]
-
nagyúr
Melyik részére gondolsz? A kolléga feljebb belinkelte a projektet, amiben már volt egy varázslós kapcsolat az mdb fájlhoz. Én már abból dolgoztam, de amúgy én se kínlódtam volna azzal. Jobb ezeket rögtön kódból lerendezni.
j0k3r!:
Nagyon szívesen, ezért van a topik.[ Szerkesztve ]
-
nagyúr
De, ezt így kell. Feltöltöd a DataSet-et a query visszatérési értékével és a grid forrásának megadod a DataSet első táblájával. Ez absz. klasszikus megoldás.
persze lehet BindingSource-t is alkalmazni, de az ugyanez pepitában, mert akkor annak adod meg a DataSet-et.
[ Szerkesztve ]
-
nagyúr
-
nagyúr
Most nincs előttem VS, de a comboBox-nál is van DataSource. A grid mintájára készítesz egy lekérdezést, emiben csak a kategórianevek vannak és azt hozzáadod.
Kiválasztásnál meg a ComboBox SelectedIndexChanged eseményekor a comboBox.SelectedItem lesz a kiválasztott mező ebben az esetben.
[ Szerkesztve ]
-
nagyúr
jah... bocs, kell a combobox.datamember, illetve a combobox.valuemember, amiknek az oszlop nevét kell adni így valahogy:
combobox.datamember = "kategoriak"
de ha nem kódból csinálod, akkor a combobox tulajdonságainál is tudsz datasource-t hozzárendelni. Eh, de kár, hogy nincs VS a környékemen most.
Illetve egy harmadik mód, ha úgyis csak ez az egy oszlop van benne, hogy a DS-ből a Rows-t veszed.
Vasinger!:
Este igen... később.[ Szerkesztve ]
-
nagyúr
válasz Vasinger! #1595 üzenetére
Idióta egy feladat... legalább életszerű példa lenne, de ebből így mit tanulsz meg? Gyakorlatilag semmit. Na mindegy.
Szóval az a lényeg, hogy az IndexOf megkeresi az első "," karakter indexét a beolvasott stringben (csak azt vizsgáltam, ha nem üres, de azt is kellene, ha nincs "," benne, meg nincs intre ellenőrzés, meg a szám 1-5 közöttre sem). A string elejéről indulva először a 0. karaktertől keressük. Ha találtunk és még nem értük el a string végét, akkor az előbb megtalált index mögé tesszük a következő körben az IndexOf kiindulási pontját, így már a másodikat fogja megtalálni. Ha még mindig nem értük el a fájl végét, megyünk még egy kört, de már nincs több ",".
Közben az index előtti karaktert számmá alakítva egy összeghez adjuk. Így már meg is van két szám és mivel tudjuk, hogy csak 1 számjegyű számaink vannak, az utolsót úgy vesszük ki, hogy a string vége előtti karaktert alakítjuk számmá és adjuk az összeghez. Közben egy darabszámot növelgetünk 1-től és a végén átlagolunk.
Bugyuta, értelmetlen, de nem egyszerű feladat. Sok szebb, gyorsabb, egyszerűbb megoldás lenne rá.
A kód:
private static void Main(string[] args)
{
string str = Console.ReadLine();
double szum = 0;
if (!String.IsNullOrEmpty(str))
{
int end = str.Length;
int start = 0;
int indexOf = 0;
int darab = 1;
while ((start <= end) && (indexOf > -1))
{
indexOf = str.IndexOf(",", start);
if (indexOf == -1) break;
szum += Convert.ToInt32(str.Substring(indexOf - 1, 1));
start = indexOf + 1;
darab++;
}
szum += Convert.ToInt32(str.Substring(str.Length - 1, 1));
Console.WriteLine(@"Az összeg: {0}",szum);
Console.WriteLine("-----------");
Console.WriteLine(@"Az átlag: {0}", szum/darab);
}
Console.ReadLine();
}ArchElf:
A tanár talán azt sem tudja, mi a TryParse, én bele se mertem tenni, meg a tömb csalás... nem volt benne a kiírásban.[ Szerkesztve ]
-
nagyúr
válasz WonderCSabo #1603 üzenetére
Nem lehet. Az ékezet ugyanolyan gonosz, mint a goto. ez a hunglish nézet szerencsére ideje korán elsorvadt
ArchElf:
Elnézést, nem ellened irányult az előbbi, de tényleg soha nem használjuk, sehol - talán suliban, de annak a való élethez 0 köze van, amit ott leadnak sokszor."Ennyi erővel a substring sem volt benne a kiírásban"
De, ez benne volt. SubString és IndexOf, más nem. Generikusokkal vagy még inkább regex-szel ezt pikk-pakk meg lehet oldani. Ráadásul az IndexOf lassú is.
[ Szerkesztve ]
-
nagyúr
válasz ArchElf #1607 üzenetére
"Olyan sikeresen, hogy miután "megtanultunk" c-ben 20 óra alatt programozni mindenki sikeresen beadott egy tetszőleges párhuzamosítható probléma többszálas megoldását c-ben linux alá (IPC) megvalósítva..."
Ez ismerős. Nekem is volt hasonló progtanárom. Sosem tanított suliban olyan ember programozásra, aki ebből is élt volna - pedig jó pár nyelvet kellett tanulni. Többet tanultam a suli után 2 hónap alatt, mint addig évek alatt.
[ Szerkesztve ]
-
nagyúr
Látom, van már egy User típusod (Entity Data Model-ből van?), aminek gondolom egy property-je a UserId. EF-nek annyi kell, hogy megadod a lekérdezést, ami az Id alapján kiveszi a nevet (talán user.UserId?).
Sajnos ennyire általános kérdésre csak általánosan lehet válaszolni.
[ Szerkesztve ]
-
nagyúr
Ez az egész feladat valóban primitív, ahogy írták... a kitalálója is az lehet. Most ez a jó vicc, hogy szívózik agy tanítani akar? Vagy csak menőzik, hogy végre sikerült valami kemény feladatot kitalálnia? "fasság"
Amúgy de, sajnos az IndexOf és a SubString kötelező elem, ha jól értem.
-
nagyúr
Egyébként íme a javított verzió:
Console.WriteLine("Kérem adjon meg 3 számot 1-5 között, vesszővel elválasztva: ");
string s = Console.ReadLine();
int i = s.IndexOf(",");
string szam1 = s.Substring(0, 1);
string szam2 = s.Substring(i + 1, 1);
string szam3 = s.Substring(i + 3, 1);
int a = Convert.ToInt32(szam1);
int b = Convert.ToInt32(szam2);
int c = Convert.ToInt32(szam3);
int eredmény = (a + b + c) / 3;
Console.WriteLine(String.Format("az átlag: {0}", eredmény));
Console.ReadLine();Hibák:
- s.Substring(0) nem jó, kell a startIndex és a hossz, vagyis s.Substring(0,1), illetve így is jó, de az s.SubString(0) a teljes stringet fogja visszaadni.
- sok volt a ReadLine();
- kiíratásnál ez nem ír ki paramétert:
"az átlag: ", eredmény", mert nem mondtad meg neki, hogy a paramétert is írja ki.
A helyes használat felsorolás így:
"az átlag: {0}", eredmény". Ha több van, akkor "az átlag: {0}, {1}", eredmény, param2"A feladat maga 0/10 pont, mert értelmetlen, a megoldás 7/10, mert hibás volt. Átmentél, de a tanár nem.
[ Szerkesztve ]
-
nagyúr
válasz robotjatek #1621 üzenetére
Nem érdemes, hacsak mondjuk nem képfeldolgozással foglalkozik valaki vagy esetleg natív kód felé interfészek írásakor lehet hasznos.
Azonban a struct legnagyobb "hátránya", vagyis az érték szerinti hivatkozás mellett max. 16 KB lehet az összes taggal együtt, mert a stack-ben tárolódik, kifelé egyetlen értéknek látszik és nincs automatikus GC sem! Ez pedig optimalizáltság szempontjából nem jó hír.
-
nagyúr
válasz ArchElf #1637 üzenetére
Ezt nem értem. Átpakolod egyik listából a másikba azokat, amelyek törölhetőek, majd az elsőből kitörlöd és a másodikat nemes egyszerűséggel null-lal teszed egyenlővé... vagyis végső soron elég lenne az első lista törölhető elemeit törölni és kész, nem? 1 sor, így viszont x.
Vagy valami más van a háttérben?
[ Szerkesztve ]
-
nagyúr
válasz ArchElf #1642 üzenetére
Túlbonyolítod. Nyilván nem úgy értettem, hogy futás közben kirántjuk magunk elól a szőnyeget, de lehet ezt egyszerűbben is.
Ha tudod, melyik elemek törölhetőek (nyilván eldől valahogy), akkor:
var list = new List<string> {"Elso", "Masodik", "Harmadik", "Negyedik"};
var templist = list.Where(element => element.Contains("dik")).ToList();
list = templist;Ha több szál van, akkor meg nem itt kell megfogni, hanem singletont kell használni, de ez nyilván feladattól függ.
[ Szerkesztve ]
-
nagyúr
válasz ArchElf #1657 üzenetére
Logoláshoz: Microsoft Enterprise Library . egy sor hasznos funkciója van a logoláson kívül.
"Jaja, és amúgy igazi alkalmazásnál StoredProcedure rulez"
Vagy ha még igazibb, akkor NHibernate és Linq például és nem is érdekli tovább a programozót az adatbázis.
adam_:
Én is, hasonlóan ArchElf kollégához egyszerű gombokkal vagy PictureBox-okkal oldanám meg. 2 perc gondolkodás után talán egy osztállyal kezdeném, ami a hajó objektumot zárja magában olyan tulajdonságokkal, mint hossz, elhelyezkedés (koordináták) és talán Decorator Patternnel vagy simán extension method-dal oldanám meg a találatot. Annak ellenére, hogy maga a torpedó egyszerű játék, azért nem 2 sor kód. -
nagyúr
válasz Neil Watts #1688 üzenetére
Épp akartam írni, de látom, Google barátunk már válaszolt.
Kezdj neki, tanulgass, írj mórickákat és ha elakadsz, szívesen segítünk.
-
nagyúr
válasz Neil Watts #1690 üzenetére
Igen, az irány már megvan, csupán pár apróság:
string s = "";
Ez esetben nem feltétlenül kell rögtön értéket is adni a változónak, elég, ha csak létrehozod. Majd később adsz neki értéket úgyis.Console.ReadLine("");
Ez nem nagyon szokás. Helyette inkább
Console.ReadKey(); -
nagyúr
válasz RedSign #1697 üzenetére
pontosan, egy int nem kaphat üres string értéket, ezen azonnal elhasal a fordító. Egyébként az üres string elegánsabb módja a String.Empty;
De ha már nagyon C# 3.0 (vagy felette) az induló verzió, akkor lehet használni type inference-t is, vagyis egy olyan módszert, amivel nem kell a kód írásakor a típusokkal foglalkoznod. Ez bevett dolog az iskolapadon kívül (bár remélem, legalább ilyen alap dolgokat tanítanak) és már az alapozástól alkalmazható.
Például:
string s = String.Empty;
helyett használható simán
var s = String.Empty;
Persze ez egy nagyon egyszerű példa, de nagyon sok esetben igen hasznos dolog. A típusosság megmarad és majd a fordító kitalálja, hogy milyen típusnak is kell ott állnia.
Vannak azért megkötések is. Csak lokális változóknál használható és például lambda kifejezés esetén sem alkalmazható implicit módon.
-
nagyúr
válasz Lortech #1703 üzenetére
"Előszöris szerintem nem kéne var-t használnod ezen a szinten és konkrétan erre a feladatra."
Miért ne? Mindenhol használható. Szerintem érdemes hamar megszokni - csak persze meg is kell érteni, ezért kell utánaolvasni.
A hiba pontosan az, amit írsz, hogy amikor kiírunk, akkor WriteLine, amikor beolvasunk, akkor ReadLine kell a ReadKey pedig szolgáljon csak a program megállítására, ne legyen más funkciója.
Értelme volna mórickázni, de mégsem, mert a példa nem alkalmas semmire. Az alapoktól kezdeni annyit tesz, hogy megérteni az osztályokat, interfészeket, a C# beépített dolgait, hívásait. Példának pedig olyat érdemes nézni, kitalálni, aminek haszna is van. Mondjuk egy számológép. Kicsi, könnyű, nagyon alap.
ArchElf:
Sajnos egyelőre passzolok, ilyeneket mostanában nem csináltam... de megnézem, hátha akad valami régebbről.[ Szerkesztve ]
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Olympus M.ZUIKO DIGITAL 25mm f/1.8 objektív
- Xiaomi Redmi 9 64GB, Kártyafüggetlen, 1 Év Garanciával
- Dell Latitude E7450 Full i7-5600U, 16GB DDR3, 512GB SSD, FHD IPS, Nvidia, HUN Vil.Bill. Új
- Dell Latitude 7310 i7-10610U, 16GB DDR4, 512GB NVMe, FHD IPS Privacy, HUN Vil.Bill, NBD, Új Állapot
- Dell Latitude 7310 2in1 Alu i7-10810U, 16GB DDR4, 512GB NVMe, FHD IPS Touch, HUN Vil.Bill.