- AMD Navi Radeon™ RX 6xxx sorozat
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Házimozi belépő szinten
- Milyen széket vegyek?
- Azonnali notebookos kérdések órája
- Vezetékes FEJhallgatók
- Szünetmentes tápegységek (UPS)
- 5:4 képarányú SXGA monitor jön ősszel az EIZO berkeiből
- 3D nyomtatás
- Milyen egeret válasszak?
Új hozzászólás Aktív témák
-
togvau
senior tag
válasz
sztanozs #7699 üzenetére
ANSI-t ír. De ez nem jelent semmit. Minden szerkesztőnél, szépen látszik az összes string, ANSI, és UTF-8 kódolásra állítva is. Még a hulladék windowsos sima notepadban is.
Az első string előtt van egy 00 31 hex és mintha mindegyik adat között lenne egy 00, de nem közvetlen az első string karakter előtt vagy a string után. -
togvau
senior tag
válasz
sztanozs #7695 üzenetére
köszi, sharpziplibel már simán megette (lehet nem véletlen, hogy szinte minden C# programnál ott figyel a sharpziplib dll), minden byte stimmel dekódolás, kicsomagolás után. De a Java-s stringet még mindig nem sikerült olvasni. Ha nyomok C# binaryreaderben egy readString()-et, akkor az eredmény semmi, még hibaüzenet sem. Ugyan ez readcharnál. Csak byteot olvasva jön ki értékelhető.
Java-ban writeUTF()-el van írva a fájlban, és persze readUTF()-el olvasható is.Olvastam róla hogy más az endianossága a c#-és a java-nak, de endianváltó libet is töltöttem, azzal se lehet byteon kívül mást olvasni, hogy legyen valami :\
-
sztanozs
veterán
byte vs sbyte - a C# mindenhol byte-tal számol az sbyte csak speciális helyekre kell. De ha a Java tényleg signed byte-ot ad vissza (-128 - 127), akkor persze ezzel mókolni kell (de ez ugye csak reprezentáció - egy fájlba/stream-be mindegy, hogy byte-ként vagy sbyte ként írsz, a végeredmény ugyanaz lesz.
másrészt nekem úgy rémlik, hogy a GZip nem ZLib kompatibilis, nem is csodálkozom, hogy hibát dob.
A deflate pedig csak raw deflate bytestream-re használható, a headereket le kell vágni.ZIP-re külső csomagokat érdemes használni: [link]
-
togvau
senior tag
válasz
sztanozs #7693 üzenetére
Na most van valami siker, de már úgy megkavarodtam, hogy azt sem tudom hol vagyok. Szóval az egyik fő probléma az lehetett, hogy a java kódból másolt byte tömböt byte-ként deklaráltam és kezeltem, pedig a java byte-ja a C# sbyte-jának felel meg.
Na a lényeg, hogy ha kiíratom az első dekódolt 32 byteot javaban, és C#-ban, akkor stimmel mindegyik.De ezután kéne jönnie egy kicsomagolásnak Zlib alapon, ami nem megy, mert "An unhandled exception of type 'System.IO.InvalidDataException' occurred in System.dll
Additional information: The magic number in GZip header is not correct. Make sure you are passing in a GZip stream."Java-ban InflaterInputStream-en megy keresztül ami az Inflater() kicsomagolót használja, C#-nál a GZipStream-en menne át ha menne, mert elvileg a zlib, gzip, pkzip kompatibilis egymással.
A javas inflater dokumentációban viszont van egy ilyen: "If the parameter 'nowrap' is true then the ZLIB header and checksum fields will not be used. This provides compatibility with the compression format used by both GZIP and PKZIP. "Gondolom ezért C#-ban pár byteot ki kéne hagyni... de hol és mennyit...
Viszont van már DeflateStream is a .net-ben, ami full Zlib kompatibilis. Ez már más hibát ír ki "An unhandled exception of type 'System.IO.InvalidDataException' occurred in System.dll
Additional information: Block length does not match with its complement." akár akkor is ha egy ReadByte()-ot nyomok -
sztanozs
veterán
Próbáld meg az AES-t (vagy AESManaged-et) használni a Rijndael helyett, és úgy felkonfigurálni, ahogy a példában van.
Ráadásul a Java-s megoldás nem közvetlenül a key-t használja, hanem egy abból derivált (PBKDF2WithHmacSHA1) kulcsot, amihez kell salt is:int iterations = 128;
Rfc2898DeriveBytes rfc2898 = new Rfc2898DeriveBytes(enc_key, salt, iterations);
byte[] key = rfc2898.GetBytes(32);Ezt próbáld meg illeszteni a kódodhoz.
-
togvau
senior tag
válasz
sztanozs #7691 üzenetére
Megnéztem. Keysize-ok stimmelnek. De elkezdtem ellenőrizgetni a keyeket.
Amíg sima byte[]-ban van a key, addig stimmel a C#-os a Javassal, de miutánRijndael rijAlg = Rijndael.Create();
rijAlg.Key = Key;
majd egyforeach (var b in rijAlg.Key)
{
sb.Append(String.Format("{0:x2} ", b));
}
System.Console.WriteLine(sb.ToString());Itt már tökmás a végeredmény... Ez hogy lehet?
-
togvau
senior tag
válasz
sztanozs #7688 üzenetére
Valamennyire használható, de így sem dekódolja rendesen amit kéne.
Java-ban amiben működik a dekódolás ilyen a beállítása a dekódolónak:
AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);
try
{
PBEKey key = (PBEKey)
SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1").generateSecret(new PBEKeySpec(new
String(kulcsbytearr).toCharArray(), salt, 7, 128));
SecretKey encKey = new SecretKeySpec(key.getEncoded(), "AES");
dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
dcipher.init(Cipher.DECRYPT_MODE, encKey, paramSpec);C# nem tudom mi ennek a secretkeynek a megfelelője, szóval java-ból kihoztam a végső kulcsot az enckey-ből.
static Stream DecryptStream(Stream cipheredStream, byte[] Key, byte[] IV)
{
// Check arguments.
if (cipheredStream == null/* || cipherText.Length <= 0*/)
throw new ArgumentNullException("cipherText");
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException("Key");
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("IV");
Rijndael rijAlg = Rijndael.Create();
rijAlg.Key = Key;
rijAlg.IV = IV;
rijAlg.Mode = CipherMode.CBC;
//rijAlg.Padding = PaddingMode.PKCS7;
rijAlg.KeySize = 128;
ICryptoTransform decryptor = rijAlg.CreateDecryptor(rijAlg.Key, rijAlg.IV);
return new CryptoStream(cipheredStream, decryptor, CryptoStreamMode.Read);
}De nem stimmel a dekódolt anyag. Ilyen PKCS5 nincs is a C#-ban, csak 7
-
válasz
Froclee #7682 üzenetére
Köszi a tippet, sikerült megoldani
public double Usd
{
get { return usd; }
set
{
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
usd = value;
RaisePropertyChanged("Usd");
}
);
}
}Más kérdés, hogy az UWP app-al pont azt nem tudom megvalósítani, ami kéne, mégpedig hogy folyamatosan látszódjon a kis appom minden más felett a sarokban. Nincs
topmost
funkció mint a WPF-ben -
sztanozs
veterán
Itt is van: CryptoStream, még példa is van a cikk alján.
-
togvau
senior tag
Kezdő C#-osként egy URL-ről streamként olvasott fájlt kéne dekódolnom, ami AES 128bit kódolású.
Eddig ennyi, oda a ConvertToStream köré kéne a dekódolás.
var reader = new BinaryReader(new GZipStream(ConvertToStream(DB), CompressionMode.Decompress));
Java-ban van olyan, hogy "CipherInputStream", és ott elég egyszerű. De itt hogy?
-
Froclee
őstag
Task.Run-ban 99%ban nem szabad semmit wrappelni. (+ link) Pláne hogy mégcsak async-á se tetted.
var currencies = await Service.CurrencyService.GetListAsync(); // naming convention: async metódus async-ra végződik
if (currencies != null)
{
foreach (Model.Currency curr in currencies)
{
if (curr.Name == "USD") this.Usd = curr.Value;
if (curr.Name == "EUR") this.Eur = curr.Value;
if (curr.Name == "GBP") this.Gbp = curr.Value;
}
}Ez hol hal meg? RaisePropertyChanged dob exceptiont? Illetve fingom sincs UWP-ban hogy van a szálkezelés, de tudtommal, ha UI controlt akarsz frissíteni másik threadről nem árt Dispatcher-t használni.
-
No, kicsit átalakítottam.
private async Task GetExchangeRates()
{
await Task.Run(() =>
{
Task<List<Model.Currency>> task = Service.CurrencyService.GetList();
task.Wait();
var currencies = task.Result;
if (currencies != null)
{
foreach (Model.Currency curr in currencies)
{
if (curr.Name == "USD") this.Usd = curr.Value;
if (curr.Name == "EUR") this.Eur = curr.Value;
if (curr.Name == "GBP") this.Gbp = curr.Value;
}
}
});
}Viszont amire nem számítottam, hogy összeakad itt a
RaisePropertyChange
-el:public double Usd
{
get { return usd; }
set
{
usd = value;
RaisePropertyChanged("Usd");
}
}Aszongya:
An exception of type 'System.Runtime.InteropServices.COMException' occurred in System.Runtime.WindowsRuntime.dll but was not handled in user codeAdditional information: Az alkalmazás olyan objektumfelületet hívott, amely egy másik szálhoz volt rendelve. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))
-
válasz
Froclee #7677 üzenetére
Valóban kaptam exceptiont
Átírtam Double-re most hipp-hopp, így már a GetList() visszaadja azt a listát amit kell, viszont a
GetExchangeRates()
-el még mindig nem jó valami, mert kék képernyővel kiakad az app. Ha atask.Wait()
-től kikommentezek mindent akkor elindul, csak úgy nem sok értelme van -
Froclee
őstag
Az
if (x.Attributes.Item(1).InnerText == "USD")
után tennék a helyedben egy entert és a breakpointot acurrList.Add(new Model.Currency { Name = "USD", Value = int.Parse(x.InnerText) });
sorba tenném. Ha beakadt a breakpoint nyomj egy F10-et és kapni fogsz egy exceptiont."a Model.Currency Value értéke integer, nincs szükséges a tört részre"
Akkor ügyesen parse-old.
-
Rendben, átírtam var-ra, így jobban olvasható.
Most így néz ki a két függvényem:
GetList()
public static async Task<List<Model.Currency>> GetList()
{
List<Model.Currency> currList = new List<Model.Currency>();
var client = new MNBService.MNBArfolyamServiceSoapClient();
var eRatesRequestBody = new MNBService.GetCurrentExchangeRatesRequestBody();
var eRatesResponseBody = await client.GetCurrentExchangeRatesAsync(eRatesRequestBody);
var result = eRatesResponseBody.GetCurrentExchangeRatesResponse1.GetCurrentExchangeRatesResult;
XmlDocument eRatesDoc = new XmlDocument();
eRatesDoc.LoadXml(result);
XmlNode rootNode = eRatesDoc.FirstChild;
XmlNode dayNode = rootNode.FirstChild;
foreach (XmlNode x in dayNode.ChildNodes)
{
if (x.Attributes.Item(1).InnerText == "USD") currList.Add(new Model.Currency { Name = "USD", Value = int.Parse(x.InnerText) });
if (x.Attributes.Item(1).InnerText == "EUR") currList.Add(new Model.Currency { Name = "EUR", Value = int.Parse(x.InnerText) });
if (x.Attributes.Item(1).InnerText == "GBP") currList.Add(new Model.Currency { Name = "GBP", Value = int.Parse(x.InnerText) });
}
await client.CloseAsync();
return currList;
}GetExchangeRates()
private void GetExchangeRates()
{
Task<List<Model.Currency>> task = Service.CurrencyService.GetList();
task.Wait();
var currencies = task.Result;
if(currencies != null)
{
foreach (Model.Currency curr in currencies)
{
if (curr.Name == "USD") this.Usd = curr.Value;
if (curr.Name == "EUR") this.Eur = curr.Value;
if (curr.Name == "GBP") this.Gbp = curr.Value;
}
}
}Ezzel így, konkrétan nem tölt be az alkalmazás.
Használok brakpointokat, a
task
-nál ezzel szembesülök:Result = "{Not yet computed}"
Értem, hogy nincs még meg az adat, csak ezt hogyan kezeljem?
És köszönöm mindenkinek a segítséget!
ui.: a Model.Currency Value értéke integer, nincs szükséges a tört részre
-
Froclee
őstag
Nekem lefut kicsit átalakítva.
1.) Nem int.Parse hanem double.Parse kell.
2.) Ahogy martonx írta, olvashatóság miatt inkább var-t használj.
3.) Illetve ezt kellett még átalakítani:var eRatesRequestBody = new ServiceReference1.GetCurrentExchangeRatesRequestBody();
var eRatesResponseBody = await client.GetCurrentExchangeRatesAsync(eRatesRequestBody);
var resultAsString = eRatesResponseBody.GetCurrentExchangeRatesResponse1.GetCurrentExchangeRatesResult;
XmlDocument eRatesDoc = new XmlDocument();
eRatesDoc.LoadXml(resultAsString);GetCurrentExchangeRatesAsync visszatérési értéke GetCurrentExchangeRatesResponse, nálad pedig ResponseBody.
De egyébként debuggert nem használsz?
-
martonx
veterán
-
Sziasztok!
Adott az MNB webservice, amin keresztül az árfolyamokat szeretném lekérni. WPF appban simán ment, viszont UWP alkalmazásban valahogy async kéne ezt megoldani és sehogy sem jutok dűlőre vele. Hogyan kéne kijavítanom az alábbi függvényt, hogy jól működjön?
public static async Task<List<Model.Currency>> GetList()
{
List<Model.Currency> currList = new List<Model.Currency>();
MNBService.MNBArfolyamServiceSoapClient client = new MNBService.MNBArfolyamServiceSoapClient();
MNBService.GetCurrentExchangeRatesRequestBody eRatesRequestBody = new MNBService.GetCurrentExchangeRatesRequestBody();
MNBService.GetCurrentExchangeRatesResponseBody eRatesResponseBody = await client.GetCurrentExchangeRatesAsync(eRatesRequestBody);
string eratesResp = eRatesResponseBody.GetCurrentExchangeRatesResult;
XmlDocument eRatesDoc = new XmlDocument();
eRatesDoc.LoadXml(eratesResp);
XmlNode rootNode = eRatesDoc.FirstChild;
XmlNode dayNode = rootNode.FirstChild;
foreach (XmlNode x in dayNode.ChildNodes)
{
if (x.Attributes.Item(1).InnerText == "USD") currList.Add(new Model.Currency { Name = "USD", Value = int.Parse(x.InnerText) });
if (x.Attributes.Item(1).InnerText == "EUR") currList.Add(new Model.Currency { Name = "EUR", Value = int.Parse(x.InnerText) });
if (x.Attributes.Item(1).InnerText == "GBP") currList.Add(new Model.Currency { Name = "GBP", Value = int.Parse(x.InnerText) });
}
await client.CloseAsync();
return currList;
} -
szoke12
őstag
Az eddigi gondjaimat sikerült orvosolni, nagyon köszönöm! Most az lenne a kérésem, hogy hogyan tudok egy olyan toolbart készíteni, ami minden usercontrol esetén megfelelően viselkedik. Szóval van egy usercontrol, és amikor abban dolgozok, akkor a toolbar elmei arra a usercontrolra vonatkozó metódusokat hívják meg, amikor egy másikban, akkor pedig azokat.
Nem feltétlen kódrészekre lennék elsőkörben kíváncsi, inkább arra hogy ezt logikailag hogyan képzeljem el. -
Froclee
őstag
válasz
eddie17 #7666 üzenetére
Mi az hogy éles? Miért nem csinálsz valami kis saját gyakorló projektet pl githubon? Mondjuk valami eCommerce alkalmazás microservice-ekkel, ott aztán mindent tudsz gyakorolni.
Docker, SPA frontend, backend, ORM stb. Microsoft-é jó kiinduló pont lehet.
Hogyha úgy érzed ez nem menne, akkor csinálhatsz csak egy szimpla MVC projektet is, az is tök jó gyakorlás.
-
eddie17
addikt
Sziasztok!
Most tanulok szoftverfejlesztőnek és természetesen a fő csapásirány a C#.
Mivel előtte én nem foglalkoztam ezzel ezért nincs tapasztalatom benne, viszont szeretnék!
Nem tudom jó helyen írok, hogy bárki dolgozik olyan projekten amibe be lehet csatlakozni és tapasztalatot szerezni az szóljon!
Egy a lényeg nekem, hogy élesben is tudjak foglalkozni vele!
Privátban elértek ha adódna ilyen alkalom, amolyan "laborgyakorlat" címen. -
sztanozs
veterán
válasz
sirszevenap #7663 üzenetére
Custom Renderer-t is megnézted? Lehet, hogy csak le kellene tiltani a rendering animációt.
-
sirszevenap
addikt
válasz
sztanozs #7662 üzenetére
Természetesen csak ezzel dolgozom!
Komplett hülyeségnek tartom állandóan törölni és újrahúzni a listát. Sajnos nem működik rendesen. Eleve probléma volt az elején, hogy ki sem nyílt (amint letekertem a listát majd vissza, akkor pedig már nyitva volt).Aztán ForceUpdateSize(); meghívásával ez megoldódott, viszont rohadt igénytelennek hat a az animáció iOS-en. Természetesen Androidon ez sem kellett.
Van baj ezzel az iOS-el bőven. De köszönöm neked, hogy utánanéztél.
Tudom egyébként mindenkinek ajánlani a Xamarin.Forms-ot, ilyen kisebb gyerekbetegségeitől eltekintve nagyon jó cucc. Szinte bármilyen utólagos munka nélkül képes ugyan úgy funkcionálni 4 platformon ez egyszem' kód!
(Android,iOS,WP,UWP)
-
sztanozs
veterán
válasz
sirszevenap #7661 üzenetére
Ennyit találtam neked:
http://www.telerik.com/forums/custom-cell-with-image-stutters-when-scrolling-on-android
Bár kicsit régi a thread, lehet, hogy ez is egy 'known limitation' még iOS-en.Amúgy add/remove helyett ezzel is kipróbáltad:
INotifyPropertyChanged
, ezzel is csinálja ezt az "összeomlasztást"?Ezt találtam még neked: [link]
- Avoid changing the cell layout based on the BindingContext. This incurs large layout and initialization costs.Custom Renderer: [link]
-
sirszevenap
addikt
válasz
sztanozs #7660 üzenetére
Igazából pitiáner dolognak látszódó dologról lenne szó (amire nem találok megoldást már 1 hónapja). A problémám a listview-val van. Expander listview, tehát van egy úgymond fejléce és arra tappolva jelenik meg a hozzá tartozó content majd újra tappra bezárul. Androidon tökéletesen működik, iOS-en képtelen normálisan lerenderelni a ViewCell méretváltozását és vibrálva jelenik meg. Értsd: Tappolás után lenyílik a content helye (felveszi a megfelelő méretet a ViewCell), ekkor a content elvan csúszva és amikor az "animáció" befejeződött és a ViewCell felvette a méretét akkor teszi bele a tartalmat, tehát amikor teljesen kinyílt. Ez ad vibráló hatást, ami nagyon zavaró. Androidon tökéletes. Gyakorlatilag ott ilyen lenyíló animáció sincs, csak megjelenik a tartalom minden sallang nélkül.
Itt pedig a teljes videót megnézhetitek, mi a pontos baj. Az iOS-re figyeljetek, hogy nyitogatja és zárja. Egy ilyen megoldást pl Én nem adnék ki a kezeim közül, pláne ne a storeok-ba: Expandable ListView in Xamarin Forms
-
sztanozs
veterán
válasz
sirszevenap #7655 üzenetére
Szerintem senki nincs igazán otthon, de írd be nyugodtan mi a gondod és majd együtt megpróbálunk rájönni
-
Froclee
őstag
válasz
szoke12 #7658 üzenetére
1. )Nagyon rosszak a naming conventionök. Mi az hogy z? Mi az hogy Kerdezo?
2.) Igen, a flow így nem igazán jó. Aszinkron lett, viszont szinkronnak kell lennie. Fontos, hogy a Show() után ne menjen tovább a kód.
a.)
public void ExecuteWhateverLogicOnZ(int z)
{
var dialogResult = new Kerdezo().ShowDialog();
//kezdj valamit a result-tal. lényeg hogy addig ne folytatódjon a kód amíg nincs eredménye a kérdezőnek.
}b.)
public void ExecuteWhateverLogicOnZ(int z)
{
if (z == 0)
{
new Kerdezo(this).Show();
return; //egyből kilépsz a metódusból
}
// more code here
}public class Kerdezo : Form
{
private OriginalForm _originalForm;
public Kerdezo (OriginalForm originalForm)
{
_originalForm = originalForm;
}
private void Form1_FormClosing(object sender, EventArgs e) //arra az eventre iratkozz fel amikor a z módosul
{
var result = sender as WhateverResult;
_originalForm.ExecuteWhateverLogicOnZ(result.Valasz);
}
} -
szoke12
őstag
válasz
Froclee #7657 üzenetére
Szia!
Köszönöm a választ! A kódomból ennyit érint a dolog:if (z == 0)
{
new Kerdezo().Show();
switch (z)
{
case 0: break;
case 1:
string ment;
ment = objKabel.attr3;
objKabel.attr3 = objKabel.attr4;
objKabel.attr4 = ment;
break;
case 3: break;
case 4:
objKabels.Clear();
return objKabels;
}
}
if (z == 2)
{
string ment;
ment = objKabel.attr3;
objKabel.attr3 = objKabel.attr4;
objKabel.attr4 = ment;
}Az program elején a deklarálom a z-t 0 értékkel. És egy felugró ablakban (Kerdezo) szeretném eldönteni, mennyi az értéke. Ugyanis az ablakban 4 lehetőségből kell választani, és annak fényében módosul a z. Itt pedig aszerint futna tovább a program hogy mennyi a z. Ha z=1 akkor javít egy bejegyzést, és utána megint lefut ez az egész ciklus és megint megkérdezi, hogy javítsa-e a következőt. Ha z=2, akkor mindet javítja automatikusan, ha 3, akkor azt az egyet kihagyja, de a többit megint megkérdezi, ha 4, akkor pedig kilép a metódusból.
Talán nem a legszebb megoldást választottam ehhez, de még csak gyakorolgatok.
És nekem az kéne, hogy a ciklus ne fusson tovább a switch-re, Hanem várja meg, amíg a Kerdezo bezárul.
De hogy a Kerdezo-ből hogy kapom meg az adatokat, meg hogy az hogyan változtatja a Usercontrol z-jét, még annak utánaolvasok.... -
Froclee
őstag
válasz
szoke12 #7656 üzenetére
"Az lenne a célom, hogy amikor fut a program, akkor addig várjon egy ponton, amíg az egyik változó értéke meg nem változik."
Nem szívesen mondanám el, mert ha ilyet kell csinálnod, 90% hogy rossz az alkalmazás design-ja. Ha raksz be pár code snippetet (az egész is mehet pastebin.com-ra) akár tudunk segíteni, hogyan lehetne ezt normálisan.
-
szoke12
őstag
válasz
Raftsman #7654 üzenetére
Köszönöm!
Mit jelent az, hogy castolni?Illetve újabb gondba ütköztem. Nem tudom, hogy kell használni a wait-ot. Próbáltam utánaolvasni, és néhány tesztet is csináltam, de megy tovább.
Az lenne a célom, hogy amikor fut a program, akkor addig várjon egy ponton, amíg az egyik változó értéke meg nem változik. Amit egy felugró ablakban változtatok meg.
Bár egyszerűbb lenne külön saját ablakot írnom, és azt meghívni, csak azt meg wpf-ben nem jöttem rá hogy kell. Illetve az ottani adatok elérésével vagyok bajban.
Bocsi, nagyon kezdő vagyok. -
sirszevenap
addikt
Sziasztok.
Lenne itt esetleg olyan, aki kicsit otthon van a Xamarin.Forms-ba? Sajnos halott (ill inkább nincs) a topic ami ebben a témában mozog.
Köszi!
-
szoke12
őstag
Sziasztok!
Keresgéltem a témában, de nem jutottam még megoldásra. A problémám, hogy a programomban van 3 usercontrol, és a főablakból szeretnék lefuttatni egy metódust az egyik controlban. Odáig eljutottam, hogy meghívjam, de megáll a futás és azt az üzenetet kapom, hogy "Az objektumhivatkozás nincs beállítva egyetlen objektumpéldányra sem."
A controlokat párhuzamosan hívom meg és egyszerre dolgozok bennük, és szeretnék mentést készíteni a pillanatnyi tartalmukból. A KablistaControl tartalmazza az ExportToCsv() metódust, ami egy lista elemeit kiírja egy csv fájlba. Ha a controlon belül hívom meg, minden rendben, elkészül a file, de ha a főablakból, akkor hiába van addigra feltöltve a lista, nem akarja. Mit csinálok rosszul?A meghívás:
(this.Parent as KablistaControl).ExportToCsv(); -
Domonkos
addikt
válasz
summers #7650 üzenetére
Ez majdnem egy az egyben az utazo ugynok problema - nincs ra polinomialis ideju algoritmus.
Ha megis talalnal, akkor kuldj privatot - nagyon sok penzt fizetek erte
Brute force modszerrel meg nem erdemes elindulnod mert ~4840000000000000000000000000000000000000000000000000000 Joule energiara lesz szukseged hozza 70 ponthoz... Ez pedig sok. Ertelmes kozelitest viszont adhatsz. -
summers
tag
Köszönöm a válaszokat! Igazából nem is kell az összes sorrendet kiírnia, csak azt az egyet amelyikhez a legrövidebb út tartozik minden pontot érintve. A permutáción akadtam el, hogy hogy lehetne C#-ban megírni. Meg az, hogy lehetne e alkalmazni pl. 70 pontra.
-
Domonkos
addikt
Koszonom, ezzel tisztaban vagyok.
Par rovid merest elvegezve ezek jottek ki nalam. 10-10 futas atlagolva:
Kiiras terminalba (kis bufferrel): 2.291s
Kiiras terminalba (megfeleloen bufferelve): .592s
Kiiras normal fileba, SSD-re: .157s
Kiiras a /dev/null-ba: .146s
A programot ujraforditva, a kiiras reszt elhagyva: .017s (!!!)Ebbol jol latszik, hogy itt nem a permutalgatason fog elmenni az ido. Az utolso tesztbol pedig az, hogy a program idejenek csupan az 1/8 resze a "lenyegi resz". A maradek idot a kiiras is a kiiras formazasa viszi el. Szoval annyival egeszitenem ki, hogy persze nem mindegy, hogy hova irod, de az sem mindegy, hogy egyaltalan kiirsz-e valamit
Egy ugyanakkora nagysagrendet meg tudsz sporolni azzal is, ha teljesen elhagyod a kiiratast, mint amilyet akkor, amikor lassu outputrol gyorsra valtasz
Aki nem hiszi, implementalja utanamSzerk: Annyit hozzatennek, hogy a kiiras elhagyasakor otletem sincs, hogy a fordito pontosan milyen ordogi optimalizaciokat eszkozolt, amit akkor nem tett, amikor siman kiirattam. Ennek kideriteset kicsit kesobbre hagyom. Amit az ugy erdekeben tettem, hogy argv-bol olvastam az inputot es abba az agba amit kiirataskor el lehetett hagyni raktam egy szamlalot. Igy talan nem optimalizal annyit - de ennel jobban nem melyedtem bele...
-
Domonkos
addikt
A futasido a tomb meretevel valoban !-os aranyban lesz, viszont ezt valahogy el is varna az ember, leven hogy pont ugyanennyi outputot szeretne. A jo dolog viszont az, hogy normalis implementacio mellett, 10 elemre ez szinte semmi. Gyors implementalva a 3628800 sor kiiratasahoz nem kell .5s-nel tobb ido; ha pedig elhagyom a kiiratast, akkor .2s alatt vegez az osszes permutacioval. Kulcsszo a melysegi bejaras / backtrack.
Es a memoria miatt sem kell aggodni...
-
-
summers
tag
Ha van egy x,y,z koordináta rendszerben pl. 10 pontod, melyik a legrövidebb út, amelyikkel mindegyik pontot érintheted. Arra gondoltam, hogy sorba rendezni minden lehetőség szerint, minden sorrendnél összeadni a pontok közötti távolságot, ezzel megkapnám a teljes út hosszát az adott sorrendben, ezután pedig kiválasztani a legkisebbet az összes sorrend közül. Csak az egyszerűség kedvéért írtam a tömb tartalmára 1-10-ig számokat. A módszer lenne a lényeg, amivel sorba lehetne rendezni minden lehetőség szerint a tömböt.
-
summers
tag
Sziasztok!
Valaki tudna esetleg megoldást egy tömb elemeinek minden lehetséges sorrendben való kiírására? Mondjuk van egy 10-es tömb amit feltöltünk 1-10-ig számmal, két tömb nem tartalmazhat ugyanolyan számot, és minden lehetséges sorrendben írja ki a program.
-
valyogvisko
csendes tag
Ez jól hangzik, de magát az xml-t nem én írom, én csak keresek benne/bennük. De majd akkor szerkesztgetem kicsit, köszi.
-
sztanozs
veterán
válasz
valyogvisko #7638 üzenetére
XML nem törődik a sortöréssel. De ha mindenképp azonos kell, akkor rakd bele CDATA szekcióba , vagy rakj a sor végére értelmezhető/kicserélhető sorvége szekvenciát (pl. \r\n).
-
valyogvisko
csendes tag
válasz
valyogvisko #7637 üzenetére
Ehh, szerkeszteni már nem tudom, de a második részét megoldottam, csak az érdekelne, hogyan lehetne a note-okat korrektül megjeleníteni, köszi.
-
valyogvisko
csendes tag
válasz
Froclee #7636 üzenetére
Királyság, mondtam hülye vagyok, így működik
Köszi.
Mint kiderült, van még mit finomítani a megjelenítésen, példán keresztül egyszerűbb:
itt egy példaxml:
Ebből keresésnél ez lesz (noveny1,2,3):
Amit én szeretnék, az két dolog:
- "vigye át" az entert a megjelenítésbe (Wordpad, Notepad++ tudja, ez meg nem foglalkozik vele)
- új keresésnél legyen megint üres a listview, bár ezt talán én is meg tudom oldani, ha goyrsan megy, inkább megkérdezem ittEzek (főleg az első) hogyan oldhatóak meg?
Előre is köszi.
-
Froclee
őstag
válasz
valyogvisko #7635 üzenetére
Az emlitett sort a metoduson kivulre rakd, ne belulre.
-
valyogvisko
csendes tag
válasz
BTminishop #7634 üzenetére
Köszi a választ.
Lehet, hogy ez jó megoldás, viszont szül egyéb problémákat (az alatta lévő sor definíciója innentől nem jó, az utána következő buttonöket nem ismeri fel, etc) Mint mondtam, meglehetősen friss vagyok még a témában - részleteznéd egy kicsit pontosabban, milyen egyéb módosításokkal jár még ez?
-
BTminishop
aktív tag
válasz
valyogvisko #7632 üzenetére
Globális változó kell, hogy legyen az XML példányosításod.
private XmlDocument doc = new XmlDocument(); -
valyogvisko
csendes tag
Sziasztok,
volna egy (valószínűleg számotokra primitív) kérdésem, kérnék némi segítséget: szeretnék egy progit írni, ami megnyit egy xml fájlt, és tudok benne keresni és kilistázni dolgokat.
A lényeges rész így néz ki:
private void openButton_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "XML|*.xml";
if (ofd.ShowDialog() == DialogResult.OK)
{
XmlDocument doc = new XmlDocument();
doc.Load(ofd.FileName);
}
}
private void searchButton1_Click(object sender, EventArgs e)
{
if (searchInput1.Text != null && searchInput1.Text.Length >= 3)
{
foreach (XmlNode node in doc.DocumentElement)
{
string name = node.Attributes[0].InnerText;
if (name == searchInput1.Text)
{
foreach (XmlNode child in node.ChildNodes)
{
listView1.Items.Add(child.InnerText);
}
}
}
}
else
{
MessageBox.Show("Invalid Input");
searchInput1.Text = string.Empty;
searchInput1.Focus();
}
}Alapvetően minden jó, kivéve a "doc.DocumentElement" részt, mert egy olyan doc-ra hivatkozom, ami ott, abban a private részben nem létezik (lévén hogy egy szintén private részben nyitottam meg, ha jól értem a problémát). Amit én szeretnék, hogy az "openButton" úgy nyissa meg az xml-t, hogy az mindenhol a későbbiekben "látható" legyen. Maga a progi minden használatkor egyetlen xml-t fog megnyitni, tehát biztos hogy lehetne valahogy egyszerű módon megoldani a gondot, de nem minden használatkor ugyanazt, ezért én nem tudom, hogyan kellene
Kérlek nézzétek el nekem a nem megfelelő szóhasználatot, 3 napja láttam először C# kódot, bőven van még mit tanulnom belőle, szóval ha lehet akkor tételezzünk fel határtalan intelligenciát és nagyon kevés tárgyi tudástKöszönöm.
-
kispx
addikt
válasz
MATEO6600 #7628 üzenetére
C++ topikban több szerencsével járnál.
De azért itt hagyom Stroustrup ajánlását. -
MATEO6600
őstag
válasz
Goose-T #7629 üzenetére
Én lennék a legboldogabb ember ha igazad lenne.
De sajnos rengeteg helyen nyomják még ezeket a nyelveket.
Én pl img processing területén vagyok nagyon jártas, azt viszont a legritkább esetekben csinálják C# alatt, túlnyomórészt a C++ dominál, ezért is lenne szükségem a C++ tudásra ha el szeretnék helyezkedni benne.
Az általad felsorolt elmélettel tisztában vagyok. -
Goose-T
veterán
válasz
MATEO6600 #7628 üzenetére
Semmire sem mennél vele, tök fölösleges ma már C-t és C++-t tanulni. Van még pár terület, ahol hasznos lehet, de ez a programozói munkaerőpiac kb. 1%-a. Inkább tanulj elméletet, sokkal többre mész vele. Ezeknek nézz utána első körben: Clean code, GoF patterns, SOLID.
-
MATEO6600
őstag
Hi!
Adott egy komoly és alapos C# tudás, viszont C++ és C-ből teljesen 0-án állok, és szeretném megtanulni ezt a 2 nyelvet is.
Tudnátok nekem valami javasolt könyvet / weboldalt / pluralsight tutorialt adni, aminek érdemes nekiállnom?
Rengeteg oktató anyag van, de általában 0 programozási tudásról indítanak, viszont nekem itt van a C# tudásom. -
-
-Bálint.
csendes újonc
válasz
BTminishop #7623 üzenetére
Oké, bocsi.
-
-Bálint.
csendes újonc
válasz
sztanozs #7621 üzenetére
Ez, hogy a "másik form referenciája kell" sokat segített. Utánanéztem, hogy ez pontosan mit is jelent, és sikerült. Köszönöm
(Átírtam a konstruktorokat.)
Azt meg rosszul gondoltam, hogy származtatás esetén nem fognak öröklődni a kontrollerek, mert ez így normális hogy azok is öröklődnek. -
-
-Bálint.
csendes újonc
válasz
sztanozs #7619 üzenetére
Az eredeti gyakorló feladatban azért származtattam, hogy egy tömböt (List<T> típusút) a Form2-ben is feltudjak tölteni, ne csak a Form1-ben. Biztos, hogy kell tudni a származtatást, mert az órán is vettük. Augusztus végi vizsgára készülök. Ezzel a projekttel szórakozok egyébként. Fut, de elfogadhatatlan a kinézete a Form2-nek.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections;namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
public List<Ceg> cegek = new List<Ceg>();public Form1()
{
InitializeComponent();
}private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
textBox1.Text = dateTimePicker1.Value.DayOfWeek.ToString();
}private void button1_Click(object sender, EventArgs e)
{//try
//{
//StreamReader str = new StreamReader("C:\\Users\\Katalin\\Letöltések\\cégtár.txt");
StreamReader str = new StreamReader(@"..\..\..\cégtár.txt");while (!str.EndOfStream)
{
Ceg c = new Ceg();
string[] adatok = str.ReadLine().Split(';');
c.Nev = adatok[0];
c.Hely = adatok[1];
c.Dbtelep = int.Parse(adatok[2]);
c.Irszam = adatok[3];
c.Szam = adatok[4];
c.Bejegyzes = DateTime.Parse(adatok[5]);
cegek.Add(c);
gyujto.Items.Add(c.Nev);}
str.Close();
//}
//catch //(FileNotFoundException fnfe)
//{
// MessageBox.Show("Elkaptalak.");
//}
errorProvider1.SetError(button1, "Próba");
}private void textBox2_Leave(object sender, EventArgs e)
{
StreamWriter w = new StreamWriter(@"..\..\..\kiírtttt.txt", false);
//for (int i = 0; i < 5; ++i)
//{
// string a, b, p, d, f, g;
// a = cegek[0].ToString();
// b = cegek[1].ToString();
// p = cegek[2].ToString();
// d = cegek[3].ToString();
// f = cegek[4].ToString();
// g = cegek[5].ToString();// w.WriteLine(a + "; " + b + "; " + p + "; " + d + "; " + f + "; " + g);
//}foreach (Ceg koztes in cegek)
{
w.WriteLine(koztes.Nev + "; " + koztes.Hely + "; " + koztes.Dbtelep + "; " + koztes.Irszam + "; " + koztes.Szam + "; " + koztes.Bejegyzes);
}
w.Close();
}private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show(cegek[1].Nev.ToString());
}private void ujCegToolStripMenuItem_Click(object sender, EventArgs e)
{
Form2 ujceg = new Form2();
ujceg.Show();}
private void gyujto_SelectedIndexChanged(object sender, EventArgs e)
{
tbHely.Text = cegek[gyujto.SelectedIndex].Hely;
tbDbTelep.Text = cegek[gyujto.SelectedIndex].Dbtelep.ToString();
tbBejegyzes.Text = cegek[gyujto.SelectedIndex].Bejegyzes.ToString();
}}
}using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WindowsFormsApplication4
{
public partial class Form2 : Form1
{
public Form2()
{
InitializeComponent();
tbNev.Focus();
}private void button1_Click(object sender, EventArgs e)
{
Ceg d = new Ceg();
d.Nev = tbNev.Text;
d.Hely = tbHely.Text;
d.Dbtelep = int.Parse(tbDbTelep.Text);
d.Irszam = tbIrszam.Text;
d.Szam = tbSzam.Text;
d.Bejegyzes = DateTime.Parse(tbBejegyzes.Text);
cegek.Add(d);
DialogResult = DialogResult.OK;
}
}
} -
-Bálint.
csendes újonc
válasz
sztanozs #7617 üzenetére
Semmit nem csináltam, csak odaírtam a végére, hogy Form1, és bedöglött, jött a hiba a Design nézetben Form2-höz.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WindowsFormsApplication6
{
public partial class Form2 : Form1
{
public Form2()
{
InitializeComponent();
}
}
}Egy másik programot csináltam, amikor előjött a hiba, abban azért volt több minden, de arra rájöttem, hogy a hibát ez eredményezi, amit ide bemásoltam. Az is lehet, hogy beállítás, vagy hardver probléma van. (Lenovo B41, Windows 10 64 bit, intel proci, Visual Studio 2012) Ha tanórai verziót nyitok meg, ahol már van több form is, ott nincs probléma, és a kódban nem látok különbséget.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}Köszi a segítséget!
-
-Bálint.
csendes újonc
Sziasztok!
Segítségre lenne szükségem.
Nem tudom helyesen megoldani az örökítést Visual Studioban. Csináltam két formot (Form1, Form2), és amikor a Form2.cs-ben a Form2 után kettősponttal beírom a Form1-et a Form2.cs[Design] nézet a következő hibával tér vissza:The designer could not be shown for this file because none of the classes within it can be designed. The designer inspected the following classes in the file: Form2 --- The base class 'WindowsFormsApplication6.Form1' could not be loaded. Ensure the assembly has been referenced and that all projects have been built.
Ha teszek egy gombot Form1-re, és nyomok egy Clean Solutiont, majd utána egy Build Solutiont, akkor a Form2-őn is megjelenik a gomb egy kis lakattal a bal fölső csücskében. Semmit nem lehet vele csinálni, se mozdítani, se Click eljárást írni, semmit.
Miért van ez a hiba, miért jelenik meg a Form2-őn is a gomb?
-
Froclee
őstag
Múlt pénteken megjelent a .NET Core 2.
Nektek tapasztalatok a Core-ról? Van rajtunk kívül valaki, aki használja productionben?
-
amargo
addikt
Volt valami hír arról, hogy az MS korlátozza/lezárja a PCL-t? Van egy Sln-em, ami ilyeneket tartalmaz én most kaptam nem rég Windows8.1-re, de a Windows10-re is frissítést és azóta a Studio crashel folyton, amikor megnyitom az Sln-t. PCL projektekre tudtam beazonosítani a hibát.
Tud valaki ilyen problémáról másnál is?
ui nem csak nálam fordult elő, hanem akivel van egy közös projektünk, annál is. -
martonx
veterán
válasz
lord.lakli #7608 üzenetére
Ha meg előre annyira nem ismert, akkor mehet nosql-el, bár az ismeretlen adat struktúrát nemcsak letarolni nehéz, de visszaolvasni is.
-
szoke12
őstag
válasz
lord.lakli #7606 üzenetére
Elég speciális célra írom, tervrajzokból hámoz ki adatokat, és azokat szeretném egy-egy táblában megőrizni. Bár hajlok afele, hogy kiexportálom egy olyan állományba, amit vissza is tudok majd olvasni vele.
Entity-vel készítem, csak még annak se merültem mélységeibe. De lassacskán haladok. -
szoke12
őstag
Sziasztok!
C# WPF-ben programozgatok és szeretnék egy nagyobb programot írni.
A tervem az, hogy a program Futás közben egy adatbázisban hozna létre magának táblákat. A kérdésem az, hogy a létrejött táblákat később hogyan tudom kezelni. Hisz gondolom azokhoz is létre kéne hozni az entitásokat. vagy ez hogy működik?
Ú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!
- Kaspersky Antivirus és Internet Security Fórum
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Xbox tulajok OFF topicja
- A nagy Szóda, Szódakészítés topic - legyen egy kis fröccs is! :-)
- AMD Navi Radeon™ RX 6xxx sorozat
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Házimozi belépő szinten
- E-roller topik
- Fotók, videók mobillal
- MasterDeeJay: Natív 3Dfx Glide Windows11 alatt Voodoo1 és Voodoo2-vel.
- További aktív témák...
- Azonnali készpénzes INTEL CPU NVIDIA VGA számítógép felvásárlás személyesen / postával korrekt áron
- BESZÁMÍTÁS! 2TB Crucial T500 NVMe SSD meghajtó garanciával hibátlan működéssel
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7700X 32/64GB RAM RTX 5070Ti 16GB GAMER PC termékbeszámítással
- Bomba ár! Dell Latitude 5310 - i5-10GEN I 16GB I 256SSD I HDMI I 13,3" FHD I Cam I W11 I Garancia!
- ÁRGARANCIA! Épített KomPhone i7 14700KF 32/64GB RAM RTX 5090 32GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest