- Apple asztali gépek
- Úgy tér vissza a Commodore 64, ahogy titkon mindenki várja
- Intel Core Ultra 3, Core Ultra 5, Ultra 7, Ultra 9 "Arrow Lake" LGA 1851
- Milyen videókártyát?
- Iszonyatos mennyiségű hulladékkal járhat a Windows 10 terméktámogatásának vége
- Milyen házat vegyek?
- Kormányok / autós szimulátorok topikja
- Kompakt vízhűtés
- Milyen egeret válasszak?
- CPU léghűtés kibeszélő
Új hozzászólás Aktív témák
-
fatal`
titán
válasz
[pod]Diablo #1999 üzenetére
Azt szerintem ebben a formában sehogy. Írsz egy függvényt ami lekéri
private int hanyadikgomb(Button button)
{
for (int i = 0; i < tombhossz; i++)
{
if (button.Equals(tomb[i])
{
return i;
}
}
}Persze ez így nem túl gyors, de jelenleg nincs jobb ötletem.
-
fatal`
titán
válasz
[pod]Diablo #1997 üzenetére
Aham, na akkor ez így nem jó. Először is ezt a függvényt nem tudod egy gombhoz hozzárendelni, mert nem egyeznek a paraméterek.
Ezt a gomb létrehozásakor, vagy ha design time csináltad, akkor a lenyílólistában válaszd ki a clickesemenyt (adhatsz más nevet is neki):
gombamihezrendelniakarod.Click += new EventHandler(clickesemeny);
Ez pedig maga az esemény amit te mouzovernak hívsz ha jól látom
private void clickesemeny(object sender, EventArgs e)
{
if (sender is Button)
{
for(int i=0;i<9;i++)
{
for (int j = 0; j < 9; j++)
{
if ((sender as Button).Tag == "0")
{
if (tabla[i + 1, j + 1].Tag == "12")
{
tabla[i + 1, j + 1].BackColor = Color.Blue;
}
if (tabla[i - 1, j - 1].Tag == "12")
{
tabla[i - 1, j - 1].BackColor = Color.Blue;
}
}
}
}
}
}
}Nem biztos, hogy tökéletes, de valami ilyesmi lesz.
-
-
fatal`
titán
válasz
[pod]Diablo #1994 üzenetére
A g amit átadtál nincsen létrehozva new-val, így megaka. Már lényegében gondolom ez futásidejű hibaüzenet.
-
[pod]Diablo
őstag
válasz
[pod]Diablo #1993 üzenetére
Most megint akadt egy kisebb problemam.Irtam egy fuggvenyt aminek elvileg jol kene mukodni,de kidob egy hibat amivel nemtudok mit kezdeni.
Itt a forraskod:
private void mouzenter(ref Button g)
{
for(int i=0;i<9;i++)
{
for (int j = 0; j < 9; j++)
{
if (g.Tag == "0")
{
if (tabla[i + 1, j + 1].Tag == "12")
{
tabla[i + 1, j + 1].BackColor = Color.Blue;
}
if (tabla[i - 1, j - 1].Tag == "12")
{
tabla[i - 1, j - 1].BackColor = Color.Blue;
}
}
}
}
}g az adott gombot jelenti.
Es itt a hiba uzenet:
Object reference not set to an instance of an object. amit erre a sorra dob ki:if (g.Tag == "0")Elore is koszonom a segitseget!
-
[pod]Diablo
őstag
Hello!
Az elozo problemat sikerult megoldani vegul,utolag is koszonet megegszer a segitsegert.
szerk: lett volna egy kisebb gond,de kozbe megoldodott.sry a felesleges postert.
-
martonx
veterán
válasz
Alkimista #1990 üzenetére
Hát nem győztél meg. Két különböző adatbázist használ ugyanaz a rendszer, és ez jó bárkinek is? Két külön gépen fenntartani, karbantartani két adatbázist, meg belépéskor választani, arról nem is beszélve, hogy a két adatbázis ugyan tud egymással kommunikálni, de komoly sebességbeli hátránya van egy Openquery-nek.
MSSQL 2008-nál már egy DB instancia 10 Gigás lehet. Ha nem több tucat felhasználóról van szó, akkor ügyes archiválással nagyon lazán elvisz egy komplett céget, sok felhasználóval 1-2 instanciával. Más kérdés, hogy az ingyenes verziók csak egy processzor magot használnak, és 1 GB ramot használnak, ami nagyon durva sebesség korlátot jelent (feltéve, hogy több millió soros kereszttáblás lekérdezéseket akarsz futtatni...). Belegondolok, hogy nálunk a core adatbázis szerver 8 magos, és 80 GB memóriája van, persze vannak olyan tábláink, ahol egy tábla 25GB
-
Alkimista
csendes tag
válasz
martonx #1986 üzenetére
Köszi a gyors választ!
Az értelme az hogy a már meglévő két alkalmazás fut pár helyen és ott nem igazán akarják lecserélni az adatbázis szervereket. Az alkalmazás sok felhasználós, és sok adat is van benne, úgyhogy a db szerverek ingyenes verziói a korlátok miatt nem igazán alkalmasak a feladatra.
Az Entity frameworkot nem ismerem, de koszi az ötletet. Megnézem mennyire alkalmas ORACLE objektumokra, gondolom SQL SERVER nem okoz neki problémát
.
-
#90999040
törölt tag
válasz
martonx #1987 üzenetére
Azaz a kérdés az, hogy miért kell egy gombnak a képéről megmondani, hogy egyezik-e egy másikkal?
[pod]Diablo #1959-es hozzászólásában ezt írja:
if (A2.Image == Image.FromFile(@"C:\-school-\prog\sakk\feherparaszt.png",true))Ez akárhogy nézem, 2 képet akarna összehasonlítani. Hogy miért, azt nem tudom, de nem is az én dolgom. Mivel erre a feladatra sem a ==, sem a Equals nem alkalmas, ezért kerestünk más megoldást.
-
martonx
veterán
válasz
kingabo #1981 üzenetére
Visszatérve podDiablo eredeti kérdéshez, szerintem rosszul közelítitek meg. Ez nem programozás technikai kérdés, hanem program szervezési kérdés.
Azaz a kérdés az, hogy miért kell egy gombnak a képéről megmondani, hogy egyezik-e egy másikkal?
Mert ha egy állapotot akarunk jelezni a képpel, akkor sokkal egyszerűbbnek látnám ezt egy változóban is eltárolni, amit utána könnyen le lehet kérdezni, nem kell képeket összehasonlítani.
Mondom mindezt úgy, hogy nem ismerem, hogy mi is lenne az eredeti feladat, csak van egy olyan érzésem, hogy háttal ültök a lovon. -
fatal`
titán
válasz
kingabo #1976 üzenetére
"(#1975) hunfatal: ez is bitről bitre hasonlít össze, szal ugyanott vagy."
Nem mindegy, hogy egy memorystreamet hasonlítasz össze, vagy pixelenként a színt. Utóbbi sokkal lassabb volt.
Persze simán lehet, hogy a .NETben ez másképp van megoldva, a delphi mégis csak a nagyon régi és ótvar lassú pascalra építkezik.
-
kingabo
őstag
válasz
#90999040 #1978 üzenetére
A bitmap által támogatott kép formátumok: [link]
Nem vagyok benne biztos, de ennek a módnak nem kell plusz memória terület, az eredeti képen garázdálkodik és baromi gyors. (6 rétegű műholdképeket kezeltünk így)
Szerintem a korábban említett enum-os megoldás ezek után az egyetlen járható út."De a lényeg, hogy így vagy úgy, de megoldható."
Ráadásul az ígyre és az úgyra is van pl vagy segítség!
Engem továbbra is érdekelne, hogy a resource-os változatnál miért nem egyezik a 2 ref.
-
#90999040
törölt tag
válasz
kingabo #1976 üzenetére
ez is bitről bitre hasonlít össze, szal ugyanott vagy.
Viszont bármilyen formátumot képes kezelni(pl. [pod]Diablo programjában is .png van), nem csak bitmap-ot, és unsafe sem kell hozzá.
Valamint, ahogy írtam, Filestream-el lassabb, de kevésbé memfaló.
De a lényeg, hogy így vag úgy, de megoldható. -
kingabo
őstag
Tehát nincs...
Igaz csak bitmap-re, de ennél gyorsabb módot nem ismerek: c-s tömbként megyünk végig a képen:
Bitmap Picture1 = new Bitmap(width, height);
BitmapData Picture1Data = Picture1.LockBits(
new System.Drawing.Rectangle(0, 0, Picture1.Width, Picture1.Height)
, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
unsafe
{
int Remain1 = Picture1Data.Stride - Picture1Data.Width * 3;
byte* PtrP1 = (byte*)Picture1Data.Scan0;
for (int j = 0; j < height; ++j)
{
for (int i = 0; i < width; ++i)
{
PtrP1[2] = Layers[R, i, j];
PtrP1[1] = Layers[G, i, j];
PtrP1[0] = Layers[B, i, j];
PtrP1 += 3;
}
PtrP1 += Remain1;
}
}
Picture1.UnlockBits(Picture1Data);
Persze ehhez a projektben engedélyezni kell az unsafe használatát. A fenti kód egy 3 dimes tömböt pakol át a képbe. Hirtelen jobb pl-t nem találtam.(#1975) hunfatal: ez is bitről bitre hasonlít össze, szal ugyanott vagy.
-
fatal`
titán
válasz
kingabo #1973 üzenetére
Az nagyon lassú. Bár C#-ban nem próbálkoztam ilyennel, de delphiben azt lehetett csinálni, hogy mindkét képet betöltöttem egy MemoryStream-be és azoknak a tartalmát hasonlítottam össze (nem kell fájlba menteni).
A delphis kód így nézett ki:
function Osszehasonlit(B1, B2: TBitmap): Boolean;
var
S1, S2: TMemoryStream;
begin
S1 := TMemoryStream.Create;
S2 := TMemoryStream.Create;
try
B1.SaveToStream(S1);
B2.SaveToStream(S2);
Result := CompareMem(S1.Memory, S2.Memory, Max(S1.Size, S2.Size));
finally
S1.Free;
S2.Free;
end;
end;Gondolom van valami hasonló .NET-ben is. A ramot falja ez tény.
-
#90999040
törölt tag
válasz
kingabo #1973 üzenetére
Az az igazság, hogy én is csak "Memóriafaló" megoldással tudtam megoldani.
bool Imageegyezike(Image kep1, Image kep2)
{
System.IO.MemoryStream ms1 = new System.IO.MemoryStream();
kep1.Save(ms1, System.Drawing.Imaging.ImageFormat.Png);
System.IO.MemoryStream ms2 = new System.IO.MemoryStream();
kep2.Save(ms2, System.Drawing.Imaging.ImageFormat.Png);
int i = 0;
int j = 0;
System.IO.BinaryReader br1 = new System.IO.BinaryReader(ms1);
System.IO.BinaryReader br2 = new System.IO.BinaryReader(ms2);
br1.BaseStream.Seek(0, System.IO.SeekOrigin.Begin);
br1.BaseStream.Seek(0, System.IO.SeekOrigin.Current);
br2.BaseStream.Seek(0, System.IO.SeekOrigin.Begin);
br2.BaseStream.Seek(0, System.IO.SeekOrigin.Current);
try
{
do
{
i = br1.ReadByte(); j = br2.ReadByte();
if (i != j) break;
} while (i != -1 && j != -1);
}
catch (System.IO.IOException exc)
{
}
br1.Close();
br2.Close();
if (i != j)
return false;
else
return true;
}
Mondjuk nagyobb méretű képeknél a MemoryStream helyett lehet FileStream. Lassab, de kevésbé memóriafaló. -
#90999040
törölt tag
-
#90999040
törölt tag
válasz
kingabo #1967 üzenetére
Útvonalat valóban nem, de 2 Image-t össze tud hasonlítani, hogy pontosan egyeznek-e.
Persze kivétel például a "this.BackgroundImage", mert ide amikor betölti, akkor az eredeti képből vagy levág, vagy többszörözi, hogy kitöltse a méretet. Így ez sosem fog megegyezni az eredeti képpel.
Egyébként minden további nélkül meg lehet nézni, hogy 2 Image teljesen azonos-e. -
Alkimista
csendes tag
Sziasztok!
A feladatom a következő:
Két meglévő VS6 VB-ben íródott alkalmazást kell összegyúrnom C#-ban. Az egyik SQL SERVER, a másik meg ORACLE adatbázist használ.
Tehát egy olyan alkalmazást kell írnom, mely SQL SERVER és ORACLE adatbázisokkal is működik, az hogy éppen melyikhez kell csatlakozni a loginkor dől el. A két adatbázis táblaszerkezete, objektumai megegyeznek.Az alkalmazás feladatai leegyszerűsítve:
- Az adatbázis adatainak megjelenítése (ez lenne a Presentation layer)
- Az adatbázisban lévő táblákra CREATE, READ, UPDATE, DELETE (DAL)
- Az adatbázisban lévő tárolt eljárások meghívása (DAL)A kérdésem az lenne, hogy létezik vmi framework, ami elrejti előlem a két adatbázis közti különbségeket, és pl. a tárolt eljárások paraméterezései, vagy a connection provider választást az adott adatbázisnak megfelelően végzi el, vagy ezt nekem kell leprogramoznom?
remélem érthető voltam, előre is köszönöm a segítséget
-
Gregorius
őstag
Object.ReferenceEquals. Olyan nyelvi elem, ami garantáltan ezt csinálja csak VB.NET-ben van (Is operátor). A ==-t felül lehet definiálni (ugyanúgy, mint a sima Object.Equals-t), bár igen komoly szabályok vannak, hogy milyen körülmények között szabad és ha ezt nem tartjuk be, a fél framework elkezd rosszul működni az osztályunkon.
-
shev7
veterán
válasz
[pod]Diablo #1962 üzenetére
nem vagyok nagy .net magus, de .netben nincs olyan mint a javaban, hogy mikor ket objektumot hasonlitasz ==-szal akkor igazandibol csak a pointeruket hasonlitja? Ha nem ugyan oda mutatnak, akkor hamisra ertekelodik ki.
-
martonx
veterán
válasz
[pod]Diablo #1959 üzenetére
debug mit mutat?
-
bpx
őstag
válasz
Speederer #1943 üzenetére
látom már segítenek a többiek, de én kíváncsi voltam milyen rövidet tudok írni - legyen az akármilyen ronda is - úgyhogy itt egy elrettentő példa
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int[] bases = { 16, 10, 8, 2 };
List<TextBox> tb = new List<TextBox>();
private void Conv(object sender, KeyEventArgs e)
{
long l = Convert.ToInt64(((TextBox)sender).Text, bases[tb.IndexOf((TextBox)sender)]);
for (int i = 0; i < bases.Length; i++)
tb[i].Text = Convert.ToString(l, bases[i]);
}
private void Form1_Load(object sender, EventArgs e)
{
foreach (Control c in this.Controls)
if (c is TextBox) { c.KeyUp += Conv; tb.Add((TextBox)c); }
}
} -
[pod]Diablo
őstag
válasz
martonx #1957 üzenetére
Amikor Propertiesnel ramentem az image-re kidobott egy Select Resource ablakot ahol betudtam tallozni/importalni a kepet es ugy rakta be.Konkret hiba uzenetet nem dobott ki a program,csak nem csinalta meg amit kellet volna hogyha igaz a feltetel.
Most Igy megadtam a kepet a gombnak: A2.Image = Image.FromFile(@"C:\-school-\prog\sakk\feherparaszt.png",true);
es igy nez ki a feltetel:
if (A2.Image == Image.FromFile(@"C:\-school-\prog\sakk\feherparaszt.png",true))De igyse csinalja meg amit kene.
-
Speederer
senior tag
válasz
kingabo #1955 üzenetére
Akkor ki tudnád fejteni bővebben (kóddal) azt amire gondolsz? Bocs, csak még annyira nem vagyok otthon a témában, és ennyiből nem sikerült teljesen megértenem.
A switch tényleg szebb lenne, azt majd átírom.
Meg a key_down-ba is beleírom amit kell, de egyelőre elég volt maga a lényeg. -
martonx
veterán
válasz
[pod]Diablo #1956 üzenetére
A2. Image egy kép objektumot vár. Neked pedig a feherparaszt gondolom nem kép. A feherparasztból hozz létre egy image-et és azzal tedd egyenlővé A2-t.
Mondjuk ha legközelebb a hibaüzenetet is leírnád, azzal sokat segítenél. -
kingabo
őstag
válasz
Speederer #1952 üzenetére
Amit én mondtam az 8 sor, ha if nélkül írod meg akkor 4.
Az else ágban a for-ban a sok if helyett egy switch sokkal szebb lenne.
Talán a key down eseménynél meg tudod nézni, hogy melyik gombot nyomta le a véglény, ha ez pl bin-nál nem 0 vagy 1 akkor szólsz neki, hogy ejnye-bejnye.
-
-
Speederer
senior tag
válasz
kingabo #1948 üzenetére
Valami ilyesmit sikerült összehoznom:
public string atvalt(string honnan, int mit)
{
int mibe = 0;
TextBox[] tb = new TextBox[4];
tb[0] = textBox1;
tb[1] = textBox2;
tb[2] = textBox3;
tb[3] = textBox4;
if (honnan == "")
{
for (int i = 0; i < tb.Length; i++)
{
tb[i].Text = "0";
}
}
else
{
for (int i = 0; i < tb.Length; i++)
{
if (i == 0) { mibe = 10; }
else if (i == 1) { mibe = 2; }
else if (i == 2) { mibe = 8; }
else if (i == 3) { mibe = 16; }
tb[i].Text = Convert.ToString(Convert.ToInt32(honnan, mit), mibe);
}
}
return null;
}
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
atvalt((sender as TextBox).Text, 10);
}Így elég 1 sor minden textBox_KeyUp-hoz.
A tömb elemeit csak így felsorolással tudtam megadni, pedig valahogy így szerettem volna:
TextBox[] tb = new TextBox[textBox1, textBox2, textBox3, textBox4];Ez miért nem tetszik neki?
-
kingabo
őstag
Az if 2 ref összehasonlítása + 1 jmp, hogy a convert hogy van megcsinálva nem tudom, talán ellenőrzi, hogy egyezik-e a 2 számrendszer. Vagyis mindenképp kell összehasonlítás: vagy még a konvert elött "mi" írjuk meg, vagy a convert-ben az ms.
Bár tök mind1, ha nem keyup-ra kötve az átváltás, akkor több fölösleges munkát spórulunk meg.
-
kingabo
őstag
"Mod: Azt kihagytam hogy egy keydownt/keyupot rendelj az összes textboxhoz. Az aktuális
textboxra pedig (sender as TextBox)-ként tudsz hivatkozni."Szerintem ezen az irányon kell tovább menni. Utána az fv-ben minden konvertálás elött egy if, hogy a küldő textbox egyezik-e az éppen átváltandó számrendszerével, ha nem akkor kell konvertálni. Tehát pl ha a 10esbe írt, akkor a sender a 10-eshez rendelt textboxxal fog megegyezni az if-ben, a többiben nyilván nem, vagyis ott be is lép az if-en és át is váltja a számot a megfelelő számrendszerbe.
Remélem érthetően sikerült leírnom.
-
fatal`
titán
válasz
Speederer #1945 üzenetére
Akkor pakold tömbbe vagy listába őket (most nem tudom melyik paranccsal tudod az összes formon lévő textboxot egy listába tenni de biztosan lehetséges, msdn-en van leírás is sztem, vagy prog.hu-n is kereshetsz).
Utána meg keydownnál foreacheld végig a tömböt és a senderben lévő adatokat pakold be a többi mezőbe. Elég késő van, nem tudom, hogy ez így működni fog e és nincs előttem VS de egy próbát megér.
Mod: Azt kihagytam hogy egy keydownt/keyupot rendelj az összes textboxhoz. Az aktuális textboxra pedig (sender as TextBox)-ként tudsz hivatkozni.
-
Speederer
senior tag
Ha jól tudom ezzel azt spórolom meg, hogy a Convert-es dolgok helyett az atvalt szót írom. Ez sem rossz, de akkor pontosítanék azon amit szeretnék.
Szóval én úgy szeretném használni jelen kis programomat, hogy bármelyik textbox-ba ha írok vmit, akkor azt az értéket váltsa át a billentyű lenyomása pillanatában a többi számrendszerre.
Ugye van 4 textbox, a 10-es, 2-es, 8-as, 16-os számrendszerrel. Amit írtam előző hsz-ben kódot, az az 1-es textbox-hoz tartozik. De én azt szeretném, ha pl a 8-asba írok, akkor azt váltsa át a másik 3-ra. Na és ehhez ne kelljen nekem ezt a fent említett 3 sort leírnom mindig.
Pl. a 2-esé így nézne ki:
textBox1.Text = Convert.ToString(Convert.ToInt32(textBox2.Text), 2);
textBox3.Text = Convert.ToString(Convert.ToInt32(textBox2.Text), 8);
textBox4.Text = Convert.ToString(Convert.ToInt32(textBox2.Text), 16);a 8-asé (textbox3-é) pedig így:
textBox2.Text = Convert.ToString(Convert.ToInt32(textBox3.Text), 2);
textBox1.Text = Convert.ToString(Convert.ToInt32(textBox3.Text), 8);
textBox4.Text = Convert.ToString(Convert.ToInt32(textBox3.Text), 16);Szóval ezeket szeretném vhogy lespórolni.
Gondolok itt olyasmire, hogy lekérdezni, hogy melyik textbox-ba írok éppen, azt berakni a ToInt32 után, és kivenni azt a sort, amiben az aktuális_textbox.text = ... van
Érthető azért vmennyire?Lehet már nem vagyok a legfittebb... bocsi!
-
fatal`
titán
válasz
Speederer #1943 üzenetére
Írj rá egy függvényt úgyhogy a változó paramétereket átadod neki mindig.
pl.
private String atvalt(String honnan, int szamrendszer)
{
return Convert.ToString(Convert.ToInt32(honnan), szamrendszer);
}ezután meg kívülről meghívod:
textBox2.Text = atvalt(textBox1.Text, 2)
stb.
Persze az is lehet hogy teljesen félreértettem mit szeretnél
Esetleg kombinálhatod, hogy a textbox1.text az fix és nem adod át paraméterenként, de szerintem úgy csúnyább a kód és ezt később is felhasználhatod, ha mégis máshonnan kell váltani
-
Speederer
senior tag
Van 1 nagyon egyszerű kis program, ami a számrendszerek közötti átváltást megoldja. Vagyis van 4 TextBox, a textBox1_KeyUp-ba pedig beleírtam, hogy:
textBox2.Text = Convert.ToString(Convert.ToInt32(textBox1.Text), 2);
textBox3.Text = Convert.ToString(Convert.ToInt32(textBox1.Text), 8);
textBox4.Text = Convert.ToString(Convert.ToInt32(textBox1.Text), 16);Ez szépen meg is csinálja amit szeretnék, de azt szeretném minél rövidebb programkóddal megoldani, hogy ne kelljen szinte mindig ugyanazt a kódot minden textbox keyup-jába beleírni, mivel a 3 sornyi kódból mindig csak néhány karakter változik.
Ez ugye ekkora kis programnál nem jelent sokat, de ha lenne mondjuk hasonló szisztémával 50 textbox-om, akkor az elég cikis lenne már.
Van erre vmi gyors módszer? -
martonx
veterán
ehe-ehe. Ehhez mondjuk tudnod kellene az IP-ket. Aztán vagy a Visual Studio beépített webszerverével kell futtatnod a WCF-et, vagy IIS Express-el, vagy IIS-el.
Az eddigi szerencsétlenkedéseidet elnézve én az első verziót javaslom. Ekkor az éppen aktuális port számot is tudnod kell majd az IP mellé. -
Mad_nv
csendes tag
Megcsináltam a WCF progimat a segítségeddel, hogy konfig file nélkül is működjön, most már csak az a problémám, hogy csak a localhoston működik a program. Van router itthon, szóval másik géppel ki tudnám próbálni a hálózaton belül, de nem tudom, hogy tudnám elérni a saját gépemet egy másikról. Esetleg ebben tudna valaki segíteni?
-
#90999040
törölt tag
válasz
prog1000 #1938 üzenetére
abszolut kezdő vagyok
Ez pontosan mit jelent? Egy működő projectet sem készítettél még(pl. "Helló világ!"), sem consoleapplication-be, sem windowsapplication-be? Vagy ezen azért már túljutottál? Ez az első nyelv, amit tanulsz, vagy más nyelvben van tapasztalatod, csak a szintaktikával van gondod. Azért ezekről írhatnál valamit, mert így szerintem csak tapogatózni tudunk, de igazából segíteni nem -
prog1000
csendes tag
Sziasztok!
Tudnátok segíteni nekem C#-ból? Konkrét feladataim vannak és segíteni kellene megoldani őket.... vagy privátban jelezze aki tudna segíteni!
Köszi!
-
Mad_nv
csendes tag
Hello!
Múltkor már írtam a WCF-es problémámmal kapcsolatban, de azt már sikerült megoldanom, mert kaptam segítséget itt a fórumon. C#-ban írom a programot. Most már csak az lenne a kérdésem, hogy hogyan tudom azt megoldani, hogy a kliens egy (futás közben) megadott IP címre kapcsolódjon (most csak localhoston belül működik)? Az AddServiceEndpoint-ban localhost van megadva, de hiába írom át azt a címet, mert a Visual Studioval először le kell generáltatni a config file-t (XML fájl) amibe a kódban leírt IP cím lesz beírva. Namost, ha én nem kódban adom meg, hanem bekérem a felhasználótól, hogy miylen IP-re akar kapcsolódni, akkor ez a módszer megbukott. Google-ben rákerestem, de nem nagyon találtam semmi használhatót. -
j0k3r!
őstag
válasz
Vasinger! #1921 üzenetére
<szvsz>
most lehet, hogy en vagyok a helikopter, de mi ertelme volt szamolni a megadott neveket (hossz), ha a vegen a for ciklust igy szervezi:
for(hossz=0; hossz<50; hossz++)
igy fuggetlenul attol, hogy 2, 12, 49 nevet adtal meg mindig vegig fog iteralni a tombon.
logikusabb lenne:
for(int j = 0; j < hossz; j++)
aztan a cikluson belul, ahol hossz van, ahelyett j-t irni
nomeg a while(hossz<50) helyett az itt megbeszelt feltetelt irni, mivel ures string eseten ugyanugy belep a ciklusba, es azon belul ertekeli ki, hogy ures-e. (az itt megbeszelt megoldas pedig mar a ciklusba lepes elott kiertekeli, hogy ures-e)
a sok ilyen kis 'hiba' korrigalasaval nagyobb feladatoknal jelentos cpu idot lehet sporolni.
</szvsz> -
Frigo
őstag
Hogy tudok kört rajzolni ,úgy hogy csak a középpontját és a sugarát ismerem ?DrawEllipse nem jó.
-
Lakers
tag
Sziasztok!
Van néhány kódrészlet, amit nem értek, és ahhoz kérnék segítséget, hogy ha valaki leírná, lépésről, lépésre, hogy mit miért csinál a program:
Kódrészletek:
class Ló
{
public string Name { get; set; }
public DateTime Born { get; private set; }
public int? Price { get; set; }
public Ló(string name, DateTime born)
{
Name = name;
Born = born;
Awards = new List<Award>();
}
public List<Award> Awards { get; set; }
public event EventHandler<LóversenyEventArgs> Verseny;
public bool Versenyez(string versenynév)
{
if (Verseny != null)
{
LóversenyEventArgs lvea =new LóversenyEventArgs(versenynév);
Verseny(this, lvea);
}
Random r = new Random();
int i = r.Next(0, 10);
//return i < 2 ? true : false;
return i < 2;
}
public override string ToString()
{
return String.Format("Név: {0}, született: {1}, ár: {2}",
Name, Born, Price == null ? "N/A" : Price.ToString());
//price ?? 0
}
}
class Award
{
public string Name { get; set; }
public int Prize { get; private set; }
public Award(string name, int prize)
{
Name = name;
Prize = prize;
}
}
class Függő
{
public void FelrakjaAzÖsszesPénzét(object sender, LóversenyEventArgs e)
{
Console.WriteLine("FUSS, {0}, FUSS!!!\nVerseny: {1}",
((Ló)sender).Name.ToUpper(), e.VersenyNév);
}
class LóversenyEventArgs : EventArgs
{
public string VersenyNév { get; private set; }
public LóversenyEventArgs(string vn)
{
VersenyNév = vn;
}
}
class Program
{
static void Main(string[] args)
{
List<Ló> lovak = new List<Ló>
{
new Ló("Kincsem", DateTime.Now) {Price =2000},
new Ló("Alma", DateTime.Now) {Price = 11000},
new Ló("Béka", DateTime.Now)
};
Függő f = new Függő();
foreach (Ló l in lovak)
l.Verseny += f.FelrakjaAzÖsszesPénzét;
foreach (Ló l in lovak)
{
if (l.Versenyez("Négybalpata"))
{
Award a = new Award("Négybalpata", 1);
l.Awards.Add(a);
Console.WriteLine("A díjat nyerte: " + l.ToString());
}
else
Console.WriteLine("Ma is hasznavehetetlen: " + l.ToString());
}
...Amit nem értek a következő részlet:
Függő f = new Függő();
foreach (Ló l in lovak)
l.Verseny += f.FelrakjaAzÖsszesPénzét;foreach (Ló l in lovak)
{
if (l.Versenyez("Négybalpata"))
{
Award a = new Award("Négybalpata", 1);
l.Awards.Add(a);
Console.WriteLine("A díjat nyerte: " + l.ToString());
}
else
Console.WriteLine("Ma is hasznavehetetlen: " + l.ToString());
}Itt is elsősorban az if(l.Versenyez("Négybalpata")) résztől homályos nekem.
De még az előtte lévő f.FelrakjaAzÖsszesPénzét delegate rész sem tiszta.A segítségeteket előre is köszönöm! Szájbarágós magyarázatot előnyben részesítem
-
#90999040
törölt tag
válasz
martonx #1925 üzenetére
Eddig én ezt használtam, de amit Te ajánlottál, úgy látom, mintha részletesebb lenne(bár még csak éppen belenéztem).
Az alapokat azonban mindegyik tartalmazza. -
kingabo
őstag
válasz
Vasinger! #1921 üzenetére
"Félre értés ne essék. Nem azért nem használtam a Te módszeredet mert nem jobb, vagy én nem akartam volna"
Ok, csak láttad Te is mennyi elgépelés volt egy ekkora progiban is és utána mennyi problémát okozott."hanem mert a tanárnak feltűnt volna és nem tetszett volna, ha nem az ő módszereit használtam volna."
Ez az ember aztán igazán tud programozni!Nem a tanárnak programozol, hanem magadnak. (sztem)
Hossz = 50 helyett, akkor már mehetett volna break is.A substringes hack-elés meg lassú és gáz. Ráadásul csak az első névnapost köszönti.
Szerintem az itteni megoldások szebbek voltak. -
Lakers
tag
válasz
Jester01 #1920 üzenetére
Köszönöm Jester,
Akkor mely könyveket ajánlod?
Egy kellene C/C++ nyelvre (elsősorban villamosmérnököknek, műszaki feladatok megvalósítása)
És egy C# amiből esetleg .Net alapjai.Így utólag Bruce Eckel - Thinking in C++ könyv-e tetszik átnézésre, mert sok benne a példakód
Ez a kód is egy könyvben volt...(Címe: Többnyelvű programozástechnika)
-
Vasinger!
nagyúr
válasz
kingabo #1916 üzenetére
Félre értés ne essék. Nem azért nem használtam a Te módszeredet mert nem jobb, vagy én nem akartam volna, hanem mert a tanárnak feltűnt volna és nem tetszett volna, ha nem az ő módszereit használtam volna.
Egyébként itt a megoldás amit a tanár várt volna. 1 dimenziós tömbök és indexof&substring.....
Console.WriteLine("Kérem a neveket az üres string végjelig: ");
string[]nevek = new String[50];
int hossz = 0;
string nev;
while(hossz<50)
{
nev = Console.ReadLine();
if(nev != "")
{
nevek[hossz] = nev;
hossz ++;
}
else
{
hossz = 50;
}
}
Console.WriteLine("Névnap: ");
string nevnap = Console.ReadLine();
Console.WriteLine("");
for(hossz=0; hossz<50; hossz++)
{
if(nevek[hossz] != null)
{
int i = nevek[hossz].IndexOf(" ");
string a = nevek[hossz].Substring(i+1);
if(a == nevnap)
{
Console.WriteLine(nevek[hossz]);
}
}
else
{
hossz = 50;
}
}
Console.ReadKey(); -
Jester01
veterán
-
Lakers
tag
Sziasztok!
A feladat a következő: Egy olyan progi írása, amely egy árú kezdőbetűiből megkeresi az adott árút és kiírja annak árát, de csak akkor ha egyértelmű a találat.
Néhány kódrészletet nem értek:
while (j<=N-1 && (A[j].Név.Length < keresett.Length || A[j].Név.Substring(0,keresett.Length) != keresett || i==j))
itt az i == j-t nem értem, hogy az miért kell.talalt2 = (j <= N - 1);
if (!talalt2)
{
Console.WriteLine("Keresett Áru ára:" + A(i).Ár);
}Illetve a talált és a talált2 az pontosan jelent? amikor (i<=N-1) Én először megtalált index számra tippeltem... de nem hiszem, hogy az lenne.
Ha nekem ezt eltudnátok magyarázni, hogy pontosan, mit miért csinál a kódrészlet, akkor megalapozátok a programozói pályámat
Előre is köszönöm a segítséget
Itt a kód:Console.WriteLine("Keresett Áru nevének kezdőbetűi:");
keresett = Console.ReadLine();
i = 0;
while (i<=N-1 && (A[i].Név.Length < keresett.Length || A[i].Név.Substring(0,keresett.Length) !=keresett ))
{
i++;
}
talalt = (i <= N - 1);
if (talalt)
{
j = 0;
while (j<=N-1 && (A[j].Név.Length < keresett.Length || A[j].Név.Substring(0,keresett.Length) != keresett || i==j))
{
j++;
}
talalt2 = (j <= N - 1);
if (!talalt2)
{
Console.WriteLine("Keresett Áru ára:" + A[i].Ár);
}
else
{
Console.WriteLine("Nem egyértelmű");
}
}
else
{
Console.WriteLine("Nincs ilyen árú!");
} -
shev7
veterán
válasz
[pod]Diablo #1917 üzenetére
korabban mar javasoltak neked a fiddler nevu programot. A http forgalmat monitorozva meglathatod mi a kulonbseg a bongeszo altal kezdemenyezett belepes es a programod altal kezdemenyezett belepes kozott
-
[pod]Diablo
őstag
válasz
[pod]Diablo #1891 üzenetére
Erre valaki tud valami megoldast?
-
kingabo
őstag
válasz
Vasinger! #1908 üzenetére
"string[,] nevek = new string [49, 2]
...
while (név != "" && hossz <= 50)
Látod ezért mondtam, hogy használj konstanst erre, de nem...Egyébként ennyi lenne az egész:
const int MaxMeret = 49;
string[,] nevek = new string [MaxMeret , 2]
...
while (!string.IsNullOrEmpty(név) && hossz < MaxMeret )Ráadásul az intellisense fel is ajánlja és ha 49 helyett csak 10 név kell, akkor 1 helyen átírod és kész... Na mind1, ha inkább szenvedsz
szerk: D'oh kódban nem megy a félkövér
-
Vasinger!
nagyúr
válasz
#90999040 #1913 üzenetére
Ezt szerencsére nem tartalmazta a feladat előírása. Így a feladat kiírásának tökéletesen megfelel ez a kód.
Természetesen lehetne még bevinni további feltételeket, meg nagybetűsítéseket, szóköztelenítéseket és egyéb darabolást, de fölöslegesen most nem szenvedek vele.
-
j0k3r!
őstag
válasz
Vasinger! #1908 üzenetére
csak siman: hossz++; kell
ez a feltetel nalam mukodik: while (!string.IsNullOrEmpty(név) && hossz < 49)azert kell 49, mert : vegyunk egy kisebb peldat, lehessen csak max. 3 nevet bekerni
while (!string.IsNullOrEmpty(név) && hossz < 2)
1. futas: hossz = 0 ->beirjuk az 1. nevet // ez a ciklus elotti bekeres
2. futas: hossz = 0 ->beirjuk a 2. nevet -> hossz++ -> hossz = 1 lesz // hossz <2 igaz
3. futas: hossz = 1 ->beirjuk a 3. nevet -> hossz++ -> hossz = 2 lesz // hossz <2 igaz
4. futas: hossz = 2 -> hossz <2 hamis -> leallunk -
Vasinger!
nagyúr
-
j0k3r!
őstag
válasz
Vasinger! #1905 üzenetére
probaljuk meg mas oldalrol megkozeliteni a dolgot. milyen feltetel szukseges ahhoz, hogy belepj a ciklusba?
1. nem lehet ures a string
2. nem lehet az aktualis elemszam nagyobb, mint 49 (mivel a hossz-t 0-val inicializaltad)ha a ketto kozul akar csak az egyik teljesul, akkor mar nem szabad tovabbi nevet bekerni, tehat mind a ket feltetelnek kell teljesulnie, azaz ES (&&) fog kelleni, tehat ha
nem ures a string ES kisebb az aktualis elemszam, mint 49, akkor lephetunk be a ciklusba.szerk: megeloztek
-
#90999040
törölt tag
válasz
Vasinger! #1905 üzenetére
A #1884 kérdésedben ezt írtad:
Addig kérünk be stringeket/neveket, ímg üres string nem lesz vagy elérjük az 50-et.Ezt próbáld szem előtt tartani. A konkrét feladatra lefordítva a ciklus addig tart:
1.: amíg nem üres stringet ütünk be
ÉS
2.: 50-nél kevesebbszer kértünk be stringetÍgy bármelyik feltétel "HAMIS"-sá válik, akkor a ciklus befejeződik.
Miért kellene VAGY-ot használni??
-
#90999040
törölt tag
válasz
Vasinger! #1903 üzenetére
Szintaktikai tudás bővítéséhez egy link
De a probléma amint látom nem csak a szintaktika hiányából áll. Próbáld átgondolni, hogy mi a különbség az egyes logikai elemek között, és ebben a példában melyiket kellene használni és miért?
-
#90999040
törölt tag
válasz
Vasinger! #1899 üzenetére
Ezzel addig tudok beírni neveket, amekkora méretű tömböt hozok létre, ha eléri a megadott számot lefagy, nem pedig leáll.
Ez a gondolkodás eddig jó.
Most gondolatban cseréld ki a 0-t 49-re. Akkor nem fagy le a program? És ha lefagy, akkor miért? Nem a rossz feltétel miatt?
-
Vasinger!
nagyúr
válasz
Szabesz #1900 üzenetére
Kezdem kapizsgálni. Szóval && kéne használni || helyett? Mert ha igen akkor az a vicc, hogy a legelején így kezdtem el
A == mi a probléma? Miért nem jó?
Most, hogy kicseréltem && -re, akkor az első után kilép a ciklusból akármit is írok be kilépési feltételnek illetve tömb méretnek.
Ú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!
- Azonnali fáradt gőzös kérdések órája
- Apple asztali gépek
- Milyen légkondit a lakásba?
- Úgy tér vissza a Commodore 64, ahogy titkon mindenki várja
- Otthoni hálózat és internet megosztás
- Intel Core Ultra 3, Core Ultra 5, Ultra 7, Ultra 9 "Arrow Lake" LGA 1851
- Mazda topik
- Big in Japan - japán játékokról, kötetlenül
- Székesfehérvár és környéke adok-veszek-beszélgetek
- Milyen okostelefont vegyek?
- További aktív témák...
- Xiaomi Mi Robot Vacuum Mop Essential robotporszívó feltörlő 2db 1999 Ft
- Konica Bizhub C220 - A3 fénymásoló
- Bomba ár! Lenovo X1 Yoga 1st - i7-6G I 8GB I 256SSD I 14" WQHD I HDMI I W10 I CAM I Garancia!
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7800X3D 32/64GB RAM RTX 5080 16GB GAMER PC termékbeszámítással
- Apple iPhone 14 128GB , Kártyafüggetlen
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest