Új hozzászólás Aktív témák
-
Tomi_78
aktív tag
válasz
quailstorm
#10234
üzenetére
Az lett az, igen! A két gomb Location-ét áthelyeztem a panel adatainak megadása utánra, és annak koordinátáihoz igazítottam a teljes képernyő helyett.
Így most már jó lett; köszönöm szépen!
(A fenébe is, hogy a ChatGPT erre nem tért ki, amikor kérdeztem tőle...
) -
quailstorm
félisten
válasz
Tomi_78
#10233
üzenetére
Szerintem a koordinátákkal van gond igen. A példák alapján én úgy látom hogy a gombok Locationje a panelen belül abszolút koordináta, te pedig a teljes ablakhoz képes abszolútként adtad meg, így kívül van a panelen.
Szóval mindig a közvetlen szülő koordinátaterén belül kell gondolkozni. -
Tomi_78
aktív tag
válasz
quailstorm
#10232
üzenetére
Azt nem tudom. A panel rendesen megjelenik, de üresen. Lehet, hogy takarja a gombokat? De hogyan hozhatom előrébb őket?
Vagy a Location-ökkel van a gond, hogy a panelhez viszonyítja az elhelyezésüket? -
Tomi_78
aktív tag
Most még azt szeretném elérni, hogy van egy szép kis panel a képernyőn, azon pedig két gomb, de miért nem látszódik a két gomb ebben a kódban?
public MainForm()
{
Button jatmentgomb=new Button();
jatmentgomb.Width=Width/4;
jatmentgomb.Height=32;
jatmentgomb.Location=new Point(Width/2-(jatmentgomb.Width/2),Height/2-jatmentgomb.Height);
jatmentgomb.Text=jmgombszov[nyelv];
jatmentgomb.Name="jatmentgomb";
jatmentgomb.Click += new EventHandler(jatmentgomb_katt);
jatmentgomb.Visible=false;
jatmentgomb.Enabled=false;
Button jatkmgomb=new Button();
jatkmgomb.Width=Width/4;
jatkmgomb.Height=32;
jatkmgomb.Location=new Point(Width/2-(jatmentgomb.Width/2),Height/2+jatkmgomb.Height);
jatkmgomb.Text=jkmgombszov[nyelv];
jatkmgomb.Name="jatkmgomb";
jatkmgomb.Click += new EventHandler(jatkmgomb_katt);
jatkmgomb.Visible=false;
jatkmgomb.Enabled=false;
hatlap.Location=new Point(Width/2-(jatmentgomb.Width/2),Height/2-jatmentgomb.Height);
hatlap.Size=new Size(Width/4,jatmentgomb.Height*3);
hatlap.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
Controls.Add(hatlap);
hatlap.Controls.Add(jatmentgomb);
hatlap.Controls.Add(jatkmgomb);
hatlap.Visible=false;}Majd a MainFormKeyUp-ban ESC-re:
if (e.KeyCode==Keys.Escape) {
hatlap.Visible=true;
//Button jatmentgomb=(Button)hatlap.Controls["jatmentgomb"];
Control jatmentgomb=hatlap.Controls["jatmentgomb"];
jatmentgomb.Visible=true;
jatmentgomb.Enabled=true;
//Button jatkmgomb=(Button)hatlap.Controls["jatkmgomb"];
Control jatkmgomb=hatlap.Controls["jatkmgomb"];
jatkmgomb.Visible=true;
jatkmgomb.Enabled=true;
} -
quailstorm
félisten
válasz
Tomi_78
#10229
üzenetére
Itt már esélyesebb hogy összehoztál egy not all paths return a value hibát. Gondolom a case-en belül az if-en belül volt a return, de ifen kívül nem volt csak jött a break és a függvény végén sem volt.
Azt az if valamit ki kéne szervezni, ha fix dolog akkor a függvény elejére, ha nem az akkor így hirtelen passz hogy hova, túl pszeudokód ahhoz hogy lássam.
-
Tomi_78
aktív tag
válasz
quailstorm
#10228
üzenetére
Az ELSE nélkül most már jó lett; nem kapok hibaüzenetet és lefut a program.
Volt egy másik gondom is, mégpedig hogy amikor az említett RETURN-os függvényhez hasonló függvényt SWITCH elágazásokba tettem, akkor meg a BREAK utasítások nem tetszettek neki a CASE ágakban. Ezt úgy oldottam meg, hogy nem egyből RETURN-öltem, hanem csak a legvégén, és a visszaadandó értéket egy változóba tettem. Tehát valahogy így:bool fuggvenyem(string feltetel) {bool eredmeny=false;switch (feltetel) {case "egyik": if valami==true eredmeny=true;break;case "masik": if valami==true eredmeny=true;break;}return eredmeny} -
quailstorm
félisten
válasz
Alexios
#10226
üzenetére
Igaz, benéztem bocs. Annál több elágazás kéne (köztes else if) hogy ez előforduljon.
#10227Tomi_78:
Változtattál valamit a fejlesztőkörnyezeten? Vagy mégsem teljesen olyan ez a kód mint az előzőek?Olyasmi kódra mint a mintád, most az RCS1073-at adja vissza a VS2022.
Redundant else keyword hibát nem tudtam előhozni. -
Tomi_78
aktív tag
Köszönöm a válaszokat; akkor simán ELSE nélküli RETURN FALSE kell csak.
(Azt azért furcsállom, hogy eddig nem jelzett rá hibát a fejlesztőeszköz, hanem akkor, amikor egy újabb ilyen felépítésű függvényt írtam bele.) -
Alexios
veterán
válasz
quailstorm
#10224
üzenetére
De amúgy akkor is lenne minden agnak visszatérési értéke, hiszen ha if valami return, else return, tök mindegy mit írna aztán az elsen kívül
-
quailstorm
félisten
válasz
Tomi_78
#10222
üzenetére
Ez nem hiba, csak kódstílus.
Early return esetén a függvény végére rakunk egy mindig konstans return false-t. Az első if után még lehetne kód a végső returnig, ami további feltételkiértékeléseket tartalmazhatna (és további returnokat).
Most nálad az else ág üres, az if után pedig nincs semmi így ugyan felesleges kiírni hogy else, de jelen esetben sem szintaktikai sem szemantikai hibát nem jelent.
Viszont ha bármit írnál az else után, az else alá, akkor az syntax error mert hirtelen nem minden ágnak lenne visszatérési értéke. Ezt megelőzendő (meg az átláthatóság miatt) nem kell az else ilyenkor. -
cattus
addikt
-
Tomi_78
aktív tag
És most ebben a függvényben miért lett hibás az ELSE ág, hogy azt írja ki rá, hogy: "redundant else keyword"?
bool utkozes(... paraméterek ...) {
if (... ütközés igaz ...) {
return true;
} else return false;
} -
quailstorm
félisten
válasz
Tomi_78
#10219
üzenetére
Lehet, de nem érdemes.
Ugyanúgy meg lehet tanulni egy szerializálós libet mint a programozás alapjait.Abban amit csinálsz nagyon sok a munka, nagyon sok a hibalehetőség és nem tesz hozzá a játékhoz semennyit. Csak szaporodnak a kódsorok a semmiért.
Persze mindent fel lehet találni nulláról, de nem célszerű.
#10220martonx: ha jól számolom 5 éve csiszolja, de már akkor nagyon elavult alapokon kezdte.
-
martonx
veterán
válasz
quailstorm
#10218
üzenetére
Bocs, azt hittem valami új projektről van szó.
Ha valaki 30 éve csiszolgatja a régi projektjét és itt tart, hogy most már le is kellene tudnia menteni valami adatot, valahová... -
Tomi_78
aktív tag
Azt lehetőség szerint pont el szerettem volna kerülni, hogy valami külső kiegészítőt kelljen használni, egyrészt mert nem ismerem ezeket és a működésüket, használatukat, valamint a feladat egyszerűsége talán nem is teszi indokolttá.
Amit magával az adott fejlesztőeszközzel meg lehet csinálni, legtöbbször azt használom.
Persze biztos, hogy vannak bizonyos feladatok megoldásához hatékonyabb eszközök, de esetemben a probléma teljesen alapszintű volt. -
quailstorm
félisten
válasz
martonx
#10217
üzenetére
Milyen új projecten?
Egy 90-es évek szimulátorhoz ajánlottam ahol a kókányolásállóság és a kompatibilitás régi frameworkkel sokkal jobban számít.
Ráadásul ha visszakeresel a nevére:
SharpDevelopot használ. Az nem támogat 4.5.1-nél újabb .NET Frameworkot. Tehát valószínűleg nem tudja használni a System.Text.Json-t.Úgyhogy szerintem de, elegáns helyzetre szabva olyan libet ajánlani ami biztos működik nála. Ahhoz a pet project játékhoz óriási előrelépés lenne neki a Newtonsoft is.
-
martonx
veterán
válasz
quailstorm
#10214
üzenetére
Teljesen érthető, ha valahol nem cserélik le. De ettől még egy új projekten csukott szemmel a régi legacy libet ajánlani, hát nem elegáns.
-
quailstorm
félisten
válasz
Alexios
#10215
üzenetére
Persze, teljesen másképp lett megoldva végül a probléma. Integrációs tesztek miatt mondtam a többieknek hogy felesleges custom resolvert meg normalizálást meg minden féle bonyolult dolgot implementálni. Deszerializálás helyett inkább a referencia is szerializálva van és a két szerializált json van összehasonlítva.
Előző projectemen is elég keményen van abuzálva a Newtonsoft plugin architektúrás workspace deszerializáláshoz, úgyhogy ott is azért nem éri meg váltani.
-
Alexios
veterán
válasz
quailstorm
#10214
üzenetére
Lecserélni a meglévőt azért teljesen más use case mint egy új projektnél azt behúzni, vagy azt ajánlani. Nyilván legacy-t migrálni nem feltétlenül érdemes, vagy legalábbis nagyon át kell gondolni mennyi munkával jár, és mit várunk a végén tőle.
Viszont a thread amit linkeltél 3 éves, azóta pl. lehet származtatott osztályokat is deszerializálni, a referencia kezelése is finomodott stb. Pont ez a lényeg, hogy ezt aktívan fejleszik, míg a newtonsoftot már kevésbé(teljesen mással foglalkozik már James NK).
Szerintem ha új projektnél problémás a system.text.json akkor lehet ott érdemes elgondolkodni hogy biztos a libraryvel van-e a probléma, vagy mit akarunk csinálni egyáltalán.
Pl. láttam nemrég olyat hogy a Newtonsoftba van beépítve json schema validator, viszont ez sokkal szabadabban értelmezi a json schema szabványt mint bármi más. Így nem tudták lecserélni ezt a részét a kódnak egy más libraryre mert folyamatos validációs hibák voltak, mert a rendszer többi része is invalid sémára épült.
Na most itt lehet mondani hogy de jó a newtonsoft, bezzeg a másikkal nem lehet megoldani, de azért lehet mégiscsak az lenne a jobb ha a kód inkább jól lett volna megírva. -
quailstorm
félisten
válasz
martonx
#10212
üzenetére
Felhasználásfüggő. Nem teljes helyettesítő a System.Text.Json.
De persze, Tominak valószínű elég, meg az átlag projectbe is elég. Munkában előző projectemnél biztosan nem volt érdemes lecserélni a Newtonsoftot, mert csak a rengeteg szívást és kompatibilitási problémát kaptuk volna a nyakunkba, de mostani projectemen is volt olyan eset (bocs, elfelejtettem), ahol a megoldás egyszerűbb lett volna és jobban dokumentált volt Newtonsofttal.
Szóval én még nem temetném a Newtonsoftot, de nyilván új projecten nem azzal kell kezdeni feltétlen.
-
Tomi_78
aktív tag
válasz
quailstorm
#10211
üzenetére
Átrendeztem kicsit akkor a tanácsod alapján a kódot és most úgy látszik, helyesen működik (bár nem értem, mi volt a hiba); köszönöm szépen!
StreamWriter f = new StreamWriter("mentes.txt");
for (int j=0; j<jatelemlista.Count; j++) {
var je = jatelemlista[j];
switch (je.neve) {
case "jatekos": //Adatok beírása
break;
case "robot": //Adatok beírása
break;
//És így tovább...
}if (j<(jatelemlista.Count-1)) f.WriteLine("."); //Zárótag.
}
f.Close(); -
martonx
veterán
válasz
quailstorm
#10211
üzenetére
Newtonsoftot ne már mikor 5 éve van System.text.json
-
quailstorm
félisten
válasz
Tomi_78
#10210
üzenetére
Tegyél breakpointot a kiírás közben. Csak ez a kód ír ki pontot?
A for-t én Count - 1-ig futtatnám. A switchet kitenném helper methodba. A pontírás maradna a foron belül a helper method után. For végeztével meghívnám mégegyszer a helper methodot az utolsó elemre.
De igazából az egésznek nem sok értelme van. Miért szívatod magad saját szeralizátorral? Legyen rendes game state objected és használj valami XML vagy JSON szerializáló libraryt (Newtonsoft mondjuk).
Ez így 90-es évek szimulátor.
-
Tomi_78
aktív tag
Sziasztok!
Kis játékomban éppen a mentést programozom le, de folyton abba a hibába ütközöm, hogy az alábbi ciklus a fájl legvégére is beír egy pontot, holott nekem oda nem kellene, mert kiolvasáskor így úgy érzékeli, hogy jön még egy játékelem a fájlból, pedig csak fájlvége jel van már ott.
Valaki látja, hogy mit rontok el? Vagy teljesen rosszul csinálom?StreamWriter f = new StreamWriter("mentes.txt");for (int j=0; j<jatelemlista.Count; j++) {
var je = jatelemlista[j];
switch (je.neve) {
case "jatekos": //Adatok beírása
if (j<(jatelemlista.Count-1)) {
f.WriteLine("."); //Ez nem jó valamiért
}; //Zárótag.
break;
case "robot": //Adatok beírása
if (j<(jatelemlista.Count-1)) {
f.WriteLine("."); //Ez nem jó valamiért
}; //Zárótag.
break;
//És így tovább...
}
}
f.Close(); -
pmonitor
aktív tag
-
pmonitor
aktív tag
válasz
sztanozs
#10206
üzenetére
Igazából maga a ComAutoWrapper kb. 18-20 KB lenne. Csak mi 1-2 sűrűbben használt dolgot is beletettünk. Pl. a "ExcelSelectionHelper.cs", "ExcelStyleHelper.cs" fájlokat kapásból ki lehetne dobni belőle. De azért írtam azt, hogy mindkettő package elfér egymás mellett. Nem zavarják egymást. És ahol elfér több MB-os openxml, ott már ez a pár 10 KB-os ComAutoWrapper is bőven elfér. De ha mind a kettőt használja valaki, akkor már csak 1 dolog marad megoldatlan: A binárisan tárolt fájlok(pl. jelszóval védett), ha az excel nincs telepítve. Mert ezt az esetet egyik sem tudja kezelni.
-
pmonitor
aktív tag
válasz
quailstorm
#10204
üzenetére
Igen. Ez is benne van az összehasonlító táblázatban. Az openxml meg nem tudja a binárisan tárolt fájlokat kezelni. Megpróbálom ide másolni a táblázatot. De nem tudom, hogy olvasható lesz-e.
## 📊 Comparison: OpenXML vs COM Automation
This section compares two popular approaches for automating Office documents in C#.
| Feature / Capability | OpenXML SDK | COM Automation (`ComAutoWrapper`) |
|--------------------------------------------------|------------------------|------------------------------------|
| File-based read/write | ✅ Yes | ❌ No |
| Live Office application control (Excel/Word) | ❌ No | ✅ Yes |
| Handles password-protected files | ❌ No support | ✅ Yes (if Office can open it) |
| Supports running VBA macros | ❌ No | ✅ Yes |
| Reads current user selection | ❌ No | ✅ Yes |
| Formatting (color, styles, font size, etc.) | ⚠️ Limited | ✅ Full |
| Chart and graphic manipulation | ❌ No | ✅ Yes |
| Interactive editing of running instance | ❌ No | ✅ Yes |
| Requires Interop DLLs | ❌ No | ❌ No (via ComAutoWrapper) |
| Can be used without Office installed | ✅ Yes | ❌ No |
| Dependency size | ✅ Small | ✅ Small (via wrapper) |
> ⚠️ Note: OpenXML is best for static document generation and server-side manipulation.
> ✅ COM Automation is best for real-time document interaction and full feature access.
Using `ComAutoWrapper`, you get the **full power of Office** with the **ease of a lightweight, interop-free helper**, suitable for Excel and Word automation alike.
While both OpenXML and COM automation are useful for working with Office documents, they serve very different use cases. Here’s a feature-by-feature comparison to help you decide.
De mondjuk azt beszéltük meg a ChatGpt-vel, hogy vígan megférnek egymás mellett is. Igazából az sem mind1, hogy a ComAutoWrapper ~31 KB, az openxml, meg ~10 MB. Pl. ez sem mind1. -
pmonitor
aktív tag
válasz
pmonitor
#10202
üzenetére
A ChatGpt írt egy összehasonlító táblázatot az "openxml", és a "COM Automation" között. A táblázat a README.md végén található. Érdekes összehasonlítás... Az eredmény magáért beszél. A ChatGpt nagyon sokat segített a projekt implementálásában.
Ú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!
- Kezdő fotósok digitális fényképei
- gban: Ingyen kellene, de tegnapra
- Overwatch 2
- exHWSW - Értünk mindenhez IS
- Okos Otthon / Smart Home
- Ne már! Drágább lesz a GPU a memóriapánik miatt?
- Battlefield 2042
- Battlefield 6
- Red Dead Redemption 2 (PC)
- Milyen hagyományos (nem okos-) telefont vegyek?
- További aktív témák...
- Cisco AIR-AP4800-E-K9 - Access Point - Több darab érkezik - Új ára 368.000Ft - 5200 Mbit/s
- Új Gamer PC - Ryzen 7 5700X / RTX 5060 / B550M / 32GB RAM 3600Mhz / 1TB M.2 SSD / 650W
- JRL SF Onyx SH2301 villanyborotva
- ASUS ROG STRIX 1200W 80 PLUS Platinum Tápegység!
- Apple iPhone XR 64GB, Kártyafüggetlen, 1 Év Garanciával
- Konzol felvásárlás!! Xbox Series S, Xbox Serries X
- Magyar Logitech G915 Billentyűzet lehet +33.000.- Ft ból
- Samsung Galaxy A71 128GB, Kártyafüggetlen, 1 Év Garanciával
- ÁRGARANCIA!Épített KomPhone Ryzen 5 5600X 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
- Telefon felvásárlás!! Apple iPhone 16, Apple iPhone 16e, Apple iPhone 16 Plus, Apple iPhone 16 Pro
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
)

