für die x-Koordinate im kartesichen Koordinatensystem (p ist der Prozentwert in Form von 0 bis 1, r ist der Radius des Diagramms):
x(p)=r*cos(p*2*PI)
y(p)=r*sin(p*2*PI)
du musst x(p) und y(p) nur noch in Bildschirmkoordianten umrechnen und schon hast du es.
Ich weiß es nicht ganz 100%ig, aber zumindest ist mir nichts bekannt, was dies leisten würde.
MS hat diesen Weg sicher bewußt nicht eröffnet, da es aus MS-Sicht ein super Einfallstor für Schadprogramme wäre.
Generell ist es so, dass ein Programm immer unter dem Account läuft, aus dem heraus es gestartet wurde. Darüber hinaus kann sich kein Programm mehr Rechte beschaffen, als es laut Account haben darf.
Das ist die SID. Also wie herbivore schon sagt, die genaue Windows-interne Benutzerkennung. Wie du sie über .Net abfragen kannst, habe ich in Nochmal Registry... beschrieben
Für Welche Zeile zeigt der Debugger denn die Exception an? Sonst kann ich auch nur Rätselraten machen, da ich den Fehler nicht sehe
der Marcel
EDIT: Möglich wäre, dass du mit mf eine neue Instanz von MainForm erstellst, diese aber nicht die ist, die angezeigt wird, kann das sein? Du müsstest in dem Fall der Klasse mit dem Konstruktor die Referenz auf die bestehende MainForm-Instanz mitgeben.
Hatte auf codeproject einen Artikel über eine Masked TextBox in Net1.1 gefunden. Den Link hab ich aber leider verschmissen und nicht mehr über Google gefunden.
Das Thema gab es tatsächlich schon öfters und die Lösungen wurden auch diskutiert.
Du kannst zum Beispiel ab dem Vorhandensein einer neuen Datei in regelmäßigen Abständen die Dateigröße prüfen. Sobald diese sich nicht mehr verändert, ist der Kopiervorgang abgeschlossen.
Dann Adde es doch erst dann, wenn es da ist! Das heißt auf null prüfen und wenn dem so ist, nicht adden und weiter. Wenn dies nicht geht, dann musst du die schon erwähnten Platzhalter einfügen.
Der Vorteil den ich beim Dictionary sehe, ist, dass es 2 Elemente haben kann, welche sich zB jedoch schon als queue[0] und queue[89] ansprechen lassen. Über die Schlüssel kann man ja auch einfach iterieren und so jedes vorhandene Element ansprechen.
der Marcel
EDIT: Wenn es nicht geht, bützen dir auch die Platzhalter nichts, denn auch die musst du ersetzen, wenn die eigentliche Referenz dann mal auf ein Objekt zeigt
Welche Objekte möchtest du denn Adden?
ich dachte vorhin inet.Document.Links[7] ist nicht das Element, welches du Adden möchtest. Scheint es aber zu sein, oder?
Mit dem Dictionary müsste der Fall doch dann klar sein. Wenn die Elementposition vorher fest steht, dann erstellst du ein Dictionary<int, Link>. das int steht als Schlüssel für die Position in der Reihenfolge und der Wert ist dann das zugehörige Objekt (in meinem Beispiel Link) an dieser Stelle. Ich denke, du hast bisher vielleicht den Sinn von Schlüssel und Wert verwechselt.
Nun habe ich 2 Fragen:
Weißt du bei jedem Element die exakte Position in der Liste? (also zB Index 100)
Oder fügst du zwischen 2 vorhandenen Objekten eins ein und die genaue Indexierung ist variabel?
Wenn die Indexierung variabel ist (was ich bisher nicht angenommen hatte), dann wäre vielleicht eine List<> doch das richtige, diese hat eine Methode Insert
Da die Reihenfolge bei dir anscheinend von vornerhein feststeht (Soll heißen, dass du schon beim ersten weißt, dass es meinetwegen an die 100. Stelle kommt) würde ich auch ein Dictionary verwenden.
Mein Vorstellung, welche ich beim Antworten hatte, war das Codebeispiel von herbivore in Grundlegendes zu Hashtables, welches ich hier nochmal herausgreife:
a [5] = 97;
a [8798] = 97;
a [9979679] = 97;
Das würde an dieser Stelle bedeuten, dass der Schlüsseldatentyp ein int ist.
Bei
Dictionary<HtmlElement,string> hans = new Dictionary<HtmlElement,string>();
hans.Add(inet.Document.Links[7],"test");
geht wahrscheinlich schief, dass inet.Document.Links[7] = null ist und damit kein Objekt dahinter steht. Stattdessen würde ich eben schreiben
Dictionary<int, string> hans = new Dictionary<int, string>();
hans.Add(7,"test");
der Marcel
EDIT1+2: Berichtigungen
EDIT3: Seltsamerweise bekomme ich auch leere Seite bei der deutschen Dictionary-Hilfe in der MSDN, würde meinen, ich war da schonmal.
Alternativ steht sie aber in der Offline-Version der MSDN auf Deutsch bereit.
Muss jetzt mal eine ganz dumme Frage stellen: Ist die Methode überhaupt beim EventHandler regiistriert? Ich weiß, im Designer sollte das so sein, aber hast du das schonmal geprüft? Der Fall würde ja alles erklären
Ich verfolge den Thread schon von Anfang an.
Nun möchte ich dazu ersteinmal meine Meinung loswerden. Wenn man von der Assembler-Programmierung herkommt, kann ich die Punkte, warum gotos Methoden vorzuziehen sind, nachvollziehen. Sobald man aber die Assembler-Programmierung verlässt, geraten diese (erstmal schneinbaren) Vorteile ad absurdum, da labels und gotos eine Linearität des Programms voraussetzen, welche es gar nicht mehr gibt. Ein modernes Windows-Programm reagiert ereignissgesteuert mit dafür vorgesehenen Methoden. Klassen kann man schreiben und anwenden. Der Anwender der Klasse will von dem Inhalt derer nicht viel erfahren, umgedreht ist es der Klasse egal, wer sie anwendet. Labels sind an dieser Stelle nicht nur unangebracht sondern äußerst unpraktisch.
Daher sollte man das Rad nicht neu erfinden wollen und in der objektorientierten Programmierung Methoden einsetzen. Letztenendes läuft Cyrons Vorschlag mit Labels auch nur eine händische Methodenimplementierung hinaus (Ein Block an Anweisungen wird gestartet, wenn dieser abgearbeitet ist, wird zurückgesprungen)
@Cyron: In so einem Forum muss man sich vor Augen halten, dass man schriftlich mit den anderen kommuniziert. Daher kommt ein und derselbe Beitrag bei 10 Personen in 10 verschiedenen Sichtweisen an. Generell ist dir niemand böse oder macht sich lustig, das möchte ich dir versichern. Für ein Forum wie dieses ist es durchaus eine sinnvolle Sache dieses Thema zu diskutieren. So hast du deine Argumente gebracht und wir unsere Gegenargumente Peinlich muss es dir aus diesem Grund erst Recht nicht sein! Im Prinzip ist es eine echt gute Sache, dass du dir solche Gedanken machst und zeigt, dass du dich in das Thema reinkniest Allerdings ist die Gegenmeinung praktisch bewährt und etabliert.
Das ist nett von dir, dass du dir die Mühe machst und soviel Code tippst. Letztenendes finde ich aber, dass es für den Fragestellenden schwer ist, sich in soviel Code hineinzufinden. Schließilich wurde der Code nicht von Ihm geschrieben und zudem wirken deine (für dich verständlichen Berzeichnungen) für ihn dann vielleicht völlig aus dem Zusammenhang gerissen und unverständlich. Daher würde ich dir als Tipp geben, wenn du jemandem hilfst, nur die prägnantesten Teile als Code-Schnipsel zu geben.
Öffentliche Events, bei denen sich eine andere Form einklinken kann, können dazu benutzt werden. Die Events transpoertieren die benötigten Daten einfach mit, wenn sie gefeuert werden.
Für diese Aufgabe eignet sich eine Hashtable statt einer gewöhnlichen Liste ganz gut. Verwende dafür das Dictionary<T,T>, die Schlüssel/Wert-Datentypen kannst du dabei selbst festlegen und über die Collection der Schlüssel könntest du iterieren.
Über Remoting stellt ein Server ein Serverobjekt bereit, auf das der Client zugreifen kann. Wenn man das geschickt macht, lassen sich sogar Events auf diese Weise verschicken. Beispiele findest du dazu in der MSDN.
Das sind wirklich die Grundlagen zu Arrays. Deine Fragen können mit hoher Wahrscheinlichkeit schon durch das lesen vom guide to C# aus dem Weg geräumt werden. Beherzige bitte herbivores Vorschlag ein Buch über C# zu lesen. Auf die Schnelle kommst du heute auch mit dem guide klar.
der Marcel
EDIT: Bei herbivores letzter Antwort gibts es nichts an Code zu zeigen. Versuche doch bitte ersteinmal Arrays zu verstehen. Wenn du das hast, wird dir ein kleine (manchmal nachteilige) Eigenschaft aufallen, welche die ArrayList (besser List<T> in Net2.0) löst.
in einer öffentlichen Methode von MyPlaylist_x kapselst. So kannst du oben stehenden Zugriff in der Methode ausführen und mit dieser dann auch das Event feuern.
der Marcel
EDIT: letztenendes läuft ja herbivores Vorschlag fast auf das selbe hinaus. Nur eben eine extra Klasse mit Vererbung fällt dabei raus.
Wie die anderen schon sagen, ist das ausbügeln von selbst verantworteten Programmierfehlern ein ganz schlechter Stil
Mit der count-Eigenschaft der ArrayList bekommst du zurück, wieviele Elemente sie hat. Bei n Elementen kannst du also bis zum (n-1). Element zugreifen. n-1 deshalb, weil das erste Element den Index 0 besitzt und so weiter und so fort.
Mir sind allerdings Fälle bekannt, indem es nicht gelingt Net1.1 Programme mit dem 2.0 Framework laufen zu lassen. Dies betrifft den Grafikkartentreiber von ATI.
Du erstellst doch gar keine Instanz MainForm.
Falls MainForm deine Form-Klasse ist, erstelle zunächst eine Instanz und rufe dann Show auf.
MainForm mf = new MainForm();
mf.Show();
der Marcel
EDIT: Sorry, habs gesehen. MainForm ist der Instanzname und die zugrundeliegende Klasse AktualCall.
Aber dennoch. in der Main-Methode erstellst du gar kein Objekt MainForm. Das fehlt dir.
Original von Weyoun
Leider gibt das Programm keine Lösung heraus (irgendwann bricht es mit einer Fehlermeldung ab "Der Index war außerhalb des Arraybereiches")
Die Fehlermeldungen sind doch sehr prägnant und geben einen guten Anhaltspunkt, was schief läuft.
Zitat
Original von Weyoun
Kann es daran liegen, dass, wenn der String mal nur 7 oder 8 Zeichen lang ist (kommt vor, wenn relativ kleine 3-stellige Zahlen miteinander multipilizert werden), kein Vergleich der 9-ten Stelle vorgenommen werden kann?
Das wäre sehr schade, da dann das komplette Programm für die Katz' wäre.
Nein, du kannst die 9. Stelle nicht prüfen, wenn der String nur 8 Zeichen hat Du kannst aber prüfen, ob die Stelle existiert. Also ob der Index größer gleich der Länge ist. Wenn dies der Fall ist, kannst du die Schleife mit break; abbrechen. Dein Programm ist deswegen nicht für die Katz.