Új hozzászólás Aktív témák
-
cigam
félisten
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.Freeware, és akciós programok egy helyen https://www.facebook.com/freewarenews
-
pmonitor
aktív tag
Az amúgy publikus kódjaimat pontosan ilyen okok miatt nem projektben adom közre, hanem a forrás file--(oka)t, és leírom, hogy hogyan ajánlom kipróbálni. A codeproject.com-os projekteknél járok sokszor úgy, hogy nem működnek.
http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php
-
-
cigam
félisten
Igen, a kapcsos zárójelen én is gondolkodtam, hogy sima szokott lenni utánna, de így sem tetszik neki.
Pedig csak annyit szeretnék, ha lenyomja mondjuk az F8-at, akkor ScaleX=-1, ha mégegyszer, akkor ScaleX=1.[ Szerkesztve ]
Freeware, és akciós programok egy helyen https://www.facebook.com/freewarenews
-
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
félisten
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.Freeware, és akciós programok egy helyen https://www.facebook.com/freewarenews
-
Livius
őstag
válasz Alexios #9608 üzenetére
Én legtöbbször az ItemSource-on keresztül szoktam átadni egy objektumot aminek a property-jeire történnek a bindingok. Arról tudsz infót részletesen, hogy a DataContext vs. ItemSource megoldás, miben különbözik?
[ Szerkesztve ]
Gigabyte GA-Z170-D3H, Intel Core i7-7700K, Corsair Vengeance 2x8GB DDR4-3600MHz, Intel 545s 256GB SSD, EVGA GeForce GTX 1060 GAMING 6GB
-
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
félisten
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.Freeware, és akciós programok egy helyen https://www.facebook.com/freewarenews
-
cigam
félisten
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 .Freeware, és akciós programok egy helyen https://www.facebook.com/freewarenews
-
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 -
-
Keem1
addikt
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
[ Szerkesztve ]
-
-
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!
-
cigam
félisten
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.
Freeware, és akciós programok egy helyen https://www.facebook.com/freewarenews
-
Keem1
addikt
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?[ Szerkesztve ]
-
Keem1
addikt
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ó.
-
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
addikt
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.
[ Szerkesztve ]
-
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ó
[ Szerkesztve ]
-
Keem1
addikt
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.
[ Szerkesztve ]
-
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.tAm6DAHNIbRMzSEARWxtZW50ZW0gdmFka5RydIJ6bmkuDQoNClOBc4Ek
-
Keem1
addikt
-
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.
[ Szerkesztve ]
Gigabyte GA-Z170-D3H, Intel Core i7-7700K, Corsair Vengeance 2x8GB DDR4-3600MHz, Intel 545s 256GB SSD, EVGA GeForce GTX 1060 GAMING 6GB
-
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
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?
Gigabyte GA-Z170-D3H, Intel Core i7-7700K, Corsair Vengeance 2x8GB DDR4-3600MHz, Intel 545s 256GB SSD, EVGA GeForce GTX 1060 GAMING 6GB
-
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!
[ Szerkesztve ]
Spock says, “Logic clearly dictates that the needs of the many outweigh the needs of the few.” Captain Kirk answers, “Or the one.”
-
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,
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?
Spock says, “Logic clearly dictates that the needs of the many outweigh the needs of the few.” Captain Kirk answers, “Or the one.”
-
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.
[ 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!