- Multifunkciós adattároló érkezett a Patriot színeiben
- Egyedi megjelenésű Radeon VGA a Yeston és a GravaStar keze nyomán
- 5:4 képarányú SXGA monitor jön ősszel az EIZO berkeiből
- Úgy tér vissza a Commodore 64, ahogy titkon mindenki várja
- A hírek szerint a jövő év végére érkezhet a sokat pletykált NVIDIA N1X SoC
- DUNE médialejátszók topicja
- Milyen TV-t vegyek?
- VR topik
- Milyen billentyűzetet vegyek?
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Mini-ITX
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Házi barkács, gányolás, tákolás, megdöbbentő gépek!
- Egy gyártási hiba miatt nem bootolhatnak bizonyos Minisforum PC-k
- Úgy tér vissza a Commodore 64, ahogy titkon mindenki várja
Új hozzászólás Aktív témák
-
ReSeTer
senior tag
Excel táblázatban vannak adatok, abból másolással be kellene illeszteni a word sablonban lévő táblázatba, de különböző helyekre, tehát nem mindegyik cella ugyanott van mint az excelben.
Ennyi. A word sablon az nem fog változni, meg az egy hálózati meghajtón lenne.
Most ez VBA-ban úgy van megoldva, hogy excelből fut a kód, megnyit egy word-ot a template-vel ami a hálózati meghajtón van, és bemásolja a dolgokat a wordbe. Manuálisan elmenti az user ahova akarja a word-ot.C#-ban kellene megoldani, mert másik programba akarom integrálni ami ugyanúgy C#.
-
-
joysefke
veterán
válasz
ReSeTer #9695 üzenetére
A kód esetleg futhatna központi helyen, egy belső webszerveren, intranet oldalon?
-(1) felhasználó az oldalra navigál,
-(2) letölti az általad publikált "mester" excel templatet -ezáltal rá tudod kényszeríteni mindig a legfrissebb sablon használatára-. Mert nyilván a sablon is változni fog.
-(3) kitölti, feltölti egy formmal
-(4) szerver oldali kód az excel alapján valami wordot generál, azt letölti a felhasználóHa nem tartod kézben a környezetet és hogy mindig mindenki legfrissebb sablont használja, akkor az nagy kényelmetlenség lehet.
(ilyet officeos dolgot még nem csináltam lehet elkerülte valami a figyelmemet) -
fatal`
titán
-
ReSeTer
senior tag
Lehet kicsit félreérthető amit írtam, office van feltelepítve a felhasználóknál, csak azt nem tudni, hogy mikoriak. Valószínűleg 2007-nél nem régebbi verziók.
Annyit szeretnék elkerülni, hogy ne kelljen nekik ennél többet telepíteni, mert ez már fent van nekik. Ha jól tudom, belehet jelölni valami fejlesztési eszközöket is, meg hasonló dolgokat telepítésnél, na ezt nem akarom.
Csak sima office telepítés. Ez van nekik.@martonx
Maradok az Office-nál, nem akarom túlbonyolítani.Akkor interop?
-
martonx
veterán
válasz
ReSeTer #9692 üzenetére
Az excelből adat kinyerés C#-al eléggé tiszta ügy, van ehhez csomó nuget package. Ami itt izgi tud lenni, az a word sablon file-ba berakás, formázás.
De szerintem ehhez is vannak nuget package-ek, amikkel word file-t tudsz generálni. Legvégső esetben pedig OpenXml egy szabvány, semmi nem gátol meg abban, hogy bármit összerakj OpenXml-ben (kivéve, hogy k...va bonyolult). Ekkor egyedül arra kell odafigyelned, hogy amit csinálsz az valami régi Office verzióval legyen kompatibilis pl. Office 2007-tel, mert az új Office-ok mind fogják tudni kezelni a régi file-t, de ha új verzióra lősz, akkor azt nem fogják tudni kezelni a régi Office-ok.
-
ReSeTer
senior tag
Szeretnék Excel-t és Word-ot vezérelni C# nyelvvel. Az lenne a kérdésem, meglehet azt oldani, hogy akik majd használják a programot, ne kelljen semmi referenciát beállítaniuk, meg telepíteni fejlesztési eszközöket, hasonló dolgokat az office-hoz, hogy működjön? Nem tudom, hogy kinek mi van feltelepítve, és VBA-val már belefutottam referenciás problémába.
Azt akarom, hogy ne függjön a programom a felhasználónál feltelepített office verziótól.
Annyit tudok, hogy .docx-et már tudnak kezelni, tehát ha jól emlékszem az 2013-tól van?Erre alkalmas lenne a Microsoft.Office.Interop kód?
Bocs, kezdő vagyok még, nem is akarok nagyon belefolyni, egyszerű vezérlésről lenne szó, excelből kiszedni adatot, bemásolni egy word sablon fájlba, formázás. -
ReSeTer
senior tag
Kezdem érteni mire gondoltok.
Ha jól értelmezem, igazából magamtól is védeni kell ezeket, mert nem biztos, hogy már emlékszem, hogy hogyan működik az adott class, és mivel csak a public method-okat meg változókat használhatom, ezért nagy bajt nem tudok csinálni velük, ha azokat használom.
Jól értelmezem? -
cattus
addikt
válasz
ReSeTer #9686 üzenetére
Az előttem hozzászólót kiegészítve, nem feltétlen érdemes elrejteni egy komponens belső állapotát, mert "titok", hanem pl. mert az állapot változtatását szeretnéd bizonyos feltételhez kötni (pl. egy belső számérték nem mehet bizonyos szint alá, mert annak az adott kontextusban nincs értelme). Ha ezt nem tennéd meg, a programod bármely pontján keletkezhet bug, amit utólag nehéz kijavítani. Persze lehet mondani, hogy "majd figyelek rá hogy ne történjen ilyen", de ez finoman szólva nem életbiztosítás.
-
joysefke
veterán
válasz
ReSeTer #9686 üzenetére
A végfelhasználónak meg egyéb személyeknek semmi köze a koncepcióhoz.
Néhány ezer sor fölött már fontos tényező, hogy a bonyolúltságot elrejtsd / leválaszd egy megfelelő osztályba/komponensbe és annak felhasználási pontján már csak néhány egyszerűen használható tiszta interfészt látszódjon.
Ez akkor is igaz, ha te írod az egész szoftvert.
Különben hamar spagettivé válik az egész. Ha többen fejlesztik a kódot, akkor ez fokozottan érvényes. Ha fel kell használnod egy létező , működő komponenst, akkor jó esetben elég megnézned a publikus interfészeit és jó eséllyel rájössz hogyan kell használni, felhívni.
Ha minden publikus lenne, akkor az egész kódot át kéne nézni ahhoz hogy használni tudd. -
ReSeTer
senior tag
válasz
joysefke #9685 üzenetére
Köszönöm a próbálkozást, de én ezt az egészet nem tudom valós példához kötni. Ha én írok egy programot, nem tök mindegy, hogy a saját programom egy része hozzáfér-e a másik részéhez? Úgyis én írom az egészet, akkor olyanra írom, hogy csak azt módosítsa amit kell. A végfelhasználó meg nem kap felületet hozzá.
Értem, hogy forráskódon belül nem lehet hozzáférni meg minden, csak semmi értelmét nem látom. Mért ne lehetne public minden? Forráskódhoz én férek hozzá.
Valami itt elkerülte a figyelmem.
-
joysefke
veterán
válasz
ReSeTer #9681 üzenetére
"aki hozzá akar férni" Ennek a korrekt megnevezése az "Client" vagy "Client code" és semmi köze sincsen a végfelhasználóhoz vagy bármilyen személyhez. Magyarul azt jelenti, hogy a hívó fél, a hívó oldal.
Ha deklarálsz egy interfészt vagy egy( publikus osztályon egy) publikus metódust, konstruktort akkor az kívülről látható lesz, tehát lesz olyan kód, ami látja a publikus metódust és fel akarja hívni. Ebben a relációban a publikus metódust hívó kód a "Client" és ami belül van (számára láthatatlan) az az implementációs részlet.
Amikor Te felhívod a System.Console.WriteLine(...)-t, akkor abban a relációban a Te kódod (vagyis nem te hanem a Te kódod) a kliens. Belül meg lehet hogy hegyek mozognak, Te pedig csak annyit látsz, hogy megjelenik a szöveg a konzolon, vagy ahová a kimenet mutat.
..Egy user általában felületen keresztül vezérli a programot...
A koncepciónak tökéletesen semmi köze nincsen a végfelhasználóhoz.A hívó kód - hívott kód koncepció minden szinten értelmezhető. Minden egyes fgv-hívásnál van egy hívó fél és van egy hívott fél. (tehát assembly-n belül is értelmezhető)
Röviden az implementiációs részletek elrejtésére szolgál a dolog. A hívó félnek minnél kevesebb dologgal kelljen törödnie ahhoz, hogy igénybe tudja venni egy publikus interfész/metódus által nyújtott "szolgáltatásokat".
A bővebben érdekel, akkor erről könyveket írtak.
Pld ezt tudom ajánlani:
Amazon.com: Adaptive Code: Agile coding with design patterns and SOLID principles (Developer Best Practices) eBook : McLean Hall, Gary, Hall, Gary McLean: Kindle Store -
Livius
őstag
válasz
Alexios #9680 üzenetére
Talán mert nyers byte tömbökből kell pl konverziókat csinálni, különböző regiszterek kiolvasására vagy írására, és jobb ha a kódban tisztán látszik mi milyen méretű, amikor ezek történnek vagy épp fizikai mértékegységekre történik valami konverzió ezekből, pl ADC mérésre.
-
Livius
őstag
válasz
ReSeTer #9681 üzenetére
Szerintem ez arra utal, hogy ha csinál valaki egy C# osztályt, és azt egy DLL-be buildeli majd tovább adja azt akár pénzért, ilyenkor valóban a user egy másik programozónak tekinthető aki azt majd a saját C# programjában felhasználja. A fejlesztő "user"-től van elrejtve az amihez jobb ha nem nyúl hozzá.
-
ReSeTer
senior tag
Helló!
Valaki megtudná mondani, hogy most azért rakjuk private-ra egy class változóit, hogy egy másik programozó ne tudjon hozzáférni?
Ami oktató videót nézek, abban "user"-nek szólítja azt aki majd hozzáakar férni, de ez nekem nem egyértelmű, hogy mi értelme van.
Egy user általában felületen keresztül vezérli a programot. Ha nem adunk neki felületet arra, hogy változtassa az adott class egyik változóját közvetlenül, akkor úgyse tudja változtatni, de akkor meg mi értelme az egésznek. Egy user nem fog változtatni rajta, hogy classname.változó = bármi, mert nincs hova beírnia. -
Livius
őstag
Sziasztok!
Ti a Visual Studio C#-os code clean up-ban miket szoktatok beállítani, milyen szabályokat szerettek használni az editor configban? Én most elkezdtem használni a .NET stílusban nevezett típusokat, számomra sokszor több az infó abban hogyInt32
mint hogyint
. Ez mennyire elfogadott kódolási stílus már? Sok GitHub repoban látom, egyáltalán nem használják, pedig nekem tetszik ez a stílus. -
don_peter
senior tag
Kollektív hallgatásból arra következtetek, hogy oldjam meg magam, ahogy tudom.
Köszi a segítséget. -
don_peter
senior tag
válasz
Alexios #9673 üzenetére
Hogy valaki vagy kollektíve kaphatok e segítséget egy programozási vizsga kapcsán. Mivel arra nem tudtam érdemben készülni és nem akarom, hogy emiatt ismétlésre legyek kárhoztatva. Ma este 6 kor lesz. Az mellékes miért nem sikerült rá időt szánnom mert én beszélek és vagy elhiszi valaki vagy nem. Sajnos most csak kapkodok, amit nem szeretek, de nem akarok ezzel további időt elvesztegetni.
rosejbli : Majdnem. De ettől még muszáj kérjek segítséget. Ez van. Szégyen ide vagy oda. Túl vállaltam magam. És nem online vizsgáról van szó, de online kell feltölteni az időt intervallumban. (a vizsga program végére be fogom írni, hogy nem önálló megoldás, ha ez számít.)
-
don_peter
senior tag
Srácok, segítséget szeretnék kérni egy jártasabb XAML-es kollégától. Sajnos nincs idő már megtanulni és ma lesz vizsgám belőle, sajnos elmélet és gyakorlat egyszerre. Sajnos nem tudom segítség nélkül abszolválni. Ha kollektíve is lehetőség van a segítség kérésre, akkor a közösbe be dobom a feladat kiírást, ha nem akkor privátban kérnék segítséget. Nem nagy programról lenne szó, de túl vállaltam magam és egyedül ez most nem fog menni. Lehet ezt megvetni vagy elítélni, tök megértem ezt is, de még is inkább segítséget kérek, mint ismételnem kelljen. Előre is köszi mindenkinek.
Az előző feladat egy egyszerű számológép elkészítése volt, amelyet felületileg és néhány funkcióját tekintve vért izzadva időn túl megoldottam, de összességében eredménytelen pontot értem el mivel nem tudtam időben befejezni illetve elvégezni a feladatot. Kérem a segítségeteket.
-
bandi0000
nagyúr
válasz
martonx #9670 üzenetére
Hàt kvàzi ez egy 4-5 éves projekt, én csak belekontárkodok néha, igazàból az lenne a terv, hogy egy új igény esetén már csinàlnànk egy új service-t csakhàt mint minden cêgnél itt is az van ha a rêgibe mrgcsináljuk x óra, újat csinálunk akkor x+y óra ami mindenképp több :D
Akkor viszont megvan, ami deadlockot dob, az egy error log beküldés, úgy van megírva, hogy ha hiba keletkezik kliens oldalon, akkor küldi be, na mármost àltalában ha hiba van, akkor N ügyfélnél is van, szóval mimd bombàzza ezt az endpointot :D Amúgy is a kliens oldalt refactorálom, szóval ezt is átvarriálom akkor
Más csak elméleti síkon érdekel, nem nagyon találtam rá megoldást, meg nem is annyira kell, csak szebb lenne
Nàlunk elég szar az adatbázis struktúrája, és kvàzi úgy néz ki, hogy van hogy cégenként kicsit eltérnek a táblák, ami egy EF esetében gàz, mert lekérdezésnél rögtön kiakad, ha nincs olyan mező, erre van megoldás, vagy inkább szar az egész dolog amiatt mert ugyanazon adatbázisban eltérhetnek a táblák cégenként
-
martonx
veterán
válasz
bandi0000 #9669 üzenetére
"Mi okozhat olyat, hogy egy sima tàblàba való beszúrásnál dead lockot kapok, elvileg más nem használja ezt a táblàt"
Itt jön be az elmélet és a gyakorlat különbsége
Viszont, ha már dead lockot kapsz, akkor az azt is jelentheti, hogy gyakorlatilag folyamatosan írva van a tábla, lehet hogy több szálon futva.
Én a helyedben erősen újra gondolnám a DB sémát, EF használatát (lehet bulk insert jobb lenne?), cachelési stratégiát, ilyesmiket. Illetve erősen javaslom (ha lehetséges) .Net 6 irányába tovább mozdulni az ősi .Net Framework helyett. Hidd el, az elmúlt 5 évben elég sok mindenen optimalizáltak. -
bandi0000
nagyúr
Hátha tud valaki segíteni .net framework +entity framework +sql server
Mi okozhat olyat, hogy egy sima tàblàba való beszúrásnál dead lockot kapok, elvileg más nem használja ezt a táblàt
Továbbà szintén egy másik tàblàból egy tárolt eljárás kérdezne le, és sokat vár mert a táblàt nem éri el, kollêga arra gyanakszik, hogy az ên web servicem fogja, de nincs tranzakció se, csak szintén pàr insert, azt mondja row lockot? rakjak, de erre úgy tudom csak akkor van lehetőség ha transakciót és isolation szintet àllítok, de ha csak ezért rakom tranzakcióba, akkor nem rosszabb ez? Vagy ez segíthet?
-
coco2
őstag
Sziasztok!
C# classokat keresek autoit-szerű feladatokra:
-process id ablakainak lekérdezése
-ablak id előtérbe hozása
-billentyű leütés küldése az előtérben lévő ablaknak
-egér klikk küldése az előtérben lévő ablaknakWinapi hívásokat találtam ezekre, és ha más nincs, nekiesek dllimportokat írni rá (példákkal tele a web), de kényelmesebb lenne dotnet komponenseket használni rájuk, ha léteznek.
Köszönöm.
-
sztanozs
veterán
Igazából mehet a maradék is a try-ba, hiszen csak olyan dolog van benne, ami a try-ban csak akkor hajtódik végre, ha nem volt hiba.
Arra kell figyelni, hogy ilyenkor más hiba is elkapható (pl DataVisualization függvényben történő bármilyen hiba - ha az ott nincs elkapva és feldolgozva). -
cigam
titán
válasz
sztanozs #9663 üzenetére
Köszönöm! Ezt megtaláltam, csak nem volt világos, hogy az Excpetion1 e pontosan mi, de már nyomon vagyok:
// Ha nem sikerül letölteni, nem is próbálja meg feldolgozni
try {
webClient.DownloadFile("https://onedrive.live.com/download?...", @fileName);
}
catch (System.Net.WebException ex) {
error = true;
Console.WriteLine("Hiba történt: {0}", ex.Message);
label_tableDate.Content = "Hiba történt!";
}
if (!error) {
tableName = "Időjárás";
label_lastRead.Content = "Az utolsó beolvasás ideje: " + DateTime.Now.ToString("HH:mm:ss");
GetCellValues(fileName, tableName);
// Az adatok kiírása
DataVisualisation();
}
Itt a finaly az if ág? Vagy?
-
sztanozs
veterán
Típus érték;
try {
érték = ami_hibát_dobhat()
}
catch (Exception_1 e)
{
// bármi amit a hiba esetén csináli akarsz
// pl logolni, vagy hibaüzenet kiírni vagy logolni
// az érték változó/objektum itt null lesz}
catch (Exception_2 e)
{
// bármi amit a hiba esetén csináli akarsz
// pl logolni, vagy hibaüzenet kiírni vagy logolni
// az érték változó/objektum itt null lesz
}
finally
{
// amit mindettől függetlenül szeretnél csinálni
// de a figyelt kódhoz tartozik
// pl kiiratás vagy logolás, de akár az érték/objektum elengedése is, ha nem null
} -
cigam
titán
Készítettem egy kis programot, ami a felhőből letölt egy táblázatot, és onnan kinyeri bizonyos cellák tartalmát, és ezt egy adott formátumú szöveges fájlba lementi. Kb működget is, de valami félrement a kódfaragás közben. Az utolsó fejlesztés az volt, hogy ha még nincs megfelelően kitöltve a táblázat, 10 perces később megint megpróbálja. Viszont van amikor bezáródik, és nem marad nyoma. Hogyan lehetne kideríteni mi az oka?
A forráskódot kitettem ide.
És csak finoman, nem vagyok programozó, hobbi projekt -
rgeorge
addikt
Üdvözlet!
Van egy táblatípusom MSSQL-ben (SQL 2017), amit egy tárolt eljárás használ bemenő paraméterként. A tábla rém egyszerű, egy db. long oszlopa van. C#-ból hívom a tárolt eljárást, paraméterezve, a paraméter típus SqlDbType.Structured, az érték egy megfelelő DataTable. A tárolt eljárásban egy select a kapott táblára duplikált sorokat listáz, count(*) viszont pontosan számolja a sorokat. Átmásolva egy belső táblaváltozóba is duplikáltak lesznek a sorok, de a másoláskor a @@rowcount a pontos sorszámot mutatja. Ha cursor-ral járom be a paramétertáblát, akkor nincs duplikáció. Az átadott DataTable helyes, abban nincsenek dupla sorok.
Ami teljesen érthetetlen: select distinct-el is duplikált sorokat listáz!
SQL-ból hívva a tárolt eljárást minden stimmel, nincs duplikált sor sehol sem.
Ha nem DataTable-t adok át, hanem List<SqlDataRecord>-ot, ugyanez a hiba.
Nem találok erre vonatkozó ismert hibát, mi lehet ez? -
t256
őstag
Sziasztok,
Itt mi lenne a helyes syntax?string sqlKeres = "SELECT * FROM Tetelek WHERE" + keresoComboBox.SelectedIndex +" LIKE '%" + keresoTextBox.Text + "%' ";
Adatbázisban szeretnék keresni. A LIKE utáni rész jó, az előtte lévő sajnos nem. A lényeg, hogy egy Combobox-ban kell kiválasztani, hogy az adatbázis melyik oszlopában szeretnék keresni.
A combobox items részébe vannak beleírva az oszlop nevek. Ez lehet probléma? Valahogy át kéne adni neki? -
joysefke
veterán
json-ba szerializálod az adatokat majd azt kiírod. Ha nincs sok adat, akkor szerializálod az egész listát és kiírod. Ha sok az adat akkor steamelni illene (meg nem txt fájlokat használni)
Serialize an Object (newtonsoft.com)Új projektnél az újabb (egyelőre kicsit butácskább) System.Text.Json -t használnám a fenti helyett, de a fenti is tökéletesen jó lesz.
-
t256
őstag
Sziasztok,
Egy lista adataid szeretném fájlba menteni. A listában objektmok vannak.
"private List<Objektum> objLista;"Hogyan álljak neki?
public void objektumokMentese(){
string[] objadatok = objLista;
string file = @"c:\temp\objektumok.csv";File.WriteAllLines(file, objAdatok);
}Ez így sajnos nem jó. A listát kéne beolvasnom egy stringbe vagy van olyan módszer, ami rögtön csv fájlba írja?
-
coco2
őstag
Sziasztok!
Példát keresnék az System.Configuration.Install használatára, hogy pontosan milyen project-be is kellene beleillesztenem és hogyan. Például van a VS-hez Installer extension, de ami template-et az létrehoz, nem találtam kód beillesztési lehetőséget.
Valami normális blognak / leírásnak örülnék, vagy felvilágosításnak, hogy mit mennyire néztem el?
Köszönöm
-
t256
őstag
Sziasztok,
C#-ban próbálok elérni helyi (LocalDB) adatbázist. Grafikus felületen bekérem az adatokat a usertől. Ezt eltárolom egy Objektum listában. Fuvar adatok vannak benne. For each függvénnyel végigmegyek a listán. Az adattagokat belerakom 1-1 változóba, majd ezeket rakom egy stringbe, ami egy SQL parancsot tartalmaz.
Így:sqlInsertQuery += $"INSERT INTO [dbo].[Fuvarok] ([FeladoUgyfel], [CelCime], [FeladasCime], [FeladasDatuma], [CsomagAdatai], [Prioritas] [KivantErkezesiDatum]) VALUES ({felado}, {celCime}, {feladasCime}, {feladasDatuma}, {csomagAdatai}, {prio}, {kivErkDat})";
Utána létrehozom az adatbázis kapcsolatot, hogy hozzá tudjam adni az adatokat:
string connStr = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\user\Documents\ModulZaroAB.mdf;Integrated Security=True;Connect Timeout=30";
SqlConnection sqlConn = new SqlConnection(connStr);
sqlConn.Open();
SqlCommand sqlCom = new SqlCommand(sqlInsertQuery, sqlConn);
sqlCom.ExecuteNonQuery();
sqlConn.Close();
Amikor el jut a fordító az sqlCom.ExecuteNonQuery(); sorhoz, akkor a következő hibaüzenetet kapom:
System.Data.SqlClient.SqlException: 'Incorrect syntax near 'Kis'.
Incorrect syntax near 'Béla'.
Incorrect syntax near 'Judit'.'Tehát az első oszlop elemeire hivatkozik, ami a [FeladoUgyfel] {felado} páros.
Az adatbázisban a [FeladoUgyfel] NVARCHAR (50) NOT NULL,
A felado pedig egy string.Itt van a for each függvény is, hátha:
foreach (Fuvar fuvar in fuvarlista.getList())
{
string felado = fuvar.FeladoUgyfel;
string celCime = fuvar.CelCime;
string feladasCime = fuvar.FeladasCime;
string feladasDatuma = fuvar.FeladasDatuma;
string csomagAdatai = fuvar.CsomagAdatai;
bool prio = fuvar.Prioritas;
string kivErkDat = fuvar.KivantErkezesiDatum;
}
Sejtem, hogy valami szembetűnő hibát csináltam csak én nem látom.
A segítséget előre is köszönöm!
-
Livius
őstag
Egy sima Windows WPF .NET Framework-ös GUI-ban lenne használva a C# class library, amit ha lehet .NET 5.0 projektben csinálnék a solution-on belül, és a startup project pedig a Framework-ös lenne. Akkor a .NET Framework project már nem tudja majd referenciaként bevenni a .NET 5.0-ás Class libet majd?
-
fatal`
titán
"Nemsokára lehet egy új WPF GUI nélküli kis DLL library-be kell kezdnem a full nulláról, és azt kérdezném, hogy ha ez .NET 5.0 Class lib-be kezdem el csinálni, akkor az még a .NET Frameworkös projektekben használható C# lib lesz?"
Nem. A .NET Standard 2.1 már nem kompatibilis a Frameworkkel, 2.0 még igen.Itt egy táblázat. A .NET Standard 2.0 class lib használható Framework és .NET Core illetve .NET 5 alatt is.
-
Livius
őstag
Sziasztok!
Nem rég volt néhány szó itt a .NET jövőjéről, és akkor világosodtam meg, hogy a .NET Framework-nek a 4.8-nál vége lett és mostantól a .NET Core-ból fejlődött .NET 5.0 az, ami a legújabb és csak azt fogják tovább fejleszteni az MS-nél.
Nemsokára lehet egy új WPF GUI nélküli kis DLL library-be kell kezdnem a full nulláról, és azt kérdezném, hogy ha ez .NET 5.0 Class lib-be kezdem el csinálni, akkor az még a .NET Frameworkös projektekben használható C# lib lesz? Milyen az átjárás és kompatibilitás ilyen téren a régi .NET framework és a .NET 5.0 között? A terv az, hogy egy meglévő .NET Framework 4.8-as WPF GUI app használna majd a későbbiekben .NET 5.0 vagy ha nemsokára lesz 6.0 Class library-ket.
-
dqdb
nagyúr
Kiolvasod az első két byte-ot a streamről. Ha az
1f 8b
, akkor gzip lesz a formátum.Mivel azt a két byte-ot egyszerűen nem tudod visszatenni a stream elejére, ezért ha memóriába belefér a tartalom, akkor létrehozol egy
MemoryStream
-et, az elejére beírod a két byte-ot, a végére a stream többi tartalmát, és ezt az objektumot adod tovább aGZipStream
példánynak vagy aStreamReader
-nek.Ha szép megoldást szeretnél vagy a memóriafoglalás is számít, akkor egy olyan
Stream
implementációra lesz szükséged, ami alapvetően proxyként működik a paraméterként kapott streamre, csak éppen visszateszi az elejére azt a két byte-ot.A HTTP header felejtős, az minden esetben gzipet ad vissza.
Bár a fenti taknyolás működik, de ezt igazából a szerveren kellene javítani, hogy helyesen adja vissza aContent-Encoding
mezőt.Küldesz amúgy
Accept-Encoding
-ot a kérésben? Ha nem, akkor ez még nagyobb probléma a szerveren, ha igen, akkor gyorsan szedd ki, és lehet, hogy megúszod a teljes fejlesztést. -
Keem1
veterán
Srácok...Itt kérnék egy kis helpet.
GZipStream responseStream = new GZipStream(wc.OpenRead(page_url), CompressionMode.Decompress);
StreamReader reader = new StreamReader(responseStream.Length > 0 ? responseStream : wc.OpenRead(page_url));
ResponseHtml = reader.ReadToEnd();Adott a fenti kód, célja, hogy a kapott JSON-t gunzippeli-e vagy sem. Sajnos van, ami nem gzippelt. Viszont, mint rájöttem, a GZipStream Length propertyje nincs implementálva, mindig exceptiont dob.
A fenti kód működik gzippel, ha tutira gzipes JSON-t kérdezek le, és szintén működik, ha a JSON uncompressed.
A kettőt kéne összegyúrni úgy, hogy valahogy lekérdezhessem, hogy gzip-e vagy sem.
A HTTP header felejtős, az minden esetben gzipet ad vissza. Magából a streamből kell kitalálnom, hogy melyik.Szerk: annyi még, hogy ha pl. a tutira nem gzipes url-re ráengedem a gzipes megoldást, akkor valahol infinite loopba kerül, sose fut le a kódrészlet.
-
Alexios
veterán
de .NET 5-ön belül mi, WPF, Winforms, más?
Az, hogy webapp vagy sem mondjuk szerintem nem sokat dob azon hogy szép vagy sem, desktopon is meg lehet bármit csinálni
WPF-en belül ha van egy listád amihez tudsz bindolni, akkor a lista elemeire simán tudsz csinálni egy ilyen ListViewItem-et, amiben mondjuk van egy Grid 4 oszloppal, elsőben a kép, a másodikban a név, harmadikban a dátum, negyedikben a gomb, stb. Winformson belül is biztos van valami hasonló
-
Keem1
veterán
válasz
Alexios #9629 üzenetére
Ezt a controlt (ListView) szerintem még nem is használtam, de lecsekkolom
Igazából azért merült fel, mert PHP+HTML+CSS témában eléggé otthon vagyok (nem profi szinten), csináltam már pár hobbi web appot, amire az igénylő konkrétan natív mobilos appot akart eredetileg, és nem hitte el, hogy ami elkészült, az konkrétan egy weboldal, nem egy app. És ugye ez ráadásul ment desktob böngészőben is, nem csak mobilon.
Nyilván ez eddig mind webszerveren, böngészőben.Most a desktop app adott, amúgy .NET 5.0 a FW, a lista, a forrás API kezelése, ez mind kész.
A listát szeretném csinosítani, használhatóbbá tenni, és valahogy elfedni azt a hiányosságot, hogy ez (még) nem web app (később az lesz, talán pár év[tized] múlva).De a ListView-t megnézem, nem sűrűn találkoztam vele, így nem ismerem.
Szerk:
Rákerestem, és találtam ilyesmit.
Kb a bal oldali kép az, amit nagyjából én is össze szeretnék hozni. -
Alexios
veterán
Nem teljesen értem a kérdést
Ha a kérdés az hogy a desktop appon belül valami browser controllal legyen megjelenítve, szerintem ne, bár előnye lehet hogy később újra használhatod.
Nem tudom milyen desktop frameworköt használsz, de igazából bármelyikben ugyanúgy kivitelezhető, nem is különösebben bonyolultan.
WPF-et ismerem én, ott mondjuk egy ListView-t kötsz a listádhoz, és a ListViewItem-nek a datatemplatejében már azt csinálsz elemenként amit szeretnél -
Keem1
veterán
Srácok, egy fancy listát ti hogy jelenítenétek meg?
Adott egy tool, ami egyszer talán valamikor átköltözik intrawebre, de addig is az én kreálmányom van használatban.Van egy mostani lista (szerverek, customerek, adatok, stb), amik irtó rondán, egy multiline textboxban vannak most.
Csinosítanék rajta, ez weben nem lenne kérdés de most desktop app van, ebből kell építkezni.
Lenne kis profilfotó, cím, adatok, stb. Ha nagyon közelíteni kéne, hogy mit szeretnék, akkor kb. a Spotify playlist kinézete. Balról fotó, mellette fent kiemelve megnevezés, alatta kisebbel basic infó, és így tovább.Hogy csinálnátok meg?
- webbrowserben HTML+CSS?
- egy scrollozható panelben child panelek (egy-egy entry) és rajta dinamikusan a fotó, infók (label)?A tartalom mennyisége filterezés kérdése. Van eset, amikor 1-2, de akár több száz is. Mivel a query lapozható, így azért több tízezres listáról nem lenne szó.
-
Keem1
veterán
Srácok, loop helpet szeretnék kérni
Kódrészlet:
int limit = 50;
int offset = 0;
int loopcounter = 0;
List<string> tracks = new List<string>();
do
{
loopcounter++;
tracks.Clear();
tracks = spoti.MyTracks(limit, offset);
textBox1.AppendText(Environment.NewLine + $"OFS: {offset} :: TRK: {tracks.Count} :: CNT: {loopcounter}" + Environment.NewLine + String.Join(Environment.NewLine, tracks));
offset += limit;
}
while (tracks.Count > 0 || loopcounter < 10);Tehát adott a ciklus, aminek le kell állnia, HA elfogyott a track (tehát a tracks list üres) VAGY elértük az engedélyezett max loopot (ez most 10), hogy ne menjen át infinite loopba.
Viszont, a kiírás szerint végigmegy az összes tracken, a loop counter a végére 21. Tehát 10-nél nem áll le. Miért nem? -
cigam
titán
válasz
kicsicsuti #9623 üzenetére
Így senki nem fog segíteni. Írd le konkrét problémád, vagy hogy hol akadtál el.
-
kicsicsuti
csendes tag
Sziasztok! Keresek valakit, aki picit jobban ért a visual studiohoz, és tudna segíteni egy feladat megoldásában. Én még csak ismerkedem a programmal, ha valaki ráérne kicsit írjon már legyen szíves. Köszönöm!
-
Keem1
veterán
válasz
joysefke #9619 üzenetére
Atyaég... Nem csak hogy a kérdés maga, de még annál is van lejjebb.. Ír egy Logout bejegyzést egy kérdésnek, ahelyett, hogy a topikjában kérdezne (oké, értem, ide ne jöjjön floodolni, de általánosságban). Vajon csak tényleg a topiknyitásra vonatkozik, hogy egyedi problémával ne nyisson újat, a Logoutra nem?
Én azért egy Logoutos moderátorral szívesen megnézetném, hogy ennek tényleg a Logouton van-e a helye
-
joysefke
veterán
-
vlevi
nagyúr
"kiderül, hogy nem is olyan kicsi feladat. "
Inkább az, hogy olyan nagyok már ezek a fejlesztőkörnyezetek, annyira összetettek, hogy ismerni kell a keretrendszert. Legalább azt a részét, amit használni akarsz. Mert pl. hiába dolgozik valaki tizenvalahány éve C#-al, ha nem használt WPF-et, akkor neki is kínai az XAML. Talán annyi előnye van csak veled szemben, hogy jobban rááll a szeme a C# nyelvre, és ezért könnyebben megérti a megoldást."Teljesen jó ez is, "
Csak ne felejtsd el valahol inicializáláskor 1-re állítani aScaleX
-et, mert különben a0= -0
nem sokat csinál -
cigam
titán
Mert aki nem ismeri a sokkal ősibb programnyelveket (sem), annak ez varázslat. Pláne úgy hogy a fejlesztőkörnyezet magától felajánlja az if then else helyett. Anno a TVBasic-en ismerkedtem meg a (hobbi!)programozással, a számítógéppel. A mai eseményvezérelt objektum orientált nyelvekkel már nem vagyok barátságban. Rutinom sincs, mert kb 5-10 évente szál meg az ihlet, hogy 1-2 apró feladatot megoldjak magamnak. Aztán mint a példa mutatja, kiderül, hogy nem is olyan kicsi feladat.
sztanozs
Teljesen jó ez is, csak nem jutott eszembe.
-
cigam
titán
Ez történik, ha csak bemásolod, de lövésed nincs róla. Egyszerűen csak működik. Még1x nagyon köszönöm a segítséget!
Az if then else szerkezetemet leegyszerűsítette: ScaleX = ScaleX == 1 ? -1 : 1;
Nem is tudtam hogy az értékadás ilyen egyszerűen bonyolult is lehet. Minden nap tanulok valami újat. -
Alexios
veterán
ItemsSource gyűjteményeknél van, ekkor ennek egyes elemei lesznek a datacontextjei a uielementeknek.
A DataContext leegyszerűsítve annyit jelent, hogy annak az osztálynak a propertyjeihez lehet kötni, ezt meglehet explicit is határozni, de sokszor - pl. az itemssourcenal - is beállítódik, attól hogy nincs konkrétan kiirva
-
cigam
titán
válasz
Alexios #9608 üzenetére
Én elhiszem, hogy ez a sava borsa, de én nem egy gasztronómiai csodát akarok, csak egy zsíros kenyeret. Még arra is rá kellett keresnem mijaza MVVM, nemhogy MVVM pattern.
Előttem
a hétvégea hátralévő évek, hogy megértsem ezt a kódot. Amúgy egész érdekes amit írsz (már amennyit megértettem belőle, és a kódból, bár az tök zavaró hogy mindennek ScaleX neve van, és hiába írtad nem értem mit csinál a DataContext) Szóval jó sok kérdőjel született, de legalább látom merre kéne elindulni.
Köszi!Ezek az absztrakciók tök felesleges bonyolítások. Miért nem lehet azt írni, hogy pl.
MainWindow.ScaleTransform(x,y);
?!
Ez beállítja a ScaleX és ScaleY transzformációt, az x és y értékének megfelelően. -
Alexios
veterán
A scaletransformot be kell állítani valamihez, mert ez valaminek a transzformációja. A sima zárójel amúgy ha használsz mögötte {} zárójeleket is nem feltétlenül muszáj.
Szóval vagy van valamid amit szeretnél méretezni a xaml-ben, ott adsz egy nevet neki x : Name-el, majd a code behindban arra hivatkozol, vagy azt amit méretezni is akarsz code behindban hozod létre, és a végén hozzáadod a mainwindowhoz.Viszont, igazából mindegyik megoldás idegen a WPF-től, még ha működne is. Kezdésnek tudom, hogy viszonylag sok tud lenni, de tényleg érdemes olvasni az MVVM patternről, és data bindingról, mert egyrészt sokkal egyszerűbb dolgod lesz, másrészt erre van kitalálva. A lényege, hogy xaml-ben létrehozod a ui elementedet amit akarsz, majd ezt hozzá kötöd egy propertyhez, ezt általában egy viewmodel osztályban szokták, esetedben ha kezdésként a xaml.cs fájlban van sem gáz. A lényeg, hogy az az osztály, amihez kötni akarod meg kell valósítsa az INotifyPropertyChanged interfészt, ez az egész WPF sava-borsa, majd ha változás van akkor ezzel jelezni.
Valami ilyesminek kéne lennie pl.:
public partial class MainWindow : Window, INotifyPropertyChanged
{
//Inotifypropertychanged interfész megvalósítása
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string name = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
//Property amihez tudsz kötni xaml-ről
private double scaleX;
public double ScaleX
{
get => scaleX;
set
{
scaleX = value;
//Ez az egész lényege, emiatt fog értesülni a UI arról hogy változás történt
OnPropertyChanged();
}
}
public MainWindow(){
InitializeComponent();
//Esetünkben nincs viewmodel, szóval ez az osztály lesz az ahol keresni fogja a propertyket
DataContext = this;//Kezdésnek legyen 1, bárhol változtathatod aztán a kódban, pl. timerrel
ScaleX = 1;
}
}
Aztán xaml-ben így lehet kötni hozzá:
<!--Ui Element amit méretezni akarsz, itt egy grid, de amúgy kb bármi lehet-->
<Grid>
<Grid.RenderTransform>
<!--Kötés a ScaleX propertyhez, amit a code-behindban állítunk-->
<ScaleTransform ScaleX="{Binding ScaleX}"/>
</Grid.RenderTransform>
</Grid>A lényeg, hogy ezután, ha lesz egy timered, akkor csak simán a ScaleX propertyt kell állítanod, és semmi más varázslatra nincs szükség.
-
cigam
titán
válasz
Alexios #9598 üzenetére
Köszi!
Írtam egy stopper/visszaszámláló alkalmazást, ami kb teszi a dolgát, úgy ahogy szeretném. Most megpróbálom továbbfejleszteni, hogy a súgógép-en is a helyes pozícióban jelenjenek meg a számok. Ezért kellene leprogramozni, hogy egy gombnyomásra az eredeti helyett annak tükörképet mutassa.
Ú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!
- ASUS TUF Gaming A620M-Plus + AMD Ryzen 5 8400F + 16GB 5600MHz Kingston Fury Beast + hűtő
- Eladó Erős Gamer PC - Akár Cyberpunk 2077-re Is Készen! (Ryzen 3 2200G RX 570 8GB 32GB RAM AIO
- MacBook Pro 2019 '16 2,6 Ghz 6mag Intel Core i7 16/512gb - Space Gray Touch Bar
- Xiaomi 13T 256GB, Kártyafüggetlen, 1 Év Garanciával
- Honor Magic6 Lite 256GB, Kártyafüggetlen, 1 Év Garanciával
- ÁRGARANCIA! Épített KomPhone i5 12400F 16/32/64GB RAM RTX 5060 8GB GAMER PC termékbeszámítással
- REFURBISHED és ÚJ - HP USB-C Dock G5 docking station (5TW10AA) - 3x4K felbontás, 120Hz képfrissítés
- iKing.Hu - Samsung Z Flip 7 - Újszerű, kipróbált
- Beszámítás! Apple Mac Mini 2024 M4 16GB 256GB SSD számítógép garanciával, hibátlan működéssel
- BenQ PD-2700-U Monitor - Designer 4K 27"
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest