Laden...
F
feadur myCSharp.de - Member
Entwickler Bonn Dabei seit 11.03.2005 722 Beiträge
Benutzerbeschreibung

Forenbeiträge von feadur Ingesamt 722 Beiträge

20.11.2006 - 15:35 Uhr

du musst als XmlElement natürlich dasjenige element übergeben, das vater von allen <menu> tags ist. meine methode arbeitet jetzt der einfachheit halber nur mit <menu> tags. du kannst sie natürlich auch mit dem root <tree> element aufrufen, musst dann halt eben nur prüfen, ob es ein solches ist und wenn ja, die abfrage der id auslassen.
ungefähr so:

void IterrateTree(XmlElement menuElement)
        {
            XmlNodeList lst = menuElement.SelectNodes("menu");
            if (lst.Count == 0) //Rekursionsanker
            {
                return;
            }
            if (menuElement.Name.Equals("menu"))
            {
              //id holen
              string id = menuElement.Attributes["id"].Value;
              //hole inhalt des name tags
              string name = menuElement.SelectSingleNode("name").InnerText;
            }
            //für alle <menu> child elemente...
            foreach (XmlElement element in lst)
            {
                IterrateTree(element);                
            }
        }

diese modifikation ruft die daten nur ab, wenn es sich auch wirklich um ein <menu> tag handelt.

alternative:
du könntest auch einfach alle <menu> tags unter <tree> holen und dann für alle diese IterrateTree() aufrufen.
Das allerdings, musst du selbst wissen =)
Gruß

20.11.2006 - 13:11 Uhr

Intuitiv würde ich sowas vorschlagen (nicht getestet)


void IterrateTree(XmlElement menuElement)
        {
            XmlNodeList lst = menuElement.SelectNodes("menu"); 
            if (lst.Count == 0) //Rekursionsanker
            {
                return;
            }

            //id holen 
            string id = menuElement.Attributes["id"].Value; 
            //hole inhalt des name tags 
            string name = menuElement.SelectSingleNode("name").InnerText; 

            //für alle <menu> child elemente... 
            foreach (XmlElement element in lst)
            {
                IterrateTree(element);                 
            }
        }

13.11.2006 - 23:02 Uhr

das kann nicht gehen weil du immer ein \r\n hinzufügst:


contentBuilder.Append("\r\n");

außerdem solltest du, wenn du schon mit zahlen als rückgabe arbeitest, auch integer typen und nicht strings verwenden.

das ToString() in der Zeile


return content.ToString();

ist überflüssig, da content vom typ string ist.

09.11.2006 - 21:01 Uhr

Es gibt die Visual Studio Erweiterung "Orcas", die seit dem 1.9. als RC1 zum Download bereitsteht. Der WPF Designer "Cider" ist allerdings noch im Beta Zustand, Dinge wie Custom Controls funktionieren damit noch nicht. Cider ist aber schon in der Lage, das erstellte XAML Dokument als BAML (binäres XAML) in die Applikation einzubetten und mit dem entsprechenden C# Code zu verbinden, von daher lohnt es sich schon das Teil mal auszuprobieren.

04.11.2006 - 02:14 Uhr

was spricht denn gegen das komplette auslesen?

29.10.2006 - 19:05 Uhr

Reguläre Ausdrücke taugen ja beim Compilerbau vor allem zur lexikalischen Analyse. Also dem Erstellen von Tokens aus der Zeichenfolge (Code). Wenn du einen richtigen LL(k) Parser schreiben willst, kommst du damit jedenfalls nicht weiter. Ein ganz schöner Parser Generator, der auch C# Code generiert ist m.E. CoCo/R: http://www.ssw.uni-linz.ac.at/Coco/

29.10.2006 - 18:11 Uhr

Ok, scheinbar gibt es für die mit Create() erzeugten Objekte einige Verbesserungen. Für snoopy90's Zwecke sollten aber beide Möglichkeiten in jedem fall ausreichend sein.

29.10.2006 - 17:54 Uhr

Hallo knub,

das stimmt leider nicht, XmlWriter ist eine abstrakte Klasse. XmlTextWriter ist von dieser abgeleitet.

29.10.2006 - 17:22 Uhr

Original von snoopy90
Ich kapier das ganze XML Zeugs nicht ganz.

Dann solltest du dich einlesen.

29.10.2006 - 15:49 Uhr

Rausschreiben mittels System.Xml.XmlTextWriter.
Einlesen mit System.Xml.XmlTextReader oder System.Xml.XmlDocument.

28.10.2006 - 15:14 Uhr

Hi,

etwas Code wäre nützlich... =)

25.10.2006 - 19:03 Uhr

dem schließe ich mich an.
die wahl der programmiersprache hat logischerweise keinen einfluß auf die rechenleisung der CPU. bei genauer messung (inkl. ladevorgang) müsste das c# programm eigentlich noch langsamer sein, da zuerst der CLI Code vom Jitter in Maschinencode umgewandelt werden muss, was bei VB 6 nicht der Fall ist (da nativer Code).

20.10.2006 - 13:18 Uhr

um ein eigenes steuerelement der toolbox hinzufügen zu können, MUSST du eine dll dafür erzeugen.
Ansonsten kannst du das control nur verwenden, indem du es händisch deinem code hinzufügst.

20.10.2006 - 10:29 Uhr

Array -> File
oder
File -> Array ??

Letzteres geht beispielsweise so:

string[] lines = File.ReadAllLines("DeineDatei.txt");

Das wurde aber glaube ich auch schon 2000 mal in diesem Forum besprochen!!

20.10.2006 - 09:58 Uhr

Meines Wissens gibt es dafür keinen "Befehl". Gäbe es einen, würde dieser aber auch kaum anders arbeiten als mit einer Schleife.

20.10.2006 - 09:51 Uhr

was allerdings nichts mit vs 2005 zu tun hat.

19.10.2006 - 16:25 Uhr

Form.AcceptButton / Form.CancelButton

19.10.2006 - 10:17 Uhr

warum ermittelst du x nicht einfach im LostFocus Handler anstatt es im GotFocus in eine member variable zu schreiben?

15.10.2006 - 00:36 Uhr

Hi,
ich habe gerade mal dein Programm ausprobiert. Folgende Dinge sind mir spontan aufgefallen:

  • Wenn ich das Programm starte, kommt eine Meldung "Sie haben noch keine Erinnerungen hinzugefügt!"
  • Wenn ich eine neue Erinnerung hinzufüge, wird diese erst dann in der Liste angezeigt, wenn ich vom aktuellen Datum auf ein anderes wechsel und wieder zurück.
  • Wenn ich eine Erinnerung auswähle und dann auf "Erinnerung löschen" klicke, kommt ein neues Dialogfeld hoch, in dem ich das ganze nochmal machen muss. Ist ziemlich umständlich.
  • Wenn ich eine Erinnerung in diesem Dialogfeld gelöscht habe, wird die Erinnerung nicht aus der Liste im Hauptfenster entfernt.
  • Wenn ich diesen gelöschten Eintrag dann auswähle, stürzt das Programm ab:

************** Ausnahmetext **************
System.ArgumentOutOfRangeException: Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein.
Parametername: index
bei System.Collections.ArrayList.get_Item(Int32 index)
bei MKayReminder.MainForm.DayTermineListView_SelectedIndexChanged(Object sender, EventArgs e)
bei System.Windows.Forms.ListView.OnSelectedIndexChanged(EventArgs e)
bei System.Windows.Forms.ListView.WmReflectNotify(Message& m)
bei System.Windows.Forms.ListView.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

  • Die gelöschten Einträge sind erst weg, wenn ich wieder das Datum umschalte.
15.10.2006 - 00:28 Uhr

Zu bedenken ist aber auch, dass viele Firmen jeweils zur übernächsten Version von Windows wechseln. Der nächste Wechsel wäre dann demnach von Win2000 auf Vista.
Vista ist in vielen Bereichen reizvoll, M.E. ist vor allem das weiterentwickelte Sicherheitskonzept ein ausschlaggebender Punkt.

Was uns WPF, WF und WCF dann tatsächlich an Vorteilen bringen ist natürlich noch mal einzeln zu diskutieren.

13.10.2006 - 23:34 Uhr

dafür gibt es etliche beispiele im netz in form von open source projekten.
siehe z.b. hier: http://www.codeproject.com/cs/samples/pdf2text.asp

13.10.2006 - 16:51 Uhr

vermutlich hast du tags bzw. das dokument nicht abgeschlossen. etwas code wäre hilfreich um dir helfen zu können.

12.10.2006 - 19:31 Uhr

zur lösung deines problems würde ich dir die verwendung eines memory profilers empfehlen, siehe z.b. http://memprofiler.com/

03.10.2006 - 19:25 Uhr

Hallo,

Original von Sara
Bisher hab ich nur die Lösung, das es mir zwar die Listen auflistet, aber unter dem Dateinamen (Bsp. Filme.xml, Musik.xml), das ist aber ein wenig unpassend für mich.

was wäre denn dann passend für dich? Ich verstehe Dein Problem grad nicht, wenn du doch sagst dass die Titel aufgelistet werden.

03.10.2006 - 02:44 Uhr

nimm die datei, verwende reguläre ausrücke wie <.*> um alle tags zu löschen. danach erhälst du nur noch den text des dokuments.

27.09.2006 - 23:03 Uhr

ich denke das problem an goto ist, dass du es überall verwenden kannst. daher schleicht sich bei vielen der berühmte spagetthi code ein. break und continue hingegen sind spezielle sprunganweisungen in schleifen. deren einsatz halte ich, solange sie überlegt eingesetzt werden, für enorm sinnvoll.

15.09.2006 - 12:27 Uhr

Übergabe an unmanaged class am besten per gcroot<>

Kopieren:

Marshal.Copy Method

15.09.2006 - 11:13 Uhr

Indem du rekursiv durch die Unterverzeichnisse gehst und die Attribute per File.SetAttributes() entfernst.

15.09.2006 - 11:10 Uhr

Was Value beinhaltet, hängt vom Type der Node ab. Bei Nodes vom Type XmlElement ist Value immer null. Dein Ansatz, den Text per .InnerText zu lesen, ist der Richtige.
Siehe auch hier:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXmlNodeClassValueTopic.asp

15.09.2006 - 10:13 Uhr

Wenn ich mich nicht irre, ist der Namespace in Type.Fullname enthalten?

Fullname := <Namespace>.<Klasse>

Gruß

13.09.2006 - 11:51 Uhr

wenn diese dll ein .net assembly ist: ja. kannst sie an einen host-prozess anbinden und dann debuggen, falls debug-informationen enthalten sind. gruß

09.09.2006 - 20:57 Uhr

nein mach das nicht, weil ich schwachsinn geschrieben habe =)
da wir es ja hier mit einem neuen prozess zu tun haben, kann es ja logischerweise nicht funktionieren. um zwei instanzen zu verhindern, wäre das stichwort nachdem du suchen musst Mutex.

09.09.2006 - 20:47 Uhr

@WhiteLion,

damit wird aber die Form bei jedem start neu erstellt.

09.09.2006 - 20:45 Uhr

Warum hälst du dir nach dem ersten Start nicht einfach eine Referenz auf die Form:


                ..
                static Form1 mainForm = null; 
                ..
                if (i != System.IntPtr.Zero)
                {
                    // !!!! Hier brauche ich die Form1 Instanz um z.B. den Text
                    // !!!! von Form1.Text zu ändern...
                    mainForm.Text="foo";
                    ShowWindowAsync(i, 9);  // Zeige Fenster
                    SetForegroundWindow(i); // Vordergrund
                }
                else
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    mainForm = new Form1(); 
                    Application.Run(mainForm);
                }

08.09.2006 - 14:44 Uhr

ich denke, dann hast du etwas falsch gemacht. wie heissen deine resx dateien, wie hast du das resourcemanager objekt erstellt? ohne nähere angaben wird dir niemand helfen können.

08.09.2006 - 11:24 Uhr

ja, mir fällt grad ein, dass die x,y koordinate (links oben) bei ClientRectangle immer 0,0 ist. von daher überlappen sie sich logischerweise immer.
aber das prinzip ist ja klar. mach dir am besten 2 rectangle's mit den richtigen abmessungen der kontrollen und gehe dann per intersectswith rein.

08.09.2006 - 10:31 Uhr

Jung, schieb dir mal ne ruhige Kugel...

08.09.2006 - 10:04 Uhr

was ist das denn für ein abenteuerlicher konstruktor?

versuch mal


ResourceManager rm = new ResourceManager("NameDeinerResxDatei",
Asembly.GetExecutingAssembly());

08.09.2006 - 09:53 Uhr

Original von BAUHAUS
Allerdings muss man um an das "Parent" Attribute des momentanen Treenodes ranzukommen, den Treenode in der Treeview "selecten".

Warum denn das? TreeNode.Parent ??

Blöderweise kann ich nicht einfach

Treeview.SelectedNode = treenode;  

machen.

Laut MSDN Doku sollte das wunderbar funktionieren.

08.09.2006 - 09:44 Uhr

siehe dazu ResourceManager Klasse.

08.09.2006 - 09:36 Uhr

Aber da es ja PictureBox Kontrollen sind, kannst du ja deren ClientRectangle nehmen.
Ungefähr so:


if (pictureBox1.ClientRectangle.IntersectsWith(pictureBox2.ClientRectangle)) 
{
  //..boxen kollidieren
}

Aber wenn du ein Spiel schreiben willst, würde ich dir dringend raten Windows Forms komplett zu vergessen und statt dessen DirectX zu nehmen.

07.09.2006 - 17:34 Uhr

System.Drawing.Rectangle.IntersectsWith()

06.09.2006 - 19:23 Uhr

Die Variable strKitShare kann doch weiterverwendet werden oder?

Ja, du musst sie allerdings auch initialisieren.

 
string strKitShare = null; 

05.09.2006 - 20:36 Uhr

versuch es mal mit public....

05.09.2006 - 02:29 Uhr

hi,

nochmal nachgelesen:
die Permission ist eigentlich überflüßig, es sei denn der aktuelle Benutzer soll vom Code her in seinen Rechten eingeschränkt werden.
Security Angaben können im Constructor von RegistryKey übergeben werden.

Warum steht die Instanzierung deines Permission-Objekts unter den using Anweisungen? =)

Naja, probier es mal so:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Security.Permissions;


namespace UPDATE
{
		
	public class App
	{
		[STAThread]
		public static void Main(string[] args)
		{
			Application.EnableVisualStyles();
			Application.SetCompatibleTextRenderingDefault(false);
			Application.Run(new Form1());
		}
		
	}		
		
    public partial class Form1 : Form
    {    	
    	Button button1 = new Button(); 
		
        public Form1()
        {
            this.Controls.Add(button1);
            button1.Click+= new EventHandler(button1_Click);
        }
       

        private void button1_Click(object sender, EventArgs e)
        {        	
        	RegistryKey Handle = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion", RegistryKeyPermissionCheck.ReadWriteSubTree);      	                                                      
            
            if (Handle == null)
            {
                MessageBox.Show("Der Key existiert nicht!");
                return;
            }
            try
            {
            	//Bei RegistryValueKind kann nur byte[] übergeben werden...
            	Handle.SetValue("UPDATE", new byte[]{1,2,3}, RegistryValueKind.Binary);
                Handle.Close();
            }
            catch
            {
                MessageBox.Show("Wert konnte nicht erstellt werden!");
            }
        }
    }
}

04.09.2006 - 21:43 Uhr

Hi,

du musst vorher eine entsprechende Permission anfordern (Code Access Security).
Siehe dazu die MSDN Doku zur Klasse RegistryPermission.

Das ganze geht dann ungefähr so:


RegistryPermission permission = new RegistryPermission (
RegistryPermissionAccess.AllAccess,
@""Software\\Microsoft\\Windows\\CurrentVersion");
permission.Demand ();

03.09.2006 - 20:04 Uhr

wenn du nur umlaute umwandeln willst ist das ganze ja ziemlich einfach.
entweder wandelst du die zeichen in ihren (hexa-)dezimalen unicode wert um wie bereits von Nordwald beschrieben, oder du baust dir eine kleine lookup table in form eines zweidimensionalen arrays, dass die Zeichen auf den Entity-String mappt, also etwa so


string[,] entityMap = 
{
 {"Ä", "&Auml;"}, 
 {"Ü", "&Uuml;}, 
...
} 

Und wandelst damit entsprechend um.

03.09.2006 - 12:01 Uhr

Stichwort "Orcas"
http://www.microsoft.com/downloads/details.aspx?familyid=AD0CE56E-D7B6-44BC-910D-E91F3E370477&displaylang=en

Ist allerdings noch die CTP Version. Keine Ahnung ob es da jetzt auch schon einen RC von gibt?

30.08.2006 - 20:58 Uhr

dann poste doch mal bitte ausschnitte deines codes und sag wo es genau hakt...

30.08.2006 - 20:53 Uhr

Diese Art Bequemlichkeit, stinkt mir.

Das sehe ich auch so.

Der Beispielcode unten resultierte aus meiner eigenen Neugier für diese mir bisher unbekannte Klasse.

Eigentlich kann und darf es nicht sein, dass Leute nicht bereit sind, solche einfachen Dinge selbst zu recherchieren, vor allem wenn "die Klasse bekannt ist".