- Mi nincs, grafén akku van: itt a Xiaomi 11T és 11T Pro
- Samsung Galaxy S21 és S21+ - húszra akartak lapot húzni
- Samsung Galaxy A54 - türelemjáték
- Netfone
- Mobil flották
- Fotók, videók mobillal
- One mobilszolgáltatások
- Yettel topik
- Apple iPhone 16 Pro - rutinvizsga
- Samsung Galaxy A56 - megbízható középszerűség
Új hozzászólás Aktív témák
-
Peter Kiss
őstag
válasz
metrion #5031 üzenetére
Csak a rend kedvéért, ilyen random feltöltős dolgokat nem így szokás megoldani, hanem egy kicsivel más technikával:
class Program
{
private const int Dim1 = 5;
private const int Dim2 = 5;
private const int Start = 10;
private static int CalculateNumberCollectionRangeLength()
{
return Dim1 * Dim2;
}
static void Main()
{
var numberCollection = Enumerable.Range(Start, CalculateNumberCollectionRangeLength()).ToList();
var random = new Random();
var table = new int[Dim1, Dim2];
for (var i = 0; i < Dim1; i++)
{
for (var j = 0; j < Dim2; j++)
{
var selectedIndex = random.Next(0, numberCollection.Count);
table[i, j] = numberCollection[selectedIndex];
numberCollection.RemoveAt(selectedIndex);
}
}
}
}A lényeg, hogy egy generált halmazból választjuk random módra az elemeket, nem pedig random elemekkel dolgozunk.
-
Peter Kiss
őstag
-
Peter Kiss
őstag
válasz
trisztan94 #4722 üzenetére
Ki kell váltani egy eseményt, mikor megérkezett a felhasználó pozíciója?
-
Peter Kiss
őstag
válasz
buktagt540 #4585 üzenetére
-
Peter Kiss
őstag
válasz
buktagt540 #4582 üzenetére
Alkalmazásokba lehet rakni user specifikus beállításokat, kb. úgy kell elképzelni mint az AppSetting-et, csak van hozzá designer, és szerintem teljesen legenerálja a kódot hozzá, nem kell string-gel indexelni, majd kiszedni a beállításokat. Egy ilyenbe belerakhatod a default útvonalat (amit javasoltak), de felül is tudod bírálni (készíthetsz erre egy ablakot), mert ezek a beállítások simán írhatóak is.
-
Peter Kiss
őstag
Egy rossz iterátorra ugrunk, de erre nem:
private void SetViewBagSex (Sexes Sex)
{
IEnumerable<Sexes> values =
Enum.GetValues(typeof(Sexes))
.Cast<Sexes>();
IEnumerable<SelectListItem> items =
from value in values
select new SelectListItem
{
Text = value.ToString(),
Value = value.ToString(),
Selected = value == Sex,
};
ViewBag.Sex = items;
}1. kiszedjük az értékeket, lassú (első iteráció)
2. visszapakoljuk az egészet enum-má, lassú (még egy iteráció)
3. végig iterálunk a halmazon (úristen, de hát itt is egy iteráció, és még a SelectList-ből történő render-kor is lesz egy, te jó ég), hogy új objektumokat hozzunk létre, equality check elvileg gyors
4. .ToString()-et nyomunk minden enum-on kétszer, ami reflection-t használ, és ez olyan lassú, hogy ha egy profiler meglátja, kettétörik a kijelződ
5. dynamic típust használunk, amit később eleve cast-olnunk kell, nem épp a leggyorsabb megoldás -
Peter Kiss
őstag
válasz
trisztan94 #4468 üzenetére
public sealed class Sexes
{
private static readonly ResourceManager Localization = new ResourceManager(typeof(SexResources));
public static readonly Sexes Male;
public static readonly Sexes Female;
public static readonly Sexes DoNotTell;
public string Name { get; private set; }
public string Display
{
get { return Localization.GetString(Name); }
}
public int ID { get; private set; }
static Sexes()
{
Male = new Sexes("Male", 1);
Female = new Sexes("Female", 2);
DoNotTell = new Sexes("DoNotTell", 3);
}
public static IEnumerable<Sexes> All()
{
yield return DoNotTell;
yield return Male;
yield return Female;
}
private Sexes(string name, int value)
{
Name = name;
ID = value;
}
public static implicit operator int(Sexes sex)
{
return sex.ID;
}
}És akkor ehhez kell még egy resource fájl, illetve mikor UI-on jeleníted meg, akkor az ID és a Display property kell neked, ezekből kell pl. SelectList-et építeni.
-
Peter Kiss
őstag
válasz
trisztan94 #4465 üzenetére
A type code class valóban egy osztály:
public sealed class valami
{
public static readonly valami Male;
static valami()
{
Male = new valami("Male", 1);
}
private valami(string name, int value)
{
/* ... */
}
}Zárt, nem mókolható kívülről (0, explicit cast), gyors, kiegészíthető a fentieken kívül is mint már mondtam pl. lokalizációval (kell egy resource fájl, egy ResourceManager és egy property, ami a fordított nevet adja vissza).
-
Peter Kiss
őstag
válasz
trisztan94 #4463 üzenetére
@Html.DropDownListFor(m => m.Sex, ViewBag.Sex as IEnumerable<SelectListItem>)
De:
ViewBag/ViewData alkalmazása nem nyerő, igazi kiskapunak mondanám tisztességes megoldás helyett.
Enum helyett használj type code class-t, mert gyorsabb, biztonságsabb, könnyen többnyelvűsíthető, nem csak egy név-érték akármicsda, mást is be lehet pattintani az egyes típusokhoz. -
Peter Kiss
őstag
válasz
trisztan94 #4451 üzenetére
Microsoft .NET Framework 4.5 Language Pack - ha 4.5-öt használsz, van a többihez is egyébként.
-
Peter Kiss
őstag
válasz
trisztan94 #4449 üzenetére
A validator attributumoknak meg tudsz adni üzenetet vagy resource fájlt és abban egy resource-t. Az alap validációs üzeneteket lehet magyarítani azzal, ha felrakod a .NET nyelvi csomagját.
-
Peter Kiss
őstag
válasz
trisztan94 #4447 üzenetére
Az első találat a Google-lel máris jó. Mindegy, mert szerintem neked DropDownListFor() kellene inkább (mindkettőnél kizárólag egyet lehet választani, így a listbox szóba sem jöhet gyakorlatilag).
ListBoxFor()-t nagyon könnyű egyébként is használni: első paraméter egy IEnumerable, amiben a kiválasztott elemek vannak, második paraméter a lehetséges elemeket tartalmazza (IEnumerable<SelectListItem>).class ViewModel : UserReg
{
public SelectList Sexs { get; set; }
public SelectList Years { get; set; }
/* ... */
}
@model ViewModel
@Html.DropDownList(model => model.Sex, Model.Sexs)
@Html.DropDownList(model => model.BornYear, Model.Years)A SelectList-eket a controller-edben töltöd fel, évek előállításához használd az Enumerable.Range() metódusát, illetve érdemes írni egy extension method-ot az IEnumerable<T>-re, ami SelectList-et állít elő.
-
Peter Kiss
őstag
válasz
trisztan94 #4442 üzenetére
Úristen. Lekéred az összes felhasználód (legyen 5 millió), miközben csak egy kellene.
Controller:
public ActionResult Profil()
{
return View(db.Users.First(x => x.Name == WebSecurity.CurrentUserName));
}View:
@model project.Models.User
@Model.LastName @Model.FirstNameA többit képzeld el.
Gyorsan, olcsón, jól dolgozunk. Ezek közül kettőt választhat.
-
Peter Kiss
őstag
válasz
trisztan94 #4420 üzenetére
Mit nem lehet ezen érteni? Ha a routing-ból kihagyod az action-t, akkor hogyan tudna a rendszer ráhúzni egy action link-et?
Helyedben kettővel visszább lépnék a fejlesztésben, hiszen a problémát egy nagyon egyszerű módszerrel lehet megoldani, olvasásnak hívják.
-
Peter Kiss
őstag
Szerintem sem lesz SDK hozzá, ha tippelnem kellene, akkor Windows Biometric Framework API felé kellene fordulni, mint ahogyan pl. smart card esetén is (ott a winscard.dll a kulcs).
-
Peter Kiss
őstag
válasz
Peter Kiss #4385 üzenetére
Ahogy elnézem, írtál saját LinkedList implementációt, miért nem használod a gyárit? Arra csak egy extension kellene, ami megkeresi, melyik node után/előtt kell lennie az adott elemnek, aztán csak használni az AddAfter és hasonló metódusokat.
-
Peter Kiss
őstag
válasz
tPedro_ #4383 üzenetére
Kötelező a LinkedList? SortedList talán értelmesebb lenne.
publicclass Node : IComparable<Node>
{
public int Data1 { get; set; }
public int Data2 { get; set; }
public int CompareTo(Node other)
{
if (other == null)
{
return 1;
}
var d1 = Data1.CompareTo(other.Data1);
return d1 == 0 ? Data2.CompareTo(other.Data2) : d1;
}
}CompareTo segítségével már meg tudod kapni, melyik irányba kell beszúrni az elemet.
-
Peter Kiss
őstag
válasz
Peter Kiss #4370 üzenetére
Az Order egy plusz interface-t is implementált, ami egy property-t tartalmazott, fölé kellett egy [NotMapped].
-
Peter Kiss
őstag
Entity Framework Code First miért adja a hülyét? Order - OrderDetails felállást kell elképzelni alapból, adatbázisból egy lekérdezés alapján lekérdezne plusz két oszlopot OrderDetail-ek query-zésénél: Order_ID, Order_ID1
modelBuilder.Entity<Order >()
.HasMany(x => x.OrderDetails)
.WithRequired(x => x.Order )
.HasForeignKey(x => x.OrderID);Ha felhasználom a fenti kódban történő összekapcsolást, akkor csak egy plusz oszlop születik, de miért?
Az Order-hez még kapcsolódik egy tábla (1 . ...), az OrderDetails-hez még kettő (1 - ...).
-
Peter Kiss
őstag
-
Peter Kiss
őstag
válasz
Peter Kiss #4264 üzenetére
Most nézem csak a linkelt 7z fájlt, először egy Book osztályt kellene létrehoznod, majd abban kezelni a könyvek összes adatát, nem különálló tömbökkel szórakozni.
-
Peter Kiss
őstag
válasz
trisztan94 #4260 üzenetére
Milyen ciklusok?
private void b_osszertek_Click(object sender, EventArgs e)
{
var ossz = 0;
for (var i = 0; i < 32; i++)
{
ossz = ossz + (ar[i] * raktaron[i]);
}
l_megjelenites.Text = "A raktárkészlet összértéke: " + ossz.ToString() + " Ft";
}
private void b_kifogyott_Click(object sender, EventArgs e)
{
var kifogyott = raktaron.Any(x => x == 0);
//nem használod semmire
}
private void b_adottAr_Click(object sender, EventArgs e)
{
var adottAr = Convert.ToInt32(tb_adottAr.Text);
var szamlalo = ar.Count(x => x < adottAr);
l_megjelenites.Text = szamlalo + "-féle könyv kapható " + adottAr + "Ft alatt.";
}Az elsővel nem lehet mit kezdeni, mert rosszul van valami tervezve (a két különálló tömb nem világos nekem).
-
Peter Kiss
őstag
-
Peter Kiss
őstag
válasz
leximester #4232 üzenetére
Persze, mert az alkalmazáslogikád teljes mértékben a GUI szálon fut. Indítani kell egy háttérszálat (Task library, BackgroundWorker) valamilyen módon, amit pl. le tudsz állítani a GUI szálról, amikor változik valami.
-
Peter Kiss
őstag
Másik lehetőség:
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
internal class Model
{
public int A { get; set; }
public int B { get; set; }
public int C { get; set; }
}
class Program
{
static void Main(string[] args)
{
var sorted = new SortedList<int, Model>
{
{1, new Model {A = 1, B = 5, C = 7}},
{3, new Model {A = 3, B = 7, C = 9}},
{2, new Model {A = 2, B = 5, C = 4}},
{5, new Model {A = 5, B = 3, C = 1}}
};
foreach (var item in sorted.Values)
{
Console.WriteLine("{0} {1} {2}", item.A, item.B, item.C);
}
Console.ReadLine();
}
}
}Ha nem simétlődik az A adat:
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
internal class Model
{
public int A { get; set; }
public int B { get; set; }
public int C { get; set; }
}
class ModelComparer : IComparer<Model>
{
public int Compare(Model x, Model y)
{
if (x.A > y.A)
{
return 1;
}
return x.A == y.A ? 0 : -1;
}
}
class Program
{
static void Main(string[] args)
{
var sortedSet = new SortedSet<Model>(new ModelComparer())
{
new Model {A = 1, B = 5, C = 7},
new Model {A = 1, B = 5, C = 7},
new Model {A = 3, B = 7, C = 9},
new Model {A = 2, B = 5, C = 4},
new Model {A = 5, B = 3, C = 1}
};
foreach (var item in sortedSet)
{
Console.WriteLine("{0} {1} {2}", item.A, item.B, item.C);
}
Console.ReadLine();
}
}
} -
Peter Kiss
őstag
válasz
Neil Watts #4026 üzenetére
Miért olvasnád be külön-külön az adatokat, mikor egy sor egy valamit jelent? (Ugyanez vonatkozik a Tuple alkalmazására: átmeneti tároló olyan alkalmazásban, ahol van már model azokra az adatokra, akkor WTF?)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace ConsoleApplication1
{
internal class Model
{
public int A { get; set; }
public int B { get; set; }
public int C { get; set; }
}
class Program
{
static void Main(string[] args)
{
var list = new List<Model>();
using (var sr = new StreamReader("tavok.txt"))
{
while (!sr.EndOfStream)
{
var line = sr.ReadLine();
if (string.IsNullOrWhiteSpace(line))
{
throw new Exception("Empty line");
}
var parts = line.Split(' ');
list.Add(new Model
{
A = int.Parse(parts[0]),
B = int.Parse(parts[1]),
C = int.Parse(parts[2])
});
}
}
list = list.OrderBy(x => x.A).ToList();
}
}
} -
Peter Kiss
őstag
Van egy zsák eseménye, valamelyik lekezelése segíthet, pl. a ValueChanged.
-
Peter Kiss
őstag
válasz
goodluckbenc #3969 üzenetére
Nem.
-
Peter Kiss
őstag
double keres = 22;
Termek talalat = (from x in Termekek where x.Ertek == keres select x).First();
if (talalat == null)
{
Console.WriteLine("Nincs találat");
}
else {
Console.WriteLine("Találat {0} {1} ", talalat.Nev,talalat.Suly);
}Ha nincs találat, akkor nem null lesz az eredmény, hanem egy szép exception, ezért:
var talalat = Termekek.FirstOrDefault(x => x.Ertek == keres);
-
Peter Kiss
őstag
válasz
Neil Watts #3954 üzenetére
Ilyet hol a viharba' csinálnak?
StreamReader sr = new StreamReader(@"termek.txt");
Itt marad az idők végezetéig, vagy mi?
Plusz a rendezésekhez, keresésekhez miért nem lehet használni az IEnumerable<T> extension-öket? Még a végén olvasható lesz, mit is akarsz csinálni? Mert a kézi legózás nem lesz gyorsabb ennél ebben a formájában az biztos.
-
Peter Kiss
őstag
válasz
martonx #3861 üzenetére
Hogyne vonatkozna. Ugyanúgy működik minden, mint egy asztali alkalmazás esetében. Amikor beérkezik az első kérés, akkor lefordítja az alkalmazást, majd indulhat a kérés kiszolgálása. Ha a web.config-ban a debug True-ra van állítva, akkor nagyon lassabban fordul le. Kérések között már nincs fordítás (amennyiben már minden lefordult.)
-
Peter Kiss
őstag
Nem fogod megúszni anélkül, hogy hozzányúlnál az alap provider-hez.
(A Reflector-t ajánlanám segítségnek még, a héten is plafonig ért a sz.r, és jó volt, hogy létezett.)
-
Peter Kiss
őstag
Egyrészt a kód durvának tűnik, másik, hogy valószínűleg csak abba futottál bele, hogy nem világosítottak fel a dolgok működéséről (StreamReader/Writer, IDisposable, using), a StreamWriter bufferel, viszont ezzel nem sokat foglalkozol. Ha beépíted egy using-blockba az olvasást, írást, akkor a keretrendszer mindent el fog intézni helyetted. Ha ez így nem kerek, akkor az utolsó Write után hívd meg a StreamWriter object-eden a Dispose()-t (meg az utolsó olvasás után a StreamReader-eden is).
-
Peter Kiss
őstag
válasz
Neil Watts #3598 üzenetére
meresek[i + 2]
Itt indexeled túl (nem tömb, hanem a benne lévő adatok szempontjából), de egyébként ilyesmi lenne:var ujMeres = new List<string> {"ide berakod", "amit akarsz"};
ujMeres.AddRange(meresek.Select(x => x.ToString(CultureInfo.InvariantCulture))); //esetleg kell egy ToList() -
Peter Kiss
őstag
válasz
Neil Watts #3596 üzenetére
Az eltolást hogyan szeretnéd kivitelezni, ahol eddig a 0. volt, ott lesz a 2. és az utolsó előtti lesz a 0.? Meg mintha túlindexelnéd a meresek tömbödet.
A hónapok nevét tudja a .NET is CultureInfo-ból.
Nem lenne jobb tömbök helyett List<T>-t használni?
A felmegnyitásod rossz, közvetlenül az olvasásnál hívd meg pl. using operátorral (vagy manuálisan try-catch-finally).Feleslegesen nem kell növelni a kódodat:
buttonOK.Enabled = textBoxHonapBe.Text == honap[0]; -
Peter Kiss
őstag
válasz
martonx #3541 üzenetére
Szóval csak biztos akartál lenni, esetleg úgyis megcsinálhatod ezt, hogy egy base controller osztályt írsz, aminek felülírod az Initialize metódusát (most látom csak, hogy az MSDN is ezt hozza példának).
-
Peter Kiss
őstag
válasz
Neil Watts #3175 üzenetére
Amikor centire ugyanazt a kódot írjuk le újra meg újra, akkor kérdezzük meg magunkról: nem tudnám ezt úgy megcsinálni, hogy ne sokszorozzam a kódom mennyiségét?
-
Peter Kiss
őstag
Márpedig a Management Studio-ban meg kell találnod. Vagy az oszlopot szerkesztve, vagy design nézetben megnyitva a táblát az oszlopra ráállva ott kell lennie, hogy "identity column" vagy hasonló. 2008-ban ezt a lent megjelenő ablakban tudtad megadni, szerintem most is ott tudod.
-
Peter Kiss
őstag
válasz
martonx #2856 üzenetére
Kapcsolatot nem is kell tudnod törölni, egyik entitást kell törölnöd a másikból, mindent lekezel ez EF.
var artist = new Artist { FirstName = "Alan", LastName = "Jackson" };
var album1 = new Album { AlbumName = "Drive" };
var album2 = new Album { AlbumName = "Live at Texas Stadium" };
artist.Albums.Add(album1);
artist.Albums.Add(album2);
///...
artist.Albums.Remove(album2); -
Peter Kiss
őstag
válasz
Neil Watts #2833 üzenetére
Most páros kell vagy páratlan?
private void buttonOKrb_Click(object sender, EventArgs e)
{
if (radioButtonParatlan.Checked)
{
int q = 0;
for (int i = 0; i < veletlentar.Length; i++)
{
if (veletlentar[i] % 2 == 0) //páratlan vagy páros kell?
{
q++;
}
}
labelParatlParos.Text =q + " db páratlan számot sorsolt ki a program";
}
listBox_eredmenyKi.Items.Clear();
} -
Peter Kiss
őstag
Nálunk most lesz nagy alkalmazástúrás, ami azt jelenti, hogy a kontrollok új verzióra lesznek cserélve, illetve most forgatjuk át a legtöbbet 4.0-ra, nálunk a 4.5 nem fog játszani, mert nincs rá szükség.
Egyébként nem feltétlenül rossz, csak annyi a gond, hogy sok kompatibilitási gond felléphet az újabb de nem verzióváltott DLL-ekkel. Szerintem mondjuk a legtöbb helyen nem lesz gond.
-
Peter Kiss
őstag
válasz
Neil Watts #2744 üzenetére
Nem az értéke lesz egesz_be, hanem a hossza, nagy különbség.
int egesz_be;
if (int.TryParse(textBox1_adatbe.Text, out egesz_be))
{
var r = new Random();
for (int i = 0; i < egesz_be; i++)
{
listBox_adat.Items.Add((char)r.next(65, 90));
}
}
else
{
//hibakezelés :-)
} -
Peter Kiss
őstag
válasz
Neil Watts #2740 üzenetére
Létrehozol egy ÜRES char[]-t.
Amit bejársz a ciklusoddal.
Elemet akarsz kivenni belőle, pedig ÜRES.
Ráadásul kivételnél fix indexet használsz, ami nem más, mint a tömb hossza, ami pontosan eggyel magasabb indexet jelent, mint a tömb utolsó elemének indexe. -
Peter Kiss
őstag
válasz
Neil Watts #2730 üzenetére
Az egesz tömböt csak a hosszának a lekérésére használod, semmi másra, ezért hülyeség létrehozni is.
-
Peter Kiss
őstag
válasz
Jester01 #2726 üzenetére
Ezt a new sorrendet nem lehet megvalósítani.
Csak egy gyenge példa rá:
IEnumerable<int> t = new[] { 12, 34};
Interface-t példányosítanék?IDictionary-t se írnám ki, hótzicher, mert minek. System.Collections.Generic.Dictionary implementálja az IDictionary-t, és még sok minden mást! Ha kiírom az IDictionary-t, akkor a többit (implementált interface-ek) ezzel el is veszítem.
Tahát, egy változtatás miatt lesz mondjuk int-ből double, de van rá overload-olt metódusom (ugyanaz a metódusnév), ami annyit tesz, hogy problem solved.
-
Peter Kiss
őstag
válasz
Jester01 #2724 üzenetére
Pont, hogy nem kavarhat be. Amikor teljesen egyértelmű az, hogy mi lesz a típus (pl. new Akarmi()), akkor miért írnám ki kétszer? Teljesen hülyeség.
Dictionary<NagyonHosszuNevuOsztalyDeKiirom, MegHosszabbNevuDeEztIsKiiromAkkorIs> d = new Dictionary<NagyonHosszuNevuOsztalyDeKiirom, MegHosszabbNevuDeEztIsKiiromAkkorIs>();
-
Peter Kiss
őstag
válasz
Neil Watts #2719 üzenetére
Kicsi észrevétel:
int[] egesz = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
for (int i = 0; i < egesz.Length; i++)
{
listBox_adat.Items.Add(egesz[i]);
}Helyett:
listBox_adat.Items.AddRange(new object[] { 1, 2, 3, 4, 5, 6, 7, 8 });
Stringekkel egyszerűbb:
listBox_adat.Items.AddRange(new [] { "egy", "kettő", "három", "négy", "öt", "hat", "hét", "nyolc" });
);---------------------------
if (textBox1_adatbe.Text != "")
{ /* ... */ }Helyett:
int egesz_be;
if (!string.IsNullOrEmpty(textBox1_adatbe.Text) && int.TryParse(textBox1_adatbe.Text, out egesz_be))
{ /* ... */ }-----------------------
Ez gyakorlatilag nincs használva:
int[] egesz = new int[egesz_be];
----------------------
Használja mindenki a var kulcsszót, ahol csak lehet.
-
Peter Kiss
őstag
válasz
martonx #2686 üzenetére
Designer felületen hozzáadod a tárolt eljárást, és utána használhatod.
1. Open Entity Framework Model page in Visual Studio IDE
2. Right click on blank area and choose “Add” -> “Function Import” option
3. In Add Function Import dialog, select your stored procedure, give function name and choose return type as Entities and select your custom entity from dropdown list.
4. Click on Ok button to add the function in Entity Framework
5. In your page, Create instance of entities class and call your function with proper parameter value
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- DDR5 GAMER PC: Új RYZEN 7 8700F/9700X +RTX 4060/5060/4070/5070 +16-32GB DDR5! GAR/SZÁMLA/50 FÉLE HÁZ
- Dell Latitude 7410 Strapabíró Ütésálló Profi Ultrabook 14" -80% i7-10610U 16/512 FHD
- Szép! HP EliteBook 850 G8 Fémházas Multimédiás Laptop 15,6" -65% i7-1185G7 32/512 Iris Xe FHD Magyar
- HP EliteBook 850 G8 Fémházas Multimédiás Laptop 15,6" -65% i7-1185G7 8/512 Iris Xe FHD Magyar
- 512 Gb-os NVME-k
- BESZÁMÍTÁS! Gigabyte B550M R7 5700X 32GB DDR4 512GB SSD RX 7700 XT 12GB DeepCool CC560 Seasonic 650W
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7800X3D 32/64GB RAM RTX 5070Ti 16GB GAMER PC termékbeszámítással
- AKCIÓ! Microsoft XBOX Series S 512GB játékkonzol garanciával hibátlan működéssel
- REFURBISHED - HP USB-C Dock G4 docking station (L13899-001)
- Asus Rog Strix G16
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest