Új hozzászólás Aktív témák
-
ArchElf
addikt
válasz
ArchElf #1640 üzenetére
De összedobtam egy egyszerűt delegate-tel is
Ez a nem prímeket veszi ki egy int listából. Nem nagy szám, de a lényeg asszem látható...
class Primszam
{
static void Main(string[] args)
{
List<int> prim = new List<int>();
for (int ix = 1; ix <= 100; ix++)
prim.Add(ix);
prim.RemoveAll(ix => nemprim(ix));
prim.ForEach(ix => Console.WriteLine(ix));
}
private static bool nemprim(int ix)
{
int ih = Convert.ToInt32(Math.Sqrt(ix));
for (int ir = 2; ir <= ih; ir++)
if (ix % ir == 0)
return true;
return false;
}
}AE
-
ArchElf
addikt
Nem egyszerűen kitörlöm az első listából, hanem, mivel a lista elemei nem törölhetők közvetlenül a foreach ciklusban, így az elemeket egyesével végignézem, hogy törlendők-e, ha igen hozzáadom egy másik listához (törlendő elemek listája). Ekkor az első listából nem tudok még törölni (mert invalid lesz az iterátor).
A második ciklusban a törlendő elemek listáján lépkedek végig. Ekkor minden elemre kiadom az elsőlista.Remove(ojjektum) parancsot (ahol az ojjektum a törlendő elemek listájának aktuális eleme). Mivel most a második lista iterátorát használom, így nyugodtan eleht az első listából törölni. A második lista végigjátszása után nyugodtan lehet magát a második listát is törölni (mivel már nincs rá szükség).
Még egy apróság: amennyiben több szálon párhuzamosan is elérjük a listát a futás alatt (szükséges lehet bizonyos esetekben), úgy azt az egész cécó alatt lockolni kell.Remélem érthető volt.
Még egy. Ha a listaelemeket nem lehet rendesen egymáshoz hasonlítani akkor lehet index alapján is törölni, ez viszont macerásabb.
Ebben az esetben egy fordított for ciklussal célszerű megcsinálni, mert így az indexek nem keverednek össze:
for(ix = lista.Length-1; ix >= 0; ix--)
{
if(törlendő(lista[ix]))
lista.RemoveAt(ix);
}De láttam ilyet is a neten:
foreach(object o in new List<object>(lista))
{
if (törlendő(o))
lista.Remove(o);
}AE
-
ArchElf
addikt
Én általában összegyűjtöm egy listába a törlendő elemeket, és azon végigzongorázva törlöm az elsőből. Pszeudokód:
// Lista -> amiből törölni akarunk
List<object> delO = new List<object>();
foreach (object o in Lista)
{
if (Torolhető(o))
delO.Add(o);
}
foreach (object o in delO)
{
Lista.Remove(o);
}
delO = null;AE
-
ArchElf
addikt
Bocs
Write-only üzemmódban voltam - mint általában; ráadásul rendesen túl is bonyolítottam...
A példa minősítésével egyetértek... Nálunk a főiskolán a tanár legnagyobb (saját) programozási eredménye az volt, hogy gombnyomásra át tudta színezni egy textbox hátterét. Látnod kellett volna az arcát, hogy öntötte el a büszkeség komoly műve láttán.
Nem is - egyszer könyvből kimásolt egy drag-and-drop példát (kijelölt elemek áthúzása egyik listboxból a másikba) - igaz megértenie nem sikerült hogy működik, mert egész órán hegesztette, de többet nem tudott kihozni belőle.A másik, amin mosolyogni szoktam, ha eszembe jut(tatják): könyvből leggyorsabban 24 óra alatt lehet megtanulni programozni. Nálunk ez az egyetemen sikerült 20 óra alatt. Olyan sikeresen, hogy miután "megtanultunk" c-ben 20 óra alatt programozni mindenki sikeresen beadott egy tetszőleges párhuzamosítható probléma többszálas megoldását c-ben linux alá (IPC) megvalósítva...
Asszem egy emberről tudok a mi évfolyamunkban, akinek ez saját munkája volt.
AE
-
ArchElf
addikt
válasz
WonderCSabo #1603 üzenetére
Lehet, még classnév is lehet akármi unicode. Én amúgy nem szoktam használni, csak ilyen hülye példáknál. Sztenderd angol, azt kakukk...
AE
-
ArchElf
addikt
Ennyi erővel a substring sem volt benne a kiírásban
Mondjuk jó kis feladat lehet substring és Convert nélkül, csak IndexOf-al is
try/catch-et bele sem mertem raknifor lol:
static void Main(string[] args)
{
double átlag = 0;
int szám = 0;
int index = 0;
int újindex = 0;
int számláló = 0;
string számok = "12345";
Console.Write("Kérem adjon meg 3 számot 1-5 között, vesszővel elválasztva: ");
string számsor = Console.ReadLine();
//INDEXOF
while (számláló < 3)
{
újindex = számsor.IndexOf(',', index);
if (újindex < 0 && számláló != 2)
{
Console.Error.WriteLine("Nincs elég szám.");
return;
}
if ((újindex - index != 1) && számláló != 2)
{
Console.Error.WriteLine("Helytelen adatok");
return;
}
szám = számok.IndexOf(számsor[index]) + 1;
if (szám < 1 || szám > 5)
{
Console.Error.WriteLine("Helytelen adatok");
return;
}
átlag += szám;
index = újindex + 1;
számláló++;
}
Console.WriteLine("Az átlag: {0:0.0}", átlag / 3);
}AE
-
ArchElf
addikt
válasz
Vasinger! #1599 üzenetére
Nem kommenteltem, de szerintem a magyar nevű változók elég beszédesek: PasteBin link
Persze sokkal egyszerűbben is lehetett volna, de szerettem volna úgy megírni, hogy minél több - azért lehetőleg kevéssé felesleges - elem legyen benne.Amúgy splittel tényleg egyszerűbb, nincs az a felesleges ciklusozás:
string[] számok_s = számsor.Split(',');
if (számok_s.Length != SZÁMOK_SZÁMA)
{
Console.Error.WriteLine("A beadott számok száma nem {0}.", SZÁMOK_SZÁMA);
return;
}
foreach (string szám_s in számok_s)
{
if (!int.TryParse(szám_s.Trim(), out számok[számláló]))
{
Console.Error.WriteLine("A {0}. helyen nem szám van.", számláló);
return;
}
else if (számok[számláló] < 1 || számok[számláló] > 5)
{
Console.Error.WriteLine("A {0}. helyen a szám nem 1-5 között van.", számláló);
return;
}
}AE
-
ArchElf
addikt
Meghívja az eseményt? Ha nem akkor lehet, hogy nem adtad hozzá az eseménykezelőt...
bs1.CurrentItemChanged += new System.EventHandler(bs1_CurrentItemChanged);Amúgy a szövegdobozoknál:
....Enable = False; helyett legyenek inkább ....ReadOnly = True;-k, úgy kijelölhető benne a szöveg, de nem szerkeszthető.Ja, és használj inkább breakpointokat a debugolásra, ne ilyen
textBox5.Text = "aasdasdasdsa"; textboxokatAE
-
ArchElf
addikt
Én általában leprogramozom a dolgot a System.Data.SqlClient-en keresztül.
// saját függvény, de akár fixen is meg lehet adnistring
cs = GetConnectionString("testConnectionString");
using(SqlConnection con = new SqlConnection())
{
con.ConnectionString = cs;
con.Open();
using (SqlCommand cmd = con.CreateCommand())
{
//Beállítani, hogy a Command SP legyen
cmd.CommandType = CommandType.StoredProcedure;
//SP neve
cmd.CommandText = "LastSessionPage";
//Paraméterek hozzáadása
cmd.Parameters.Add(new SqlParameter("SID", SessionID));
//Return Value (vagy akár out) is paraméterben használandó
SqlParameter pret = new SqlParameter("RETURN_VALUE", SqlDbType.Int);
pret.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(pret);
cmd.ExecuteNonQuery();
rval = Convert.ToInt32(pret.Value);
}
}Ha datasetet ad vissza a SP, akkor nyugodtan lehet ExecuteReaderrel indítani a cmd-t, és SqlDataReaderrel olvasni. A fenti esetben csak a "poén" kedvéért paraméterben jön vissza a visszatérési érték, ha select-tel egy értéket ad ki (aggregűációnál, mint pl itt), akkor nem kell vacakolni a Return paraméterrel, simán ExecuteScalar-ral kell futtatni a parancsot.
AE
-
ArchElf
addikt
Két BindingSource kell, az első a BindingNavigator-nak (és a TextBox-oknak), a második pedig a GridView-nak. Az első BindingSource CurrentItemChanged eseményét pedig ehhez hasonlóan kell kitölteni (ha adatbázisról van szó):
private void bindingSource1_CurrentItemChanged(object sender, EventArgs e)
{
DataRowView drv = bindingSource1.Current as DataRowView;
bindingSource2.Filter = string.Format("KategoriaAzonosito = {0}", drv.Row["KategoriaAzonosito"].ToString());
}AE
-
ArchElf
addikt
Nevet regex-el könnyebb szétszedni, ha feltételezzük, hogy az összes név nagybetűvel kezdődik:
Regex:
Kov ács Lá szl ó -> Kovács László
Ád ámk a Ö dö n -> Ádámka Ödön
Sc hä ffer Brü n hil da Kl ár a -> Schäffer Brünhilda KláraKód: http://pastebin.com/FT9qQg3m
AE
-
ArchElf
addikt
Túl vagyok az első delegate használaton... még mindig cseng a fülem tőle. Úgy tűnik szoknom kell még ezt az iramot.
Ja amúgy .NET 2.0 alá csináltam list->group készítőt (List<T> -> Dictionary<object,List<T>> bármelyik member alapján).AE
-
ArchElf
addikt
válasz
wasyster #1529 üzenetére
Nagyjából azt kell csinálni, amit 2-3 hozzászólással előbb válaszoltam, csak helyettesítsd be a Form2-t UserControl-ra... Esetleg ha a UserControl közvetlenül a form-on van, akkor az UserConrol-on a this.Parent-tel is el tudod érni...
AE
-
ArchElf
addikt
Install readme:
2.1.20 Cannot create any Visual Studio project if MSXML6 is not installed
If MSXML6 is not installed, the initial profile selection dialog box may not be displayed, and when projects are created, error messages that resemble this one may appear:"Error writing the project file. Class not registered."
To resolve this issue:
Install MSXML6 from MSDN: http://www.microsoft.com/downloads/details.aspx?FamilyID=993C0BCF-3BCF-4009-BE21-27E85E1857B1&displaylang=en.
Restart Visual Studio.AE
-
ArchElf
addikt
Gondolom azért nem látod, mert Form1.HatterKep-el akarsz hivatkozni rá - viszont ezekre az elemekre csak példányosítva lehet hivatkozni. Legegyszerűbb, ha a form2-nek átadod a form1 objektumát (form1-ben this technikai változóban van) és azt átadod a form2-nek példányosítás után. pl:
public class Form1...
{
...
private void fn()
{
Form2 form2 = new Form2();
form2.f1 = this;
form2.Show();
}
...
}
...
public class Form2...
{
...
public Form1 f1;
...
}
így a Form2-n tudsz hivatkozni a Form1 példányára az f1 változón keresztül...Remélem érthető voltam...
AE
-
ArchElf
addikt
De. c#-ban ugyanez megvan (throw; -val tovább tudod dobni az exception-t, mintha 'mise történt volna). Az exception filter csak egy plusz funkció - olyan, mintha a c#-ben a catch első sora így nézne ki:
catch (Exception ex)
{
if(!IsExceptionFilter(ex))
throw;
// exception további része
}AE
-
ArchElf
addikt
válasz
ArchElf #1489 üzenetére
És a using + IDisposable sem megoldás:
using(new ImpersonationScope(domain, user, password))
{
}
// Megfelel ennek
ImpersonationScope i = new ImpersonationScope(domain, user, password);
//1. probléma
try
{
{
}
}
//2. probléma
finally
{
i.Dispose();
}
Két helyen is lehet vele gond:
1. Ritka esetben - de kihasználható módon (pl thread.Abort()) - lehet kivételt generálni az impersonation és a try között
2. Mivel nincs catch blokk, így a hívó rutin le tudja kezelni a futtatott kód esetleges hibáját, amit nem kapott el egy catch-el, mielőtt, még az i.Dispose() lefutna.AE
-
ArchElf
addikt
Tryfinally nem elég - ha nem szabad megbíznod a meghívó környezetben:
http://blogs.msdn.com/b/ericlippert/archive/2004/09/01/224064.aspx
http://blogs.msdn.com/b/shawnfa/archive/0001/01/01/400749.aspxAE
-
ArchElf
addikt
válasz
mészi67 #1474 üzenetére
Semmi gond.
Dinamikus kezelésnél csak az alényeg, hogy nem a felületen keresztül csinálsz új kontrolt, hanem futásidőben. Ilyenkor neked kell (kódból) beállítani az összes fontos tulajdonságot (és az eseménykezelőket is).
Példa textbox-ok generálására. Csinálj egy formot, rajta két default gombot a bal felső sarokban. A form kódja legyen a következő.
http://pastebin.com/MQ9vrdVLEzer éve nem kódoltam VB-ben (élesben), nem ment könnyen az átállás...
mod1: Ja, és hanyagoltam a hibaellenőrzések nagy részét a rövidebb/tömörebb kód érdekében.
mod2: Este átküldöm (c#)-ban, hogy mit csináltam. Amúgy mivel előre beállított képekkel dolgozol (resource), így nincs értelme mentegetni a képeket, csak a resource-okra hivatkozni. De majd az átküldött kódból jobban megérted... Sajna VS.2008-ban készült a kód, úgyhogy a kódfájlokat egyesével kell majd beilleszteni egy új 2005-ben létrehozott projektbe - az egész projektet nem fogod tudni megnyitni vele.AE
-
ArchElf
addikt
válasz
mészi67 #1472 üzenetére
Mire összedobtam egy hasonlót láttam, hogy neked csak VS2005-öd van (és ráadásul VB-ben nyomod, nem is c#-ban), mindenesetre, ha érdekel át tudom küldeni, mit dobtam össze...
Dinamikus kezeléssel arra gondoltam, hogy ne vegyél fel n*10 vezérlőt, hanem generáld le őket futásidőben.
AE
-
ArchElf
addikt
válasz
mészi67 #1470 üzenetére
Huhh, van egy pár darab picturebox
Milyen fejlesztői környezetben dolgozol? Nálam VS2K8 van, abból tudok valami mintapéldát kreálni. Amúgy nem szép már ilyen menyiségben a kódban tartani ezeket a dobozokat, célszerű volna ezeket (meg az eseményeiket) dinamikusan kezelni...
Amúgy miért lehet huzogatni a pictureboxokat? Miért van a drag-and-drop engedélyezve?AE
-
ArchElf
addikt
válasz
mészi67 #1465 üzenetére
Mitől változik meg a kép?
Amúgy célszerű átmeneti változóba betölteni ezeket, csak kicsit több kódot igényel, ahogy írtad: Image-be tölteni, Image-et hozzáadni a picturebox-hoz, máshol lekérni és ott elmenteni...
Miért kell BackgroundImage?Amúgy kipróbáltam, nekem így gond nélkül megy (mondjuk nem VB.NET, hanem C#.NET), de nem szabad ilyen különbségnek legyen - mivel ugyanannak a dll-nek ugyanazon függvényeit használja mind a VB, mind a C#...
AE
-
ArchElf
addikt
Jogosultság probléma lehet (pl úgy van beállítva, hogy csak a felhasználónak van hozzá joga, az adminisztrátoroknak nincs), de lehet, hogy titkosítva van, és nem vagy hozzáadva jogosultakhoz. Az is lehet, hogy valami rendszerfolymat fogja a könyvtárat.
Kérd le előbb a könyvtár jogosultságio listáját. Ja és adminként korlátozott, vagy tényleges admin módban futtatod a törlést (UAC)?
Ha semmi nem megy, próbáld meg WMI-vel törölni a fájlokat (az asszem SYSTEM jogokkal igyekszik csinálni).AE
-
ArchElf
addikt
Hálózati scannert írtam ezzel a technikával, meg a szakdolgozatomban egy behaviour monitoring rendszert csináltam, és az is többszálú volt (több log-forrást kellett egymás mellett feldolgoznia). Igazából ott egy csomó mindent kipróbáltam a multitherading mellett:
- teszt esetek, teszt források, többszálúság tesztelése, streszteszt, stb.
- dll futás közbeni betöltés, Interface alapú osztály használatAE
-
ArchElf
addikt
válasz
FehérHolló #1422 üzenetére
BGW hogy csinálja meg?
Amúgy nekem ilyen típusú multithreading alkalmazásaim szoktak lenni:
Form -> BGW (szálvezérlésre) -> csomó Thread (dolgozó szálak)
Így viszonylag könnyű szétválasztani a megjelenítést a dolgozó szálaktól, nem oda integrálod be a szálvezérlést (másrészt akár form nélkül is tud futni a program).AE
-
ArchElf
addikt
válasz
FehérHolló #1418 üzenetére
Ehh, konzol... mod...
AE
-
ArchElf
addikt
A probléma az, hogy ha valami bugfix (semmi változás a publikus funkciók felépítése) van az egyik projekt dll-ben, akkor az egész solution-t újra kell fordítanom. Hiába fordítom csak újra egyedül a DLL-t és cserélem ki a az előző build fájlájával nem fut vele a program.
AE
-
ArchElf
addikt
Attól még, hogy managelt a kód, nem biztos, hogy a forrást is megkapod hozzá. Onnantól meg mindegy, hogy hol a hiba: manageltnél a managed dll-ben, vagy csomagoltnál a wrapper rossz, esetleg a csomagolt dll kódja hibás.
BTW hogy lehet úgy fordítani egy alkalmazást, hogy a managelt DLL-ek - amiket más projektekben fordítok - kézzel cserélhetők legyenek install után (ne kelljen az új dll-el újrafordítanom a programot és újratelepítenem az egészet)?
AE
-
ArchElf
addikt
Idézet az oldalról:
Extraction is supported from any archive format in InArchiveFormat - such as 7-zip itself, zip, rar or cab and the format is automatically guessed by the archive signature (since the 0.43 release).
You can compress streams, files or whole directories in OutArchiveFormat - 7-zip, Xz, Zip, GZip, BZip2 and Tar.AE
-
ArchElf
addikt
válasz
RexpecT #1309 üzenetére
Egyszerűtől haladóbbig, tematikusan:
http://www.codeproject.com/
Persze van még vagy egy tucat, de én általában ezt használom.
Ez jutott eszembe másodszorra:
http://www.c-sharpcorner.com/Még:
http://bytes.com/
http://stackoverflow.com/
http://msmvps.com/blogs/AE
-
ArchElf
addikt
-
ArchElf
addikt
válasz
Vasinger! #1215 üzenetére
Milyen könyved van? A ToString() fv az Object-től van örökölve, minden osztálynak van ilyen függvénye (implementáció függó, mit csinál).
A másik amit kérdeztél az s[0].
A string objektum értelmezhető (alapértelmezetten konvertálható) char[] -ként is,
tehát az s[0] az s string első karaktere char-ként. Zért kell a ToString(), mert a char és string objektumok konvertió nélkül nem fűzhetők össze. A char.ToString() string-é alakítja char-t.
Remélem elég érthető voltam...AE
-
ArchElf
addikt
Ilyenekkel akkor érdemes "vacakolni" ha valamit nem egyszer szeretnél/kell megcsinálni, hanem az adott dolgot többféleképp is lehet (kell) implementálni, de szeretnéd egyszerűen és szabványosan kezelni őket.
Erre példa a System.IO.Stream osztály. Sok implementációja létezik, de az alapvető funkciókat mindegyik leszármazottnak (így vagy úgy) meg kell valósítania.A kezelésnél tehát nem azt fogod előírni, hogy a függvényeknek a bemenete, vagy kimenete az adott leszármazott osztály, hanem az ős (fantom) osztály.
AE
-
ArchElf
addikt
válasz
Briganti #1198 üzenetére
Igen, ahogy zeratul kolléga is mondja...
OleDbParameterAE
-
ArchElf
addikt
Hát, ha a string műveletek nem mennek... pl (nem futtatható, csak pszeudokód):
Ez a legegyszerűbb:
List<string> Mezőnevek;
string insertcolstr = "";
foreach (stirng Név in Mezőnevek)
insertcolstr += "[" + Név +"],";
insertcolstr.TrimEnd(',');
List<string> MezőÉrtékek;
string inservalstr = "";
foreach (stirng Érték in MezőÉrtékek)
inservalstr += "[" + Érték +"],";
inservalstr.TrimEnd(',');
string insertstr = "INSERT INTO tablanev ({0}) VALUES ({1})";
DbCommand cmd = connection.CreateCommand();
cmd.CommandString = string.Format(insertstr, insertcolstr, inservalstr);
cmd.ExecuteNonQuery();[De ez bizonságosabb:
Dictionary<string, object> Mezőértékek;
string insertcolstr = "";
foreach (stirng Név in Mezőértékek.Keys)
{
insertcolstr += "[" + Név +"],";
inservalstr += "@" + Név +",";
}
insertcolstr.TrimEnd(',');
string insertstr = "INSERT INTO tablanev ({0}) VALUES ({1})";
foreach (stirng Érték in MezőÉrtékek)
DbCommand cmd = connection.CreateCommand();
cmd.CommandString = string.Format(insertstr, insertcolstr, inservalstr);
foreach (object Érték in Mezőértékek.Values)
cmd.Parameters.Add(Érték);
cmd.Prepare();
cmd.ExecuteNonQuery();AE
-
ArchElf
addikt
Valószínűleg nem texbox-ba írja ki az értékeket, hanem mondjuk egy sima control-ra grafikusan (Graphics DrawString). Ezt is meg lehet hackelni (már ha a hook-olás már megy), csak el kell térítened a megfelelő függvényt, hogy megkapd az átadott értéket.
Ha ez nem megy, megpróbálkozhatod a kontrol helyét meghatározni és utána leszedni a képet:
http://www.vcskicks.com/capture-control-graphics.phpAE
-
ArchElf
addikt
fileinfo.moveto plusz:
//3 char levágása
string filename = @"c:\akármi\akárhol\123456.txt";
string new_filename = filename.Substring(0, filename.LastIndexOf('\\')+1) + filename.Substring(filename.LastIndexOf('\\') + 4);Ez most csak bemutásra, egy kis hibakezelés azért kellene még bele, pl filenév hossz ellenérzés.
AE
-
ArchElf
addikt
Úgy nézem kimaradt a sor, ahol átneveznéd a fájlokat
Kiterjesztés megváltoztatására:
Path.ChangeExtension(string path, string extension);
vagy tudsz mozgatni fájlokat a fileinfo osztály segítéségvel.AE
-
ArchElf
addikt
A válasz ott van a linkelt oldalon:
"There is one catch here though. In order for this to work, I call the AdjustPrivileges function in the same module as WinMain to give this application debug rights. Otherwise OpenProcess with PROCESS_ALL_ACCESS fails. This code is straight out of the MSDN Knowledge base - Article ID: Q131065"
Bár a MS oldalon azt írja, hogy csak a rendszerprocesszek debuggolásához kell a SeDebugPrivilege, de valószínűleg a kérdéses API nem működik nélküle, függetlenül attól, hogy nem system, hanem user process memóriáját akarod megnézni.AE
-
ArchElf
addikt
Ezt managelt kódban már valószínűleg nem fogod tudni megcsinálni. Ez már inkább C/C++ terület (esetleg megcsinálhatod C#-ban is nem managelt módban)...
Bizonyos részeit egyszerűen meg lehet csinálni, pl futó processzek listája. De ezt is csak lekérdezgetni tudod bizonyos időközönként.
Találtam egy kis segítséget:
http://www.codeproject.com/KB/threads/MDumpAll.aspxAE
-
ArchElf
addikt
válasz
acélkemény #1152 üzenetére
Ez tényleg acélkemény volt, tuskó
Sorry Bumbi, hogy nem tudtam foglalkozni vele. De látom szerencsére megoldódott.
AE
-
-
ArchElf
addikt
válasz
acélkemény #1103 üzenetére
Szerintem ilyet nem nagyon fogsz találni. Ha esetleg találsz egy digitális (vektor) Magyarország térképet, abból esetleg ki tudod nyerni ezeket az infókat (ami szerintem az esetek legnagyobb részében nem legális). Ha fizetős szolgáltatást szeretnél, akkor a Földmérési és Távérzékelési Intézettől biztos tudsz szeretni ilyen infókat.
AE
-
ArchElf
addikt
Miért? Persze a kódban statikusan van megoldva, de ott a két függvény, amivel be és ki lehet regisztrálni hotkey-eket. Egyszerűen, amikor változtatni akarsz, akkor kiregisztrálod az előzőt, és beregisztrálsz egy újat.
Az ott közzétett rutinon csak annyit kell változtatni, hogy nem külön adod meg a módosítókat (SHIFT/ALT/CTRL/WIN), hanem azt a WinKey-t dolgozod fel egyből és adod át a függvénynek, amit a KeyDown esemény visszaad (e.KeyData).
Magyarán csinálsz egy olyan kontruktort is a GlobalHotKey osztálynak, ami a teljes (módosítókkal is ellátott KeyData értéket is fel tudja dolgozni).AE
-
ArchElf
addikt
Nem tudom, te hol találtad ezt a GlobalHotKey-t, de itt van róla egy kicsit bővebb magyar leírás: link
Amúgy ez az a két függvény:
[DllImport("user32.dll")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
[DllImport("user32.dll")]
public static extern bool UnRegisterHotKey(IntPtr hWnd, int id);AE
-
ArchElf
addikt
private GlobalHotKey ghk = null;
private VoidEventHandler ghk_event = null;
private void textBB_KeyDown(object sender, KeyEventArgs e)
{
ghk = new GlobalHotKey(e.KeyData, false, false, false, false);
textBox1.Text = e.KeyData.ToString();
}
private void SetHotKey_Click(object sender, EventArgs e)
{
if (ghk_event != null)
ghk.Hotkey -= ghk_event;
ghk_event = new VoidEventHandler(Hotkey);
ghk.Hotkey += ghk_event;
}AE
-
ArchElf
addikt
Szerintem azért nem működik, mert a this-el hívod meg, ami a jelen egyedre mutat, ami egy UdpChannelListener és ez nem implementálja az IChannel interface-t.
Olyan egyedre kell meghívni a LookUp metódust, ami implementálja az IChannel-t:
http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.ichannel.aspxAE
-
ArchElf
addikt
Viszonylag gyakran akkor alkalmazzák, ha több opcionális kontruktor változóra lehet szükség - default konstruktor gyártására lehet alkalmani a this módisítót...
Érdemes megnézni az előre legyártott MS osztályokat, ott bőven van példa opcionális konstruktor változókra:
Pl System.IO.FileStream:public FileStream(IntPtr handle, FileAccess access);
public FileStream(IntPtr handle, FileAccess access, bool ownsHandle);
public FileStream(IntPtr handle, FileAccess access, bool ownsHandle, int bufferSize, bool isAsync);
public FileStream(SafeFileHandle handle, FileAccess access);
public FileStream(SafeFileHandle handle, FileAccess access, int bufferSize, bool isAsync);
public FileStream(string path, FileMode mode);
public FileStream(string path, FileMode mode, FileAccess access);
public FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize);
public FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, bool useAsync);
public FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, FileOptions options);
public FileStream(string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, FileOptions options);
public FileStream(string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, FileOptions options, FileSecurity fileSecurity);(kicsit sorbarendeztem őket, hogy jobban látszódjanak a csoportok)
Ezeket mind meg lehet csinálni egyesével is, de sokkal egyszerűbb (és biztosabb megoldás) több különálló csoportra osztani, és a csoporton belül a speciálisabbakból (kevesebb változót tartalmazót) meghívni az általánosabbakat.AE
-
ArchElf
addikt
És ha az előző és az azelötti hozzászólásomat összekombinálod?
Értsd:
1) kikeresed az összes "A" elemet: GetElementsByTagName("A");
2) addig nézed őket, míg meg nem találod, amelyiknek a class property-je az amire te keresel GetProperty("class")
3) megnézed, hogy mi a href tulajdonsága GetProperty("href")
4) átadod a HREF értékét a webbrowser controllnak - voila...AE
-
ArchElf
addikt
http://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.aspx
GetElementsByTagName, ha megvan a lista, onnan leelenőrzöd a class-t egy iterációban.if (webBrowser1.Document != null)
{
HtmlElementCollection elemColl = null;
HtmlDocument doc = webBrowser1.Document;
if (doc != null)
{
elemColl = doc.GetElementsByTagName("A");
foreach (HtmlElement elem in elemColl)
{
string elemName;
elemName = elem.GetAttribute("CLASS");
if (elemName == "valami")
{
elem.Focus();
break;
}
}
}AE
-
ArchElf
addikt
Amennyiben a t1.eleres és t2.helye mező azonos adatait akarnád kiszűrni:
select * from t1 where eleres not in (select helye from t2)
Esetleg használhatsz joint is, de az egy kicsit bonyolultabb:
SELECT t1.*
FROM t1 LEFT JOIN t2 ON t1.eleres = t2.helye
WHERE t2.helye Is Null;AE
-
ArchElf
addikt
válasz
acélkemény #990 üzenetére
A bulk load az adatbázisba való betöltésre kell, utána az adat ott csücsül egy varbinary mezőben. Egy (vagy több, ha az adatbázist szétparticionálod) baromi nagy sql adatbázis fájlban.
AE
-
ArchElf
addikt
válasz
acélkemény #988 üzenetére
Remélem az angol nem probléma:
link
Úgy látom a paraméterezett megoldás helyett a bulk load még egyszerűbb. Pl így:INSERT Production.Mp3 (
Mp3Data,
Mp3path
SELECT Mp3Data.*, N'c:\tricycle.mp3'
FROM OPENROWSET
(BULK 'c:\tricycle.mp3', SINGLE_BLOB) Mp3DataAE
-
ArchElf
addikt
válasz
acélkemény #986 üzenetére
Én egyrészt nem tolnék be több megás binárisokat egy adatbázisba, másrészt főleg nem a VS felületén tenném. Egyszerűen írj rá egy kis konzolos programot, ami megteszi ezt neked.
Nagyjából ennyit kell csinálnod:
- File megnyitása (mondjuk argumentum alapján)
- file beleolvásása egy előre lefoglalt méretű byte[] tömbbe (fájlméret alapján).
- adatbázis megnyitása
- egy paraméterezett SQL-el a byte[] tömb feltöltése az adatbázisba
- fájl és adatbázis kapcsolat zárása.AE
-
ArchElf
addikt
válasz
MrSealRD #977 üzenetére
Szerintem egyszerűbb, ha csak két intenal property-ben tárolod a felhasználónevet, jelszót, amit bevisz a felhasználó.
Amúgy mondjuk én így csinálnám (session objektummal):
- Main megnyitása, OnLoad-ben legyártja a LoginScreen-t és megjeleníteni ShowDialog-gal
- Login ablak bekéri a szükséges adatokat, felépíti a session-t (objektumba)
- Az objektumot átadja delegate-ben, vagy berakja egy internal property-be, amit az ablak eltüntetése után a MainScreen tud olvasni, esetleg gyártasz egy intenal property-t a MainScreen-nek amibe belerakja a session objektumot, majd a loginablak eltünteti saját magát (az ablak látja a saját visible property-jét)
- MainScreen megszünteti a LoginScreen objektumot (Dispose)AE
-
ArchElf
addikt
válasz
MrSealRD #974 üzenetére
Válasz: ne ShowDialoggal nyisd meg...
A Dialog (szépmagyarul dialógusablak) arra szolgál, hogy az azt megnyitó ablakról információt szolgáltass, vagy információt kérj be. Leggyakoribbak az About; általános üzenetablak, pl hibaüzenetek; Input ablakok.
Ami neked kell az a sima Show, és elötte/utána LoginScreen.Visible = false; al eltünteted a login ablakot. Ha fel is akarod szabadítani az általa foglalt erőforrásokat, akkor a Program.cs-ben is trükköznöd kell, hogy ne a LoginScreen ablak legyen az Application objektum alapja.
Amúgy meg sokkal ésszerűbb lenne, ha megjelenne a Main ablakod, abból pedig megnyitnád a Login-t dialógusablakként (ez pl. tipikus dialógusablak feladat).AE
-
ArchElf
addikt
válasz
Rodrighez #967 üzenetére
És itt egy hack:
public static void ChangeCursor(string path, Form Form)
{
Cursor cursor = new Cursor(LoadCursorFromFile(path));
Form.Cursor = cursor;
}
[DllImport("user32.dll", EntryPoint="LoadCursorFromFileW", CharSet=CharSet.Unicode)]
private static extern IntPtr LoadCursorFromFile(string str);Itt viszont vigyázni kell, hogy a LoadCursorFromFile egy handle-t hoz létre, amit ezzel a módszerrel nem tudsz felszabadítani. Amenyiben csak egy ikon kell egyszerre, belerakhatod a LoadCursorFromFile() hívás eredményét egy statikus változóba (de több esetén is berakhatod mondjuk egy HashTable-be) és amikor kilépsz, vagy kurzort váltasz, akkor fel kell szabadítani a handle-t egy CloseHandle hívással:
[DllImport("kernel32.dll", SetLastError=true)]
private static extern bool CloseHandle(IntPtr hObject);
[DllImport("user32.dll", EntryPoint="LoadCursorFromFileW", CharSet=CharSet.Unicode)]
private static extern IntPtr LoadCursorFromFile(string str);
private static IntPtr iconHandle;
public static void ChangeCursor(string path, Form Form)
{
if (iconHandle != null) CloseHandle(iconHandle);
iconHandle = LoadCursorFromFile(path)
Cursor cursor = new Cursor(iconHandle);
Form.Cursor = cursor;
}Persze ebből is hiányzik még a hibakezelés, mega form lezárásakor a handle felszabadítása.
AE
-
ArchElf
addikt
válasz
Rodrighez #967 üzenetére
Gyors válasz az MSDN-ről:
Note
The Cursor class does not support animated cursors (.ani files) or cursors with colors other than black and white.
Ez azt hiszem megválaszolja a felmerült kérdést (sajnálatos módon nem pozitívan), de találtam neked egy ilyet:
http://www.codeproject.com/KB/cs/ExtCursors.aspxAE
-
ArchElf
addikt
válasz
imbahayabusa #961 üzenetére
Pontosan mit is szeretnél, mire kell a két form?
AE
-
ArchElf
addikt
Sajnos töbszöri hozzáfogás után sem tudtam nekiállni a VSTO-nak - főként időhiány miatt -, pedig a cél adott volna: egy relációs Outlook DataStore (pokolba kívánom szinte minden nap a Personal Foldereket)
Nem tudom, hogy találsz-e fórumon olyat, akinek volt már szerencséje a VSTO-hoz (de ha igen, nekem is továbbpasszolhatnád az elérhetőségét, hátha az Outlook-os kérdéseimben is tudna majd segítő jobbot nyújtani).
Ja és sorry, hogy beszóltam, de segíteni ezért nem tudokAE
-
ArchElf
addikt
válasz
..Trinity #928 üzenetére
Anagramma:
string, mint char[] kezelése (két for ciklust egymásba kell tenni, és eltárolni (mondjuk egy bool[] tömbbe, hogy a megalkotáshoz melyik karaktert használtuk már fel). A legyártott változatokat legegyszerűbb belerakni egy List<string> listába.Akasztófa játék:
Karakter ellenőrzés string-ben (IndexOf függvényel, plusz for cilkus, hogy az összes egyező karaktert megtaláljuk). Ezen kívül kell egy számláló, hogy mennyi rontott próbálkozás volt (nincs egyezés a szöveg és a beadott karakter között).Lottószám generálás:
int[5] tömb a számoknak, System.Random a véletlenszámnak, ellenőrzés, hogy a számot kihúztuk-e már egyszer.
Ha megvannak a számok, legenerálni egy Bitmap-ot (amibe majd rajzolunk). A Graphics.FromImage statikus metódussal kinyerjük a rajzoló felületet, DrawString metódussal kiírjuk a számot rá, majd az Bitmap Save metódusával el lehet menteni (akár JPEG-be is): bitmap1.Save("kep1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);Táblázatkezelő:
Az fogalmam sincs ez a feledat mit jelent, de a táblázatot lehet "rajzolni" a ListView (Detail mód) illetve a DataGridView-val.AE
Ú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!
- sziku69: Szólánc.
- Kertészet, mezőgazdaság topik
- PlayStation 5
- Vékonyabb lett, jobb kamerát kapott, de az akku maradt a régi: itt a Fold7
- Iszonyatos mennyiségű hulladékkal járhat a Windows 10 terméktámogatásának vége
- Eredeti játékok OFF topik
- Nintendo Switch
- AI-séf főz a dubaji étteremben
- Óra topik
- HP notebook topic
- További aktív témák...
- Bowers/Wilkins PX8 fejhallgatók (dupla Bluetooth eszköz csatlakoztatása!) (ELKELT)
- Telefon felvásárlás!! iPhone 11/iPhone 11 Pro/iPhone 11 Pro Max
- Konzol felvásárlás!! Playstation 5, Playstation 5 Pro
- Beszámítás! Sony PlayStation 4 PRO 1TB fekete játékkonzol extra játékokkal garanciával hibátlan
- Akciós Windows 10 pro + Office 2019 professional plus csomag AZONNALI SZÁLLÍTÁS
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest