Zum Inhalt springen

Mcolli

Mitglieder
  • Gesamte Inhalte

    103
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Mcolli

  1. Mcolli

    Neue Page laden

    Die Methode heisst Navigate und ist 4 fach überladen. Bei solchen Problemen Hilft dir Google und die Seite MSDN: Microsoft Development, MSDN Subscriptions, Resources, and More weiter. Einfach bei Google nache "gesuchteKlasse calss" "googlen und unter den ersten treffern finden sich solche Links: WebBrowser Klasse
  2. Also Grundsätzlich kann man nicht per Programmcode teile eine anderer Anwendung wie ein Steuerelement auslesen und diesem dann auch Eigenschaften zu weisen oder Events dort drin auslösen... Dazu muss die Anwendung auf dessen Steuerelemnte zu gegriffen werden soll eine Schnittstelle bereitstellen. Ein Userinterface stellt zum Beispiel auch eine "Schnittstelle" zum Benutzer da. Statt eine Schnittstelle zu einem Benutzer braucht Deine Anwendung da aber eine Art von Schnittstelle zu Anderen (.Net)-Programmen. Der Samplecode von mir sollte auch lediglich verdeutlichen wie man Objekte zwichen 2 sepraten Programmen austauscht... was das jeweilge Programm mit einem "empfangenen" Objekt anstellt bleibt ihm überlassen. In dem Sample wird das Empfangen Objekt halt in der Liste dargestellt. Diese "Schnittstelle" bietet also die Möglichkeit Informationen entgegenzunehmen(Objekt erzeugung) und darauf zu reagieren (Darstellen).
  3. Hallo, mir ist nicht ganz klar ob Du "verantwortlich" für das Schnittstellendesign der beiden Anwendungen bist, also ob du Einfluss auf den Code der Anwendung mit dem IE-"Objekt" hast. Trotzdem habe ich Dir gerade mal nen Sample Code zusammen geschustert der Zeigt wie man Objekte von einer in die andere Anwendung bekommt. Das ganze besteht um es transparent zu machen aus 3 Projekten (ganz ganz kleinen Projekten): ObjektKlasseSerializable: Dieses Projekt stellt die zu übnermittelnde eigene Objektklasse zu verfügung. Sowohl Empfänger-Anwendung als auch Verteiler-Anwendung Verweisen auf diese DLL. ObjektListenErzeuger: Eine Mini-Anwenund zum Erzeugen von Objekt und Verteilen. Das Verteilen geschiet hier - ums einfach zu machen - per FileStream. Dazu wird für jedes zu übermittelnde Objekt eine Datei in das Verzeichnis "C:\ObjektVerteilerTest" geschrieben. Die übermittlung könnte aber auch TCP/IP Protokoll per Rauchzeichen ,Buschtrommel oder wie auch immer erfolgen. ObjektListenSammler: Kleine GUI_Anwendung die auf Knopfdruck das verzeichnis "C:\ObjektVerteilerTest" ausliest. Wenn Du schreib rechte auf C: hast solltest Du die Programme einfach starten können. Am besten guckste Dir erst das DLL Projekt an wenn Du mal gesehen hast wie das ganze arbeitet - Du musst die GUI Projekte einmal restellen weil ich die Debug / Release ordner geleert habe um speicherplatz zu sparen. P.S: hatte bischen Zeitdruck somit sind die Projekte was Namensgebung und Rechtschreibung angeht für A**** sry. ObjektVermteilung.zip
  4. Moin scheinst Dein Problem ja mittlerweile in den Griff bekommen zu haben. Ich wollte Dir aber mal ans Herz legen Strukturen(wie eine URI-Liste) besser in einer .xml statt in einer .txt abzulegen. Das bietet gerade bei Silverlight / WPF einige Vorteile: Du kannst einfach über die XML Tags Iterieren XMLReader Klasse). Du kannst die Tags mit Atributen versehen die es Dir einfacher machen den Code später zu erweiteren (was ist wenn der Cheff will dass manche Links nur Bestimmte Benutzer Gruppen sichtbar sind). Ein "Merge" einer auf den Client-Seite erzeugten XML-Datei und einer für die anzeige relevanten XML-Datei auf dem Server ist auch einfach möglich. Desweiteren solltest Du Dich mal mit dem "Sicherheitsfeatures von Silverlight auseinander setzen. Meinen Erfahrungen nach ist die Benutzung eines StreamReader / Writers um auf ein lokales Filesystem zuzugreifen nur dann in Silverlight möglich wenn die Silverlight Anwendung als Out-Of-Browses Anwendung läuft. In der Version 4 des .Net Frameworks wurde das ganze FileAccess Modell wohl noch mal kräftig überarbeitet. So wird mittes der IsolatedStorageFile ein lokaler Speicherbereich für den aktuellen Nutzer sowie ein IsolatedStorageFileStream zum lesen /schreiben erstellt. Ich besitze einen sehr guten Einsteiger-Artikel zum Thema Security in Silverlight den ich auf PN-Anfrage Dir gerne in eingescanter Form zu kommen lasse - Warum das nicht hier im Forum geht sollte klar sein.
  5. Hab wie gesagt keine Entwicklungsumgebung (IDE) die VB unterstützt aber wenn ich an meine gehassten VBA-Makros zurück denke müsste das so aussehen (also nur der Teil wo es harpert): for i as Integer = 0 To parent.Controls.Count gesuchterIndex = findIndexOfControl(parent.Controls(i), key); if gesuchterIndex <> -1 then EXIT FOR Next Wenn Du allerdings weisst was der Container deines "Roboter" Controls ist kannst Du Dir die Suchmethode schenken und einfach: [I]Containername[/I].Controls.IndexOfKey("roboter") schreiben um an den Index des Controls zu kommen. Ein Container ist das Übergeordnete "Steuer"-Element ... Also ein Panel zum Beispiel.
  6. Hallo, Ich habe leider nur Visual Studio Express für c# deshalb kann ich deinen Code gerade nicht kopieren. Ich vermute aber es liegt am folgendem: Die Methode IndexOfKey der Klasse Control.ControlCollection die Du hier aufrufst Me.Controls.IndexOfKey("roboter") gibt wie alle "IndexOf" - Methoden den Wert -1 für eine nicht gefundenes Objekt zurück. -1 ist ein Index der bei einem Array / einer Liste / einer Colelction / etc. nicht möglich ist da der kleinste vergebene Index immer 0 ist. Wenn der Ausdruck Me.Controls.IndexOfKey("roboter") also den Wert -1 liefert führt dieser Ausdruck Me.Controls(Me.Controls.IndexOfKey("roboter")) zu der angezeigten Expcetion. Das wird daran Liegen, dass die Methode "IndexOfKey" nicht rekursiv arbeitet. Die Form (mit "Me" angesprochen) hat keine Control mit dem Namen "roboter", sondern nur sagen wir ein Panel. Das Panel wiederum beinhaltet dann die gesuchte Control mit dem Namen "roboter". Also musst statt in der Form (also "Me") in dem Panel suchen. [U]Panel1[/U].Controls(Panel1[I][/I].Controls.IndexOfKey("roboter")) Wenn Du keine Ahnung hast was der Parent der gesuchten Control ist musst Du eine rekursive Such Mehtode schreiben und die Dann mit dem TopParent (in dem Fall die Form also "Me") aufrufen: // Ist jetzt C# Code sollte aber gut umzumünzen sein private int findIndexOfControl(Control parent, String key) { [INDENT] if (parent.Controls.IndexOfKey(key) != -1) { [INDENT] // Wenn das Element gefunden wurde wird der Index zurück geben. return parent.Controls.IndexOfKey(key); [/INDENT] } else { [INDENT] int gesuchterIndex = -1; // Hier erfolgt der Rekursive aufruf der Suchmethode und zwar so lange bis // alles durchsucht wurde oder das Control gefunden wurde. for (int i = 0; i < parent.Controls.Count && gesuchterIndex == -1; i++) { [INDENT] gesuchterIndex = findIndexOfControl(parent.Controls[i], key); [/INDENT] } return gesuchterIndex;[/INDENT] } [/INDENT] } der Aufruf der Methode erfolgt dann Mittels findIndexOfControl(Me, "roboter");
  7. Mal ein paar Gedanken dazu: Die Struktur einer Tabelle wird über die Spalten oder auch Felder genannt deffiniert. Die Anzahl der Zeilen hängt von der Anzahl Datensätze ab. Eine horizontale Verbindung von n Zellen ist Möglich weil diese einen für einen Datensatz geltene spezielle Struktur der allgemeinen Tabellen struktur darstellt. Eine vertikale Verdindung von n Zellen bedeutet dass Unterhalb des eigentlichen Datensatzes (n-1) weitere Dummy-Datensätze eingefügt werden müssten. Ich schätze das macht das Richtextbox Steuerelement nicht mit. Du könntes folgendes machen um der Sache auf den Grund zu gehen: 1. Testtabelle in Word erstellen 2. Testtabelle aus Word in deine Richtextbox kopieren 3. Die eingefügte Tabelle so wie sie angekommen ist mittels der SaveFile-Methode als .rtf Speichern. 4. Die WordTabelle unter Verwendung des WordPads in ein neues -rtf Dokument einfügen (dies klappt nämlich einwandfrei zu min. bei meinem Win7 Wordpad) 5. Wordpad das neue .rtf Dokument speichern lassen 6. Beide erzeugten .rtf Dokumente mit dem NotePad öffnen. 7. das NotePad interpretiert die .rtf Key Words nicht und so kannst Du vergleichen was die Richtextbox falsch macht.
  8. Immer wieder gern. Wenn du, statt "Windows Forms", WPF (Windows Presentation Foundation) zur Oberflächengestalltung nutzt kannst Du Dir die Mühe mit den delagtes und events zur Anzeigeaktualisierung sparen. Dann muss die angezeigte Klasse "INotifyPropertyChanged" implementieren und alle relevanten Properties bei neu zuweisung eines Wertes das PropertyChanged Event callen. Die Instanzen der Objekte werden dann in einer Liste vom Typ "ObservableList<Type>" geführt und diese der Listview als Databinding zugewiesen werden. Mit einem DataTemplate für die Klasse kannst Du dann die Darstellung einer Instanz der anzuzeigenden Klasse deffinieren und dieses als ItemTemplate der Listview zuweisen. Damit werden dann Änderung an Objekten der Liste automatisch angezeigt. Zu min in der Theorie: Das ist im Mom noch ein bischen verbuggt und Du musst einen Standart Workaround für die Observable List Einbauen .... ein SampleCode kann ich bei bedarf mal erstellen - meld dich einfach wenn das benötigt ist.
  9. Hallo, ich habe Dir mal ein Sample Code mit einigen Kommentaren geschrieben. Die Oberfläche besteht aus einer Form mit einer Listview, einem Start knopf und einem Knopf zum wild draufrum drücken um zu zeigen dass die Form tatsächlich noch reagiert. Zusätlich liegt demProgramm noch eine Klasse bei deren Instanzen in der Listview dargestellt werden. Der Code der Form beinhaltet das erzeugen der darzustellenden Instanzen so wie den nötigen Code um eine längere Arbeit im Hintergrund zu sumulieren und die Oberfläche während der "Arbeitszeit" reaktiv zu halten. Zudem wird während der "Arbeitzeit" die Oberfläche manipuliert (es werden Items zur Listview hinzugefügt). Trotz all dem bleibt diese reaktiv. grundsätzlich soll das nur ein einfaches Beispiel sein. Wenn Du länger Abreiten am Objektmodell von statten gehen lassen willst solltest Du diese Arbeit AUF KEINEN FALL in GUI Komponenten Reinbringen. z.B.: eine Form zeigt eine Liste von Autos un deren verfügbarkeit an. Die Liste der Autos muss immer aktuell sein und somit regelmäßig (z.b. Alle 2 Sek) geupdatet werden. Zu dem soll der User noch selber ein bestimmtes Auto aus der Liste manuell Updaten dürfen. Das Grobe Design wäre dann eine Form für die Oberfläche (sammt Knopf) Eine Klasse Die ein Auto representiert. Eine Klasse die einen Automanager representiert. Der Automanager initialisert seine Liste, führt diese, Updated diese und kann einzelene Autos neuladen. Der Automanager verfügt über Events mit deren Hilfe er zu allen Programmteilen die sich für bestimmte Ereignise interessieren komunizieren kann. Der Form ist der Automanager bekannt und kann über öffentliche Methoden des Automanagers diesen Anweisen was tolles zu tun. Um auf Ereignise des Automanagers zu reagieren meldet die Form bei diesem eigene EventHandler an. Reaktiv.zip
  10. Mcolli

    WPF TreeView Problem

    Auf jeden Fall Bindings nutzen!!!11Elf Was musst Du machen ? 1. ObservableList<Type> nutzen statt List<Type> 2. Deine Objecte vom Typ <Type> ^^ von "INotifyPropertyChanged" erben lassen 3. (Wenn Deine Treeview ItemTemplates verwenden soll) Eine weitere Klasse implementieren, die dafür sorgt, dass auch das Ereignis "PropertyChanged", das deine Objecte durch die Implentierung von "INotifyPropertyChanged" werfen, dieses Ergeignis an die ObservableList weiterreichen. Diese Klassen den Instanzieren und der Treeview als [.....ich guck morgen nach] Property zuweisen. Das ist ein Workaround für einen bekannten Bug im .Net 3.5 Frame work !!!!! Morgen mach ich ein Sample Code für Dich.
  11. Hallo, Es gibt zwei Möglichkeiten warum diese Codezeile eine "NullReferenceException" 1. Die Variable "Container" ist mit null belegt. 2. "sie_sitzid" ist ein Propery, dessen "Get-Methode" mehr macht, als nur nur den Inhalt eines privaten Feldes zurück zu geben. Bsp: public class Cotnainer { private int _sie_sitzid; public int sie_sitzid { get { Database db = null; String sql = "Select bla From blu"; try { // KommentarMarke 1 db = DatabaseFactory.Create("ConnectionString"); } finally { // KommentarMarke 2 using (IDataReader reader = db.ExecuteReader(CommantType.Text, sql)) { if (reader.Read()) { return Covnert.ToInt32(reader["sie_sitzid"].ToString()); } } return _sie_sitzid; } } set { this. _sie_sitzid = value; } } } In dem Beispiel wird versucht "sie_sitzid" neu aus der Datenbank auszulesen. Wenn dort nix gefunden wird, wird der Wert der Feldvariable zurück gegeben. Wenn bei " // KommentarMarke 1" das erzeugen der Database fehlschlägt bleibt das feld "db" mit null belegt und das führt im finally block bei " // KommentarMarke 2" zu diese Exception die dann weiter gereicht wird an deine Codezeile. Wenn der Code von der Klasse "Container" in deinem Projekt hinterlegt ist und nicht z.b. via DLL eingebunden ist würde der Compiler bei " // KommentarMarke 2" anhalten und nicht erst bei deiner geposteten Codezeile. Database und DatabaseFactory sind Klassen der "Microsoft Enterprise Library"
  12. Mcolli

    Image Problem WPF

    Moin, das Problem habe ich gefunden aber leider noch keine richtige Lösung: Das Problem ist dass das Layout deines Fenster / deiner Image vor dem Erzeugen der neuen Bitmap noch nicht geupdatet wurde, da das Erzeugen der BMP und das Updaten des Layout im selben Thread läuft und so mit dem Updaten gewartet wird während Du schon die Imageberechnest. Bei Windows XP wird das Problem nicht auftauchen da ein WPF Fenster dort in einem Windows.Forms Container läuft. Kopier mal folgenden Code rein. Du wirst bemerken dass es zu min. manchmal klappt (in dem Snippet ist die Zeitabstimmung zwichen dem WPF Thread und dem BMP Erzeugungsthread katastrophal aber ich hab nicht mehr so viel Zeit da meine Freundin auf der Bettkante wartet: private Thread t; private void test() { [INDENT] this.Dispatcher.Invoke(new ConvertScreenshotDelegate(ConvertScreenshot), new object[] { });[/INDENT] } private void ConvertScreenshot() { [INDENT]if (_Ms != null) { [INDENT] _Ms.Dispose();[/INDENT] } GetBitmap(); //hier erfolgt dann die Umwandlung von _Bmp _Ms = new MemoryStream(); _Bmp.Save(_Ms, ImageFormat.Bmp); _Image.Source = BitmapFrame.Create(_Ms);[/INDENT] } private void OnWindowLocationChanged(object sender, EventArgs e) { [INDENT] t = new Thread(new ThreadStart(new ConvertScreenshotDelegate(test))); _Image.Source = null; t.Start();[/INDENT] } private void GetBitmap() { [INDENT]_Bmp = new Bitmap(Convert.ToInt32(ActualWidth -BorderThickness.Left - BorderThickness.Right), Convert.ToInt32(ActualHeight - BorderThickness.Top - BorderThickness.Bottom - _Menu.ActualHeight)); Graphics g = Graphics.FromImage(_Bmp); g.CopyFromScreen(Convert.ToInt32(Left + BorderThickness.Left), Convert.ToInt32(Top + BorderThickness.Top + _Menu.ActualHeight), 0, 0, new System.Drawing.Size(_Bmp.Width, _Bmp.Height));[/INDENT] } Musste halt noch was dran arbeiten aber sollte der Denkanstoß in die richtige Richtung sein :upps
  13. Sehr schön, dass Du Deinen Fehler selbst gefunden ist, noch viel schöner, dass Du mit WPF-Arbeitest. Hab auch schon das UI für eine komplexere Anwendung mit WPF gemacht und war begeistert, vor allem das Property-System dahinter und der/die Dispatcher habens mir angetan .... kein nerfiges "Event-Delegate-Invoke-von hinten in die Brust und durchs Knie wieder raus" rumgeiere für länge Update- bzw Ladejobs von Objektlisten und die daraus resultierende Aktualisierung in der Oberfläche
  14. Wie gesagt, ich konnte den Performance-Verlust zuhause nicht nachvollziehen. Mein Rechner ist aber auch neu und von mir konfiguriert worden, so ist u.a. die Fragmentation der Dateien bei annährend 0% Allgein gesehen nutzt Du ja die Klassen aus dem .NetFramework (System.IO - Namespace). Diese bieten Dir ja High-Level Schnittstellen um aufs Dateisystem der Festplatte zuzgreifen. Meine Vermutung ist die, das Windows intern eben nicht das .NET Framework zugreift sondern direkt den MFT ("Master File Table" - also das Inhaltsverzeichnis bei NTFS-konformen Platten) ausliest und gegenbenfalls diesen indeziert. Diese Vermutung begründet sich dadadurch, dass die Fähigkeit von einer Festplatte zu lesen bzw auf eine Festplatte zu schreiben heute wohl eines der ersten Sachen ist die man so implementieren muss wenn man ein Betriebsystem schreibt. Das ist wie gesagt nur ne Vermutung, die ich aufgrund meines Allgemeinwissens aufstelle, mir fehlt da die Muße mich genauer schlau zu machen, da ich der Ansicht bin man sollte System.IO nutzen und wenns zu lahm ist muss man das vor dem Benutzer seiner Software verschleiern oder Ihn mit tollen Warteanimationen bei Laune halten. Eine Andere gute Sache um lange Ladezeiten zu kaschieren ist "Paging"... empfielt sich aber eher beim Umgang mit Datenbanken ....
  15. ich hab Vergessen den Kompletten Code einzufügen: Also als Anhgang fidnest du eine Sample Klasse ..... als .txt. Diese Klasse ist eine Form incl des Designer Codes ... also kansnte einfach in ".cs" umbennen, einem Projekt hinzufügen und mittels "(new Class1()).Show()" dann anzegien lassen .... der Pfad "D:\Windows\System32" wird bei dir nicht auffindbar sein. Neues Textdokument.txt
  16. Hallo, ich habe versucht Dein Problem zuhause mit dem Sample Code nachzubilden, konnte aber den Performanceverlust nicht spüren. Ich habe allerdings kein Netzwerkfestplatten zu hause und in sofern musste ich das ganze mit nem lokalen Ordner versuchen (mit "nur" 2k Dateien drin). Nicht desto trotz wäre ich nicht Olli wenn ich Dir nicht zu mindestens einen Lösungsvorschlag unterbreiten würde und ich hab sogar zwei. Der erste is sehr einfach aber evtl nicht ausreichend für deine Zwecke: Binde das Array an deine DataGridView: DirectoryInfo dirInfo = new DirectoryInfo(listPath.Text); FileInfo[] dirFiles = dirInfo.GetFiles(); lblNumberOfFiles.Text = dirFiles.Length.ToString(); dataGridFiles.DataSource = dirFiles; Der Zweite vorschlag ist komplezierter aber dafür auch sehr schön: Du trennst das Iterieren über die Dateien und das Erzeugen einer neuen "Row". Das Dauert zwar noch ein wenig länger dafür sind die ersten 40+ "Row"s annähernd sofort da und der Benutzer kriegt nur bedingt mit das neue "Row"s reingeschoben werden. Ausserdem bleibt so Deine Anwendung interaktiv: Vorweg: Kopier die folgenden Codes erstmal in deine Form rein und lies dann was passiert .... so wirkt das nicht ganz so verwirrend (gerade wenn Dir "Delegates" und "Events" und "Invoke"-Methode nichts sagen). Also wie wird gemacht: Zu erst deklarierst du ein "Delegate" und ein "Event" innerhalb deiner Form: public partial class Form1 : Form { [INDENT] public delegate void AddRowDelegate(DataGridViewRow theRow); public event AddRowDelegate RequestRowAdding; ........ [/INDENT] } Anschliesend meldest Du im Konstruktor deiner Form einen Handler für Dein Event an. Das machst du indem Du diese Zeile beim Kosntruktor hinzufügst: this.RequestRowAdding += new AddRowDelegate(OnRequestRowAdding);[/INDENT] "OnRequestRowAdding" ist eine Methode die jetzt hinzugefügt werden muss. Diese muss mit der Signatur des Delegates "AddRowDelegate" übereinstimmen Also Rückgabetyp:void und Parameter:DataGridViewRow Gesagt getan wir fügen die Methode hinzu: private void OnRequestRowAdding(DataGridViewRow theRow) { [INDENT] this.Invoke(new AddRowDelegate(addRowHandle), new object[] { theRow });[/INDENT] } Jetzt sollte sich Dir die Frage stellen wiese die als Parameter übergebene "DataGridViewRow" nicht deiner DataGridView hinzugefügt wird sondern noch mal ein "AddRowDelegate" erzeugt wird.... Das soll verhindern, dass, wenn das oben benannte event aus einem anderen Thread heraus gecallt wird, es zu einer IllegalCrossThreadOperation kommt.... Also die " void OnRequestRowAdding(DataGridViewRow)" -Methode leitet einen neuen "AddRowDelegate" mittels der "this.Invoke(....)"- Methode an den Thread weiter in dem "this" gerade läuft .... also an den Windows.Forms-Thread. "addRowHandle" ist also der "Handler" für die Invoke-Methode. diese Methode sieht so aus: private void addRowHandle(DataGridViewRow theRow) { [INDENT]dataGridFiles.Rows.Add(theRow);[/INDENT] } Das Fetschen der Dateien wird praktisch genau so wie bei deiner Methode gemacht: deine Methode sollte dann So aussehen dg_anzeige.DataSource = null; Thread worker = new Thread(new ThreadStart(delegate() { [INDENT] DirectoryInfo dirInfo = new DirectoryInfo(@"D:\WINDOWS\system32"); FileInfo[] dirFiles = dirInfo.GetFiles(); int count = dirFiles.Length; for (int i = 0; i < dirFiles.Length; i++) { DataGridViewRow myNewRow = new DataGridViewRow(); DataGridViewTextBoxCell cell2add = new DataGridViewTextBoxCell(); cell2add.Value = dirFiles[i].Name; myNewRow.Cells.Add(cell2add); cell2add = new DataGridViewTextBoxCell(); cell2add.Value = dirFiles[i].Length; myNewRow.Cells.Add(cell2add); this.RequestRowAdding(myNewRow); } [/INDENT] })); worker.Start();
  17. Es sind kwh .... "Kilowatt Stunden" nicht "Kliowatt PRO Stunde".. Das ist aber auch es interessant wenn Du bei 60kW und eine Betriebsdauer von 1/4 Stunde die kwh ausrechen willst. Dann ist das nämlich: 60 kW + 1/4 h = 15kWh...
  18. WPF (Window Presentation Foundation) WPF ist praktisch Windows.Forms 2.0 Meiner Meinung nach DIE Technik zur Oberflächengestalltung der Zukunft. Leider ist der Ansatz für WPF ein ganz anderer als bei Windows.Forms. Josh Smith ein Microsoft Most Valued Partner hat ein tolles Einsteiger Tutorium in seinem Blog.... der Junge ist echt fit :uli WPF by Josh Smith Anschauliches Beispiel Grundlage dafür ist .NET Framework 3.0 und mit Visual Studio 2010 kommt auch ein Designer. Den 1. Client für ne Anwendung von mir hab ich schon mit WPF gemacht und bin begeistert.
  19. Mcolli

    Firefox-Reloader

    Der Änder Knopf ist weg.... deshalb noch ne Post.... Da sind 2 Fehler im Snippet (ganz ganz leichte Fehler)..... Am besten findeste selbst raus was falsch ist ....(2 IF-Bedingungen oder auch Bedingte Ausdrücke sind flasch und noch etwas, dass mit dem Process, der gestartet wird, zusammen hängt Zum Thema KeyLogging: Du Kannst aus dem Programmcode mittels eines einfachen "StreamWriters" nur Eingaben Loggen, die erfolgen wenn das ausführende Prorgramm fokusiert ist. Du brauchst was anderes: Die Technik ,die Du verwenden musst nennt sich Hooking. Dabei "hängt" man sich an bestehenede Ereignise dran und der so "dran gehängte" Programmcode wird zu sätlich ausgeführt ..... such mal nach "c# global Hooking". Ich würde allerdings die Lizenskosten auf das Snippet von oben verwetten, dass Dein Virenscanner dann abgeht wie ein Hamster auf Koks.
  20. Mcolli

    Firefox-Reloader

    Das ist ein sehr komplexes Thema was du da vor hast. Allein das überprüfen ist ohne fortgeschrittene Kentnisse nicht vernünftig möglich. Da ich wenig Zeit habe gerade hab ich nur ein Snippet vorbereitet .... das kannste ja mal durch arbeiten. Kannst Dich per PM bei mir melden dann können wir mal Treffen im Teamspeak, Ventrilo, Mumble oder was vereinbaren. Neues Textdokument.txt
  21. Mcolli

    VB.NET: Taschenrechner

    Bevor Du Dich mit einer konkreten .Net Programmiersprache wie etwa VB.net oder C# oder ähnlichem beschäftigst solltest Du evtl. erstmal verstehen was eine sogenannte "objektorientierte" Programmiersprache ist. Wenn Du das begriffen hast solltst Du versuchen dein Problem (wie mache ich einen Taschenrechner) auf ein Objektmodell abzubilden. Dies ist in den Fall relativ einfach da das Programm zu 90% aus der Oberfläche bestehen wird (deinem Fenster). Für den Anfang würde ich Dir empfehlen den Taschenrechner auf die 4-Grundrechenarten zu ebschränkgen (Addition, Subtraktion, Multiplikation, Division). Ich könnte bis zum Wochende einen Formelparser von mir von JAVA auf vb.net umschreiben. Dann kannste den erstmal zu Kalkulation benutzen und dich auf das erstellen des Fensters und des Tastenfeldes so wie der Eingabeüberprüfung (? wäre kein gültiges Token für einen mathematischen Ausdruck) konzentrieren.
  22. Mcolli

    CommandButtons OnClick?

    ich hab sehr wenig Ahnung von ASP.net... ich glaube aber das geuschte Event ist "CommandCellClick". Bei dem, zu diesem Event passenden, Delegate sind 2 parameter angemeldet: object sender EventArgs e Mit "GridCommandCellElement geklickteZelle= (GridCommandCellElement)sender;" kommst Du an die Zelle die geclickt worden ist. Dann musste Dich ein bischen durchwuseln um die Zelle zu identifizieren. z.B. object bla= (object)cell.RowInfo.Cells["bla"].Value;
  23. Mcolli

    Array vs list

    Hängt von der Größe der Liste ab.... schneller aber in jedem Fall ... es sei denn alle in der List gespeicehrten Objkete haben den gleichen HashCode .... denn dann muss die (einzige) LinkedList genauso wie ein Array durchlaufen werden.
  24. Mcolli

    Array vs list

    Zu nächst einmal hat ein Array eine statische größe und ist in jedem Fall Typ gebunden. Eine List musst nicht typgebunden sein und ist keinem Fall statisch. Bsp: try { [INDENT]int[] zahlen = new int[2]; zahlen[0] = 3; zahlen[1] = 1; zahlen[2] = 5; // IndexOutOfRangeExpcetion[/INDENT] } catch { [INDENT]for (int i = 0; i < zahlen.Length; i++) { [INDENT]Cosonole.WriteLine(zahlen[i]);[/INDENT] }[/INDENT] } List<int> zahlenList = new List<int>(); zahlen.Add(3); zahlen.Add(1); zahlen.Add(5); //Möglichkeit 1 for (int i = 0; i < zahlenList .Length; i++) { [INDENT]Cosonole.WriteLine(zahlenList [i]);[/INDENT] } //Möglichkeit 2 IEnumerator enu = zahlenList .GetEnumerator(); while (enu.MoveNext()) { [INDENT]Cosonole.WriteLine(enu.Current);[/INDENT] } Andere Vertreter der Listen, die von IList erben, sind nicht Typen gebunden und befinden sich im Namespace System.Collections, wie etwa ArrayList. Meiner, ich würde sagen reichhaltiger Erfahrung nach, lohnt sich in 90% der Fälle die Verwendung von List<deinTyp>. Wenn Du eine Liste mit verschiedenen Typen führen willst, deren Klassen Du selbst schreibst empfehle ich Dir eine Schnittstelle zu deffinieren, die Du in jede Konkrte Klasse einbindest und dann den Schnittstellentyp als List-Typ anzugeben: Schnittstelle: IKatalogartikel; Klassen: CD -- erbt von IKatalogartikel; Buch -- erbt von IKatalogartikel; XXXVideo -- erbt von IKatalogartikel; List<IKatalogartikel> list = new List<IKatalogartikel>(); list.Add(new CD("Slatko")); list.Add(new Buch("Der Fischer und das Meer")); list.Add(new XXXVideo("Schweinerei auf der Bounty")); Fortgeschrittenes Wissen: Klassen die von IList erben speichern die Objekte intern in einem Array mit dem Typ LinkedList. Es gibt alse eine LinkedList an jeder Position des Arrays. Wenn man ein Objekt zu der IList hinzufügen will, wird anhand des Hash-Wertes des Objektes und der aktuellen Länge der IListe der Index der LinkedList ermittelt in die das Objekt eingeordnet wird. Deshalb wäre es ein fataler Fehler die "bool Equals(object)"- Methode einer Klasse zu überschreiben ohne die "int GetHashCode()"-Methode zu überschreiben. Für die "GetHashCode()" muss folgende Aussage zutreffen: "Zwei Objekte die im Sinne der "bool Equals(object)" gelcih sind müssen den selben Hashwert besitzen" Die annahmen das Objekte, die im Sinne der "bool Equals(object)" nicht gleich Sinn, verschiedene Hashwerte Aufweisen müssen ist absolut falsch. Theoretisch würde es genügen eine Hashmethode so zu überschreiben: public override int GetHashCode() { [INDENT]return 1;[/INDENT] } Dies würde aber einen Performance Verlust bei der Suche in einer IList bedeuten da alle Objekte an derselben Index-Position gespeichert werden. Eine LinkedList ist eine Liste bei dem die einzelnen Bestandsteile Sequentiell Durchlaufen werden können. Bsp: LinkedListObjekt1--->LinkedListObjekt2-->LinkedListObjekt3 Wenn "LinkedListObjekt3" gesucht wird, wird "LinkedListObjekt1" (Anfang der Liste) gefragt "Bist du LinkedListObjekt3" --> Antwort "Nein". Im nächsten Schritt wird LinkedListObjekt1 angewiesen sein Folgeelement zu befragen usw.
  25. Hab das Problem auch gehabt. Grundsätzlich ist Fokusklauen immer das aller aller uber uber schlechteste was man in einer Anwendung machen kann, da das den Benutzer nur aufregt. Die Lösugn für dieses Problem ist ein Zusatz Programm: Click Yes Das funzt schon seid geraumer Zeit bei mir auf der Arbeit. Light Version ist umsonst. Sry Reduntante Post kann gelöscht werden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...