Laden...

Forenbeiträge von Vitab Ingesamt 78 Beiträge

24.04.2011 - 20:44 Uhr

Geh am besten mal das Tutorial von Cheat Engine durch (Das ist bei der Installation dabei). Darin wird das alles ganz genau erklärt.

Der Trick ist, dass es eine feste Adresse gibt, die einen Pointer auf die Variable darstellt. Das bedeutet du hast eine Adresse an der die Adresse von der Variable steht. Das lässt sich mit beliebig vielen Pointern verketten:

Pointer (feste Adresse) -> Pointer -> Pointer -> Variable (z.B. Lebenspunkte)

Du musst also den Wert des Pointers auslesen (4 byte unter 32bit) und dann solange weitergehen, bis du den Pointer auf die Variable findest.

Cheat Engine hat da ein paar Tools, die bei der Suche helfen, aber das wird alles in dem Tutorial beschrieben 😉

07.12.2010 - 20:03 Uhr

Obwohl das nach einer seltsamen "Technik" aussieht ist der eigentliche Fehler nicht, das die Variablen statisch sind, da die Klasse genauso wie das Objekt heißt (und somit auch die statischen Variablen angesprochen werden).

Der Grund warum es erst bei zweitem Aufruf funktioniert ist, dass bei der Objekterzeugung von convert_files die aktuellen Werte der statischen Variable benutzt/kopiert werden. Diese Strings werden erst im Nachhinein geändert. Das bedeutet beim zweiten Aufruf haben sie die Werte, die im ersten Aufruf in den Textboxen stehen.

Zum Thema "Kopien" von Strings siehe auch:
[FAQ] Besonderheiten der String-Klasse (immutabler Referenztyp mit Wertsemantik)

Du müsstest also die strings auf die richtigen Werte setzen, bevor du deine Form instanzierst.
Allerdings schaut das so aus, als würde da irgendwas falsch laufen. Die statischen Variablen scheinen keinen Sinn zu machen, wie Programmierhans schon gesagt hat 😉

30.10.2010 - 12:06 Uhr

Ich würde mal vermuten, dass bei deinem Freund die XNA Runtime fehlt:

Microsoft XNA Framework Redistributable 4.0

Zumindest als ich das letzte Mal mit XNA gearbeitet habe (XNA 3.1) musste die Runtime noch auf den Rechnern installiert sein, auf denen kein XNA GameStudio läuft.

11.08.2010 - 15:52 Uhr

Verwende doch einfache eine Klasse IP und ein paar Helfer-Methoden.

Da möchte ich noch anmerken, dass es bereits eine IPAddress Klasse im .NET Framework gibt: IPAddress

Diese hat sowohl die Methoden IPAddress.TryParse zur Validierung/Konvertierung eines Strings, als auch ToString (wie jedes object 😉 ) um die IPAdresse formatiert(x.x.x.x bzw ipv6) auszugeben.
Ausserdem wird zusätzlich IPv6 unterstützt.

Damit lässt sich der Code des Threaderstellers vermutlich auf das folgende kürzen:

static void Main(string[] args)
{
    IPAddress ip = null;
    string input = "";

    while (!IPAddress.TryParse(input, out ip))
    {
        Console.Clear();
        Console.Write("Please enter your ip: ");
        input = Console.ReadLine();
    }

    Console.WriteLine("Your IP address is: " + ip.ToString());
    Console.ReadKey();
}
04.08.2010 - 17:46 Uhr

Siehe dazu auch List<T> statt ArrayList?

Eventuell wären weitere Infos, über den Sinn der Klasse hilfreich. Für mich hört sich das ein bisschen nach dem Singleton-Pattern an.

Vielleicht hilft dir auch das: Zentrales Dataset - Zugriff von überall - Wie mögllich?

03.08.2010 - 12:24 Uhr

Hallo Zajaer

1.

int.TryParse(textBox1.Text, out num1);
if (int.TryParse(textBox1.Text, out num1))
{ ... }

Hier rufst du die Methode zweimal auf, einmal innerhalb der If-Bedingung reicht aus.

  1. Zu deinem eigentlichen Problem
binary(num1);

Wie du schon richtig gemacht hast gibst du in deiner Methode den veränderten String zurück. Allerdings machst du nichts mit dem Rückgabe Wert.
Also z.B.

string s = binary(num1);

Zahlen haben keine dezimale, hexadezimale, binäre Darstellung. Im physikalischen Speicher sind am Ende alles "nullen und einsen". Deswegen kannst du aus einem int auch keinen "binär int" machen. Nur Anzeigen kannst du diese Zahlen in verschiedenen Formaten(binär, dezimal, ...).

Warum man Strings nicht direkt ändern kann: [FAQ] Besonderheiten der String-Klasse (immutabler Referenztyp mit Wertsemantik)

01.08.2010 - 16:15 Uhr

Das liegt wohl dadran, dass die dll keine .NET/COM dll ist, wie die Fehlermeldung auch angibt. Im FAQ auf der Seite steht:

  1. Welche Entwicklungsumgebungen werden von der API unterstützt?

Unterstützt werden die Programmiersprachen Visual Basic und C++, auf Basis einer DLL zum Zugriff auf die Teilnehmerdatenbank.

Somit musst du per pinvoke darauf zugreifen, oder auf C++/VB 6.0 umsteigen 😉

EDIT:
Zu spät, aber such mal zum Thema DllImport nach pinvoke.

30.07.2010 - 15:28 Uhr

Das Problem ist, es gibt keinen Datentyp der aus 9 bit besteht. Und selbst wenn könnte er nicht so verarbeitet/gespeichert werden, da alle Datentypen Vielfache von 1 byte sind (short=2byte, int=4byte, ...).
Ich kenne auch keine Assemblerbefehle, die mit Werten kleiner als einem byte rechnen. Du musst also mindestens 2 byte schicken.
Auch bool's sind ein byte groß und nicht 1 bit.

Und wenn du 2 bytes sendest musst du einfach vor jedem Element in deinem byte Array ein neues byte mit dem Wert: 1000 0000(bin.) einfügen.

30.07.2010 - 14:54 Uhr

Du wirst wohl die Variante mit den 2 Bytes nehmen müssen, da der kleinste Datentyp ein byte(8 bit) ist.
So reicht es dann auch aus, wenn du vor jedem byte in dem Array ein neues byte einfügst, mit dem Wert -128 (signed, dez. = 1000 0000b). Dadurch wird dein Array natürlich doppelt so groß.

30.06.2010 - 23:10 Uhr

Nach einem simplen Test kann ich JAck30lena nur zustimmen 😉

Initialisierung:

fsw = new FileSystemWatcher(".\\");
fsw.Created += new FileSystemEventHandler(fsw_Created);
fsw.EnableRaisingEvents = true;

Event Handler:

void fsw_Created(object sender, FileSystemEventArgs e)
{
    while (true)
    {
        System.Threading.Thread.Sleep(200);
    }
}

Auch wenn der Event Handler aufgerufen wird und die Endlosschleife läuft reagiert die Form noch ganz normal.

07.05.2010 - 18:59 Uhr

Also bei Opera 10.53 kann ich das Verhalten nicht nachvollziehen. Wenn ich Text markiere und auf den Code Tag Button drücke springt die Textbox nicht nach oben sondern bleibt da wo sie ist.

07.05.2010 - 18:41 Uhr

Im GUI Designer von VS findest du im "Eigenschaften" Fenster auch noch den "Tab" Events. Dort werden dir auch die Events von dem aktuell ausgewähltem Control angezeigt.

Im angehaengten Bild hab ich dir den Button markiert.

20.04.2010 - 00:05 Uhr

Hallo Sebastian.Lange,

vermutlich hilft dir hier IMessageFilter weiter.

Du kannst eine Klasse erstellen, die diesen Filter implementiert und dann in der Methode PreFilterMessage die einzelnen Window Messages filtern. Diesen Filter kannst du anwenden indem du deiner Application-Klasse mit der Methode AddMessageFilter deine Filter-Klasse übergibst.

Hier ein kleines Beispiel:


public class MyInputFilter : IMessageFilter
{
    private const int WM_LBUTTONDOWN = 0x201;
    private const int WM_LBUTTONUP = 0x202;

    public bool PreFilterMessage(ref Message m)
    {
        return m.Msg == WM_LBUTTONUP || m.Msg == WM_LBUTTONDOWN;
    }
}

Und in der Main:


Application.AddMessageFilter(new MyInputFilter());

Allerdings müsstest du bei dem Beispiel auch noch einen Doppelklick abfangen. Das hat sehr seltsame Effekte, wenn man so einen Doppelklick auf einen Button macht 😉

07.04.2010 - 00:31 Uhr

Thunderbird kann also Text Dateien einlesen und als Signatur(Text der unter der E-Mail steht) benutzen. Und du übergibst Thunderbird jetzt ein PE File statt einem Textfile? Wie machst du das, also wie erwartest du, dass Thunderbird die richtige Signatur aus der exe bekommt?

So wie das aussieht ist deine "Fehlermeldung" einfach die ASCII Darstellung deines Programms. Also die einzelnen Bytes aus denen dein Programm besteht in ASCII-Code angezeigt.
So wie ich das sehe, interpretiert Thunderbird deine .exe einfach als Textdokument 😉

Die "Fehlermeldung": "This program can only be run in DOS mode." wird bei .NET Anwendungen immer im .text Segment der exe gespeichert. Das heißt aber nicht, dass die Meldung auch angezeigt wird.

21.03.2010 - 14:03 Uhr

Im Multiplayer wird sowas meistens sowieso nicht funktionieren, weil Informationen wie Lebenspunkte, Munition, ... auf dem Server gespeichert werden.

20.03.2010 - 23:56 Uhr

Das ist eigentlich sogar relativ einfach unter Windows zu erreichen mit der WriteProcessMemory Methode
Hilfreich dabei ist auch die ReadProcessMemory Methode und pinvoke ist bei sowas sowieso immer hilfreich 😉. Ausserdem ist es sinvoll den Prozess mit den richtigen Access-Privilegien zu öffnen: OpenProcess

Du musst nur aufpassen, da bei den meisten Spielen die Speicheradressen nicht konstant bleiben. Das heisst bei jedem Neustart, oder Levelwechsel, etc. ändert sich die Adresse. Bei sowas brauchst du dann Multilevel Pointer. Das heisst einen Pointer auf einen Pointer auf einen Pointer...

Pseudo Code:


//Prozess ID suchen

//ProcessAccessFlags.AllAccess -> siehe pinvoke.net
IntPtr hProc = OpenProcess(ProcessAccessFlags.AllAccess, false, proc.Id);

//Richtige Adresse einsetzen
int address = 0xFFFFFFFF

int buffer;

//bytesToWrite ist ein byte[], und bytesToWrite.Length ist die Anzahl an bytes, die geschrieben werden soll
WriteProcessMemory(hProc, (IntPtr)address, bytesToWrite, bytesToWrite.Length, out buffer);

12.03.2010 - 15:41 Uhr

Zwei weitere Möglichkeiten zum selbermachen:

a) InitiateSystemShutdown oder InitiateSystemShutdownEx
Das ist die WinAPI Methode um den Rechner herunterzufahren. Ist nicht ganz einfach, aber Hilfe findest du bei www.pinvoke.net

b) shutdown.exe
Die einfachere, wenn auch nicht ganz so schoene Methode (hat bei mir nicht immer funktioniert, evtl gehts unter Vista/Win7 ohne Admin Rechte nicht)
Hierbei einfach mit Hilfe der System.Diagnostics.Process Klasse die shutdown.exe starten. Die richtigen Parameter nicht vergessen (siehe shutdown /?)

24.02.2010 - 18:36 Uhr

Hast du denn meine erste Antwort bereits getestet (keybd_event)? Ist zwar nicht garantiert, dass das funktioniert hat aber bei mir schon oefter funktioniert.

Ich finde es ist einen Versuch wert 😉

Du koenntest vll auch mal schreiben, von was fuer einem Spiel du redest.

16.02.2010 - 12:10 Uhr

Du kannst es ja mal mit keybd_event (WinAPI) probieren:
http://www.pinvoke.net/default.aspx/user32/keybd_event.html

Das funktioniert aber auch nicht immer, weil bestimmte Spiele da Schutzmaßnahmen haben.

30.01.2010 - 02:14 Uhr

Das Property, das iced-t89 meint ist folgendes: Process.EnableRaisingEvents-Eigenschaft

09.01.2010 - 23:25 Uhr

Das Problem ist vermutlich, dass du


Process.Start(string fileName, string arguments)

aufrufst. Das heist pfa wird als Startparameter übergeben und nicht für das {0} eingesetzt.

Das bedeutet du musst es in etwa so machen:


System.Diagnostics.Process.Start(pfa + "\\drivers\\Intel Chipset.exe");

EDIT:
Das \ ist sowieso nicht ganz geschickt, besser wäre das Path.DirectorySeparatorChar Feld zu benutzen. Und noch besser wäre es in Kombination mit der Path.Combine Methode.

16.12.2009 - 21:04 Uhr

Also ich habe mit dem Buch "C# von Kopf bis Fuß" (siehe hier: "C# von Kopf bis Fuß" empfehlenswert?) angefangen. Ich kann es empfehlen, auch wenn es etwas "anders" ist als die anderen Bücher 😉 . Du kannst hier mal ein Probekapitel lesen: http://www.oreilly.de/catalog/hfcsharpger/chapter/
Wobei ich sagen muss, das das Probekapitel etwas unglücklich gewählt ist, weil es das erste Kapitel ist, was eine Art Motivation ist. Es wird also nicht viel erklärt, sondern nur gezeigt, was möglich ist. Allerdings ist es danach wirklich gut erklärt und den "Stil" von dem Buch kann man auch an dem Probekapitel erkennen.

Zum Galileo Openbook:
Ich finde, es ist für Anfänger nur bedingt geeignet, da alles nur sehr "kompakt" beschrieben wird (nicht unvollständig nur "kompakt" 😉 ). Ich glaube, dass es für den Anfang einfach zu schwer zum Verstehen ist, bzw nur mit viel Aufwand, was das ganze nicht gerade spaßig macht. Allerdings kannst du dir das ja selber mal anschauen (kostet ja nix).

Zum Schluss bleibt noch zu sagen, dass es hier im Forum noch etliche Vorschläge für Bücher für Anfänger gibt. Da kannst du dir auch noch Tipps und Meinungen durchlesen.

28.11.2009 - 14:28 Uhr

Spontan würde mir SendKeys einfallen:
SendKeys-Klasse

Auf die Hinweise unten achten, weil soweit ich mich erinnere nur dem aktiven Fenster der Tastendruck geschickt wird.
Alternativ gibts noch die PostMessage-Methode der Win32-API. Wenn du im Forum nach PostMessage oder SendKeys suchst wirst du einiges finden.

28.11.2009 - 14:11 Uhr

Schau dir das Beispiel an:
FileSystemWatcher-Klasse

Und das Event: FileSystemWatcher.Changed-Ereignis
wird gefeuert, wenn eine Datei geändert wurde. Wie z.B. beim Speichern der Datei.

24.10.2009 - 11:52 Uhr

Hallo herbivore,

Das war etwa das, was ich damit sagen wollte. Ich konnts bloß nicht so gut beschreiben (war ja auch schon spät) 😉

Aber ich möchte nochmal anmerken, dass die besser lesbare Lösung die von ErfinderDesRades ist und diese benutzt werden sollte.

VitaB

23.10.2009 - 23:33 Uhr

Ich probiers nochmal zu erklären:


static void Main()
{
    string a = "A";
    DoSth(ref a);
}
static void DoSth(ref string s)
{
    s = "B";
}

So in der Main(...) Methode wird an DoSth(...) eine Referenz auf a übergeben. Das heißt wenn in der Methode DoSth(...) s = "B" aufgerufen wird, wird nicht der String im Speicher geändert, sondern die Referenz a. Deswegen funktioniert das so.
Aber sobald du einem anderen String s zuweist, wird der String wieder kopiert.

Ich hoffe, das war verständlicher.

23.10.2009 - 16:45 Uhr

Also alle Angaben ohne Gewähr:

Wenn du als Parameter eine Referenz auf ein Objekt übergibst geschieht dies per call by reference. Das bedeutet der Methode wird eine Kopie der Referenz auf ein bestimmtes Objekt übergeben. Deshalb funktioniert es mit deiner Listname-Klasse, da dort nur ein Objekt im Speicher ist, das verändert wird.

Bei String geht es nicht, da wenn du NewLine = nl; folgendes passiert:
-Eine Kopie von nl wird im Speicher erstellt
-NewList wird dieses Objekt zugewiesen.

Allerdings funktioniert folgendes:


static void Main()
{
    string s = "Hallo";
    DoSth(ref s);
    //s hat jetzt hier den Wert "Welt"
}
static void DoSth(ref string s)
{
    s = "Welt";
}

Das funktioniert, weil du in der Methode DoSth(...) eine Referenz auf die Referenz auf nl hast (siehe: [Artikel] C# und Übergabemechanismen: call by value vs. call by reference (ref/out)).
Das heißt du änderst eigentlich die Original-Referenz in der Main Methode.

Ganz sicher bin ich mir allerdings nicht. Wäre gut, wenn das jemand bestätigen könnte 😃

23.10.2009 - 15:45 Uhr

Du weißt dem übergebenem Parameter doch garnichts zu:


public CreateList_Window(ref string ln)
            : this()
{
    this.NewList = ln;
    NewListName_TextBox.Text = ln;
}

Wenn du


NewList = ln;

schreibst wird ln in NewList "kopiert". Wenn du dann NewList änderst hat das gar keinen Einfluss auf ln.

Siehe dazu auch:
[FAQ] Besonderheiten der String-Klasse (immutabler Referenztyp mit Wertsemantik)

20.10.2009 - 23:28 Uhr

Da aber das dxdiag auf nem 32-Bit-System den "/64bit"-Schalter nicht kennt, musst du wohl in deinem c# programm unterscheiden, ob du mit 64 oder 32 Bit läufst.
Aber das sollte mit IntPtr.Size möglich sein.

Noch ne kleine Anmerkung wie das geht:
Wenn IntPtr.Size == 4 ist es ein 32-Bit OS ( 4 Byte = 32 Bit )
Und falls IntPtr.Size == 8 ist es ein 64 Bit OS ( 8 Byte = 64 Bit )

Also einfach abfragen, ob IntPtr.Size == 8 und dann mit dem /64bit Parameter starten.

18.10.2009 - 18:33 Uhr

Dann möchte ich erstmal auf [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen) verweisen.

Fehler 3 Die beste Übereinstimmung für die überladene Promille_Rechner.Rechnung.AlkoholAufgenommenAusrechnen(double[], double[])-Methode hat einige ungültige Argumente.

Das heißt du übergibst deiner Methode beim Aufrufen 2 doubles statt 2 double-Arrays.

Also z.B.


double a = 0;
double b = 0;

AlkoholAufgenommenAusrechnen(a, b);

Richtig wäre:


double[] a = new double[6];
double[] b = new double[6];

AlkoholAufgenommenAusrechnen(a, b);

EDIT:

Wo muss ich denn eine Instanz von den Arrays erstellen?

Auf jeden Fall bevor du die Methode AlkoholAufgenommenAusrechnen(...) aufrufst.

21.09.2009 - 20:31 Uhr

Wenn ich nach Shortcut suche finde ich nach kurzer Zeit einen Thread, der auf diesen Thread verweist: Dateisystemlink (*.lnk) "zurückverfolgen"?

Da ist ein Link zu einer Managed Lib, die Shortcuts erstellen und lesen kann.

16.09.2009 - 19:30 Uhr

Hallo Kuehner,

Hier ist ein Thread auf Englisch dazu: http://social.msdn.microsoft.com/Forums/en-US/vssmartdevicesvbcs/thread/a0790c3f-1ad0-4fe2-8c74-f52345ace62a

Ich probier das jetzt auch mal aus und wenns funktioniert schreibe ich die Lösung hier.

Mfg
VitaB

02.09.2009 - 13:11 Uhr

RegistryKey.GetValue(...) liefert ein object zurück und aus der Fehlermeldung und dem Namen schließe ich, dass ExePath ein string ist 😉

Vereinfacht sieht dein Problem so aus:


object o = new object();
string s = "hallo";

if(o == s)
    //Do sth

Du versuchst also ein object und einen string zu vergleichen. Dabei werden bloß die Referenzen verglichen => Warnung CS0252

02.09.2009 - 00:23 Uhr

@Stipo
Vermutlich will Surface Knight wirklich das, was Herbivore geschrieben hat. Nämlich dass solche kritischen Zeilen gleich automatisch damit umschlossen werden.
Was du beschreibst (was ich in meinem Post oben auch noch beschrieben hatte 😉 ) muss man auch per Hand machen.

01.09.2009 - 17:10 Uhr

Ich weiß jetzt nicht wie das in Eclipse funktioniert. Aber du kannst die Code-Schablonen(oder wie auch immer die dinger heißen) benutzen.

Also wenn du "try" eingibst und zweimal Tab drückst wird folgender Block erzeugt:


try
{

}
catch (Exception)
{
    throw;
}

Mit "tryf":


try
{

}
finally
{

}

Und wenn du bereits bestehenden Code mit sowas umschließen willst kannst du Ctrl + K, S (Standard-Einstellung) drücken oder Rechtsklick auf die markierten Zeilen -> Umschließen mit -> try

01.09.2009 - 00:42 Uhr

Benutz einfach mal Google. Ich weiß, dass ich dazu schon mehrere Artikel gesehen habe.

Auf die schnelle habe ich mal folgendes gefunden:

http://www.irrlicht3d.de/forum/viewtopic.php?f=21&t=687

EDIT:
Möglich ist es wohl auf jeden Fall. Auf der SourceForge Seite des Projekts steht:

"This example only runs in Windows and demonstrates that Irrlicht can run inside a win32 window. MFC and .NET Windows.Forms windows are possible too."

Und das ist vielleicht auch noch nützlich:
C#, rendering in tabpages (TabControl) (Englisch)

30.08.2009 - 11:31 Uhr

Wobei zu bemerken ist, dass double.TryParse(...) einen bool zurückgibt, der angibt, ob der string konvertiert werden konnte.

Also müsstest du so schreiben:


double a;
string s = "20";

if (!double.TryParse(s, out a))
    //Ungültige Eingabe...
else
    //s konnte in double konvertiert werden und der Wert steht nun in a

21.08.2009 - 15:06 Uhr

KeyPreview ist eine Eigenschaft von System.Windows.Forms.Form

Die solltest du schon haben 😉

21.08.2009 - 12:43 Uhr

Es reicht doch schon bei der Form KeyPreview auf True zu setzen und sich dann beim KeyUpEvent der Form zu registrieren. Oder überseh ich da was?

Bei meinen Tests hats auf jeden Fall funktioniert (auch wenn ein anderes Control den Fokus hatte).

10.07.2009 - 20:00 Uhr

Wenn dir das nicht reicht einfach selber nach "Global Hook" suchen, wie Herbivore schon gesagt hat.

Tasten außerhalb von Form abfragen

01.07.2009 - 15:51 Uhr

Ja, du musst einen int als Parameter übergeben, in den dann die Zahl geschrieben wird.

Artikel zu Call by Reference und Call by Value: [Artikel] C# und Übergabemechanismen: call by value vs. call by reference (ref/out)

EDIT: Mist auch zu langsam 😉
Aber die Erklärung zu dem out ist noch dabei 😛

14.06.2009 - 17:55 Uhr

Danke für die Antworten 😉

@tonka:
Mit System.IO.File.Move(...) gehts natürlich allerdings, hat dann das FileInfo-Objekt eine falsche Referenz auf eine Datei, die nichtmehr existiert. Und da das nur eine Kopie von meiner Referenz-Liste ist bringts auch nichts die Referenz zu aktualisieren.

@Florian:
Wenn ich jetzt noch ne Wrapper-Klasse schreibe, dann muss ich etliche andere Stellen im Code auch noch ändern, weil ich ja in meinen Listboxen etc FileInfos benutze.

Da kann ich wahrscheinlich gleich bei meiner Methode bleiben 😉
Aber es ist geklärt, warum es sich so verhält.

14.06.2009 - 12:22 Uhr

Hallo,

Das Problem ist, dass ich eine ListBox gefüllt mit FileInfo-Objekten habe, wobei bei den einen der ganze Pfad angezeigt wird und bei anderen nur der Dateiname (wie gewünscht).

Soweit ich herausgefunden habe zeigt er bei den FileInfo's, die ich über directoryInfo.GetFiles() geholt habe nur den Namen der Datei an und bei den anderen den ganzen Pfad. fileInfo.ToString() gibt logischerweise auch einmal den ganzen Pfad und einmal nur den Dateinamen zurück.

Wie ich gerade noch herausgefunden habe (während dem Schreiben 😉 ) liefert mir die ToString()-Methode des FileInfo-Objekts nach fileInfo.MoveTo(...) den "FullName" statt dem "Name":


//Jetzt ist fileInfo.ToString() noch der normale Name der Datei
fileInfo.MoveTo(...);
//Und jetzt ist fileInfo.ToString() der FullName der Datei

Interessant ist auch noch, dass ich es im Moment Quick and Dirty so gelöst habe:


DirectoryInfo dir = file.Directory;
FileInfo f = dir.GetFiles(file.Name, SearchOption.TopDirectoryOnly)[0];

Ich lasse mir also von dem FileInfo ein DirectoryInfo geben und lasse mir von dem dann wieder ein FileInfo geben. Dessen ToString()-Methode gibt dann wieder nur den DateiNamen aus.

09.06.2009 - 11:45 Uhr

@Sebi

Multi Monitor funktioniert bei mir auf jeden Fall soweit, dass ich Fenster, wie den Solution Explorer, das Error Fenster UND(!) sogar die Code-Dateien auf den anderen Bildschirm ziehen kann 😉

EDIT:
Wobei ich gerade sehe, dass das mit VS 2008 auch schon geht. Auf jeden Fall ein super Feature 😃

07.06.2009 - 20:43 Uhr

Also in den Troubleshooting Tips steht: "Make sure the file is a valid managed assembly". Also managed müsste sie schon sein.

Aber wart einfoch noch andere Antworten ab. Es dürfte hier genügend Leute geben, die sich damit besser auskennen.

EDIT:
Wenn du eine Methode aus der DLL aufrufen willst schau dir mal das an: DllImport-Beispiel

07.06.2009 - 20:36 Uhr

Ich kenn mich damit nicht so gut aus, aber ich würde einfach mal sagen, du lädst keine .NET (managed) Assembly.

03.06.2009 - 20:39 Uhr

Feuert das Event da nicht:


if (CurrentSiteChange != null)
{
    CurrentSiteChange(this, new CurrentSiteChangeEventArgs(value));
}

oder im else-Zweig:


else
{
    CurrentSiteChange(this, new CurrentSiteChangeEventArgs(null));
}

Falls zweiteres ist es klar, da das Event null ist, weil sich niemand bei dem Event registriert hat. So gesehen ist es ja auch überflüssig das Event zu feuern.

03.06.2009 - 20:03 Uhr

So wie ich das verstehe frägst du ab, ob sich jemand für das Event registriert hat:


if (CurrentSiteChange != null)

und wenn sich nichts bei dem Event registriert hat ( -> CurrentSiteChange == null ) versuchst du das Event zu feuern, was dann natürlich nicht geht => NullReferenceException.

03.06.2009 - 17:37 Uhr

Du kannst dir auch mal das anschauen: TabControl als Basis für Assistenten und sowas

Ich finde das kann man einfacher im GUI-Editor einstellen, weil man die Panels nicht immer hintereinander schieben muss. Bei der Lösung kannst du im GUI-Editor über TabPages die verschiedene Seiten erstellen und beim Programmstart werden die Tabs oben ausgeblendet.

25.05.2009 - 17:13 Uhr

Du musst dir das so vorstellen:

Mit:


this.agAgent = new cAgent[num];

erzeugst du das "Array-Objekt", mit num-Referenzen auf ein Objekt des Typs cAgent. Diese Referenzen zeigen anfangs alle auf null. Das bedeutet du musst in deinem Fall für jede Referenz in dem Array noch ein neues Objekt erstellen mit:


this.agAgent[i] = new cAgent(num);

Wobei du jedem cAgent-Objekt im Konstruktor die int-Variable num übergibst. Ich bin mir nicht sicher, ob das so beabsichtigt ist. 😉