Laden...
M
markus.bodlos myCSharp.de - Member
Österreich / Steiermark Dabei seit 01.03.2008 205 Beiträge
Benutzerbeschreibung

Forenbeiträge von markus.bodlos Ingesamt 205 Beiträge

21.07.2008 - 14:47 Uhr

Application.Exit()

mfg Markus

21.07.2008 - 00:46 Uhr

da ich beide hände brauch die Tasten zu drücken...

hab ein notebook da geht sichs aus das ich mit dem rechten daumen das touchpad bedienen kann 😜

ch bin nur auf dem Stand das man den Taskmanager per Registry deaktivieren kann, sodass dann eien Meldung alá "Der Taskmanager wurde vom Administrator deaktiviert" kommt, aber die Fehlermeldung wollte ich eigentlich umgehen.

Ja kenn auch nur die Möglichkeit

sowie die Maustasten ncoh per Hook auszuhebeln

Und wie willst du dann die Sperre aufheben? 😁

mfg Markus

20.07.2008 - 22:12 Uhr

Also das ist kein prob, drücke und halte(!) ctrl + alt + del Taskmanager erscheint, zwar flackert aber dennoch benutzbar...

Du solltest den Taskmanager nicht über einen Timer beenden, es gibt wege den TaskMgr über die Registrierung generell abzuschalten, beziehungsweise den Aufruf verbieten.

mfg Markus

20.07.2008 - 21:59 Uhr

Hallo,

natürlich kannst du ein dictionary mit delgates machen. wie man mit deleates umeht findest du hier 🛈 📗 :rtfm:

ich würde das aber nicht zwingend umlegen dass wenn du die case anweisung in eine methode verpackst und über ein dict aufrufst du einen gewinn von 30% erzielst. Bedenke dass durch dieses Umgehen einige Nachteile entstehen können:

  • Du musst unter umständen mehr Variablen global in der Klasse definieren
  • Der Methodenaufruf über den Delegaten und der Rücksprung kosten auch zeit.

Ich denke dass sich das nicht auszahlt für ein paar case anweisungen mit ein paar zeilen code. aber du kannst es ja mal versuchen und deinen benchmark hier posten.

Zum Thema Benchmark, verwende zum Messen der Zeit besser die Klasse

System.Diagnostics.Timer

mfg Markus

Edit: Die Klasse heißt natürlich Stopwatch und nicht Timer

19.07.2008 - 01:15 Uhr

Alles Gute Forum!

18.07.2008 - 15:31 Uhr

@trib,

das ist für Felder einer Klasse natürlich eine Option in kombination mit dem Stacktrace lässt sich natürlich einiges zurückverfolgen. Meines erchtens genügt beim debuggen aber die Varaiblen mithilfe von VS zu beobachten und das Programm im Schrittmodus abzuarbeiten. In einem Produktiv System ist die Logging Variante natürlich vorzuziehen beziehungsweise gleich ein Dump zu erstellen und dieses analysieren.

Dein Vorschlag mit den Propertys hat leider auch einen Nachteil, er funktioniert nur auf Klassenebene. Um Variablen in einer Methode zu beobachten wäre der Aufwand so viel zu groß.

@martin_zi,

falls du wie trip beschrieben nur Felder auf Wertänderung mitschreiben willst könnte auch die Aspekt Orientierte Programmierung was für dich sein.

mfg Markus

18.07.2008 - 13:13 Uhr

Du kannst dir wenn die Anwendung gestartet wurde nur Varaiblen werde wie frisch schrieb ansehen, wenn sich dein prog im Pause Modus befindet (z.B. Brakepoint) oder du dein Programm Schritt für Schritt manuell durchläufst

mfg Markus

18.07.2008 - 11:47 Uhr

Hab ich nich nicht gewusst. Danke für die Info.

18.07.2008 - 01:23 Uhr

@SHyx0rmZ:

das ist aber nicht die Antwort auf die Frage des Fragenden.....

18.07.2008 - 00:50 Uhr

Wie willst du das in einem Dictionary vernünftig lösen? Das ist ja eh schon komfortabel:


                Dictionary<string, string> d = new Dictionary<string, string>();
                d.Values.ToList().ForEach(new Action<string>(delegate(string s) { s.Trim(); }));

mfg Markus

18.07.2008 - 00:44 Uhr

Hallo,

xxxprod meint ein Steurelementefeld, siehe HIER

mfg Markus

17.07.2008 - 15:46 Uhr

Entschuldigung, war mein Fehler hab nicht gesehen dass sich das auf WPF bezieht

mfg Markus

17.07.2008 - 14:06 Uhr

Hab gerade gesehen das JAck30lena schon schrieb, zur Ergänzung

in dem code den du postest wird eine Klasse CommonDialog verwendet die nichts mit dem eigentlichen dotnet CommonDialog zu tun hat, folglich wirst du in der MSDN nicht fündig werden.

Und deine Fehler sagen ja schon alles, wenn da steht "es wurde keine passende Methode zum Überschreiben gefunden" oder "implemetiert den geerbten Member nicht" was wird dann sein? richtig, die basis klasse passt nicht zu deiner abgeleiteten.

mfg Markus

17.07.2008 - 13:59 Uhr

Die eigenschaft SelectionMode bezieht sich nicht auf die Checkbox sondern auf den markierten Text
SelectionMode in der MSDN

was du hast ist doch eine CheckedListBox und keine normale oder?
Hier auch mal ein Link zur msdn

ich glaub dir wird nichts anderes übrig bleiben als das alte element auf cheked=false zu setzen, also bei jedem doppelklick eine prüfung durchführen ob ein anderes element schon gecheckt ist, wenn ja abwählen.

mfg Markus

17.07.2008 - 12:33 Uhr

der aktuelle dateipfad ergibt sich bei ner application aus:

C#-Code:

path = Directory.GetCurrentDirectory();  

stimmt schon aber das muss nicht gleich dem Pfad sein in dem die EXE liegt.

@shacknet:

Also bei mir gibts einen solchen Namespace nicht.

Du könntest ja auch in der MSDN nachlesen.... msdn link du musst den System.Windows.Forms Namespace öffentlich machen.

mfg Markus

17.07.2008 - 00:35 Uhr

Du sollst einfach vorher mit GetHashCode()die Hashes der Strings vergleichen bevor du die Equals methode nawendest um einen Vergleich durchzuführen.

die unterschiedlich viele Komma separierte Felder haben und ich dann eine Exception bekomme

das ist doch lein problem wenn du eine for each schleife verwendest, die passt sich schon der anzahl diener feler an.

mfg Markus

17.07.2008 - 00:30 Uhr

Mich würde interessieren warum es gerade ein dienst sein muss? worin siehst du die vorteile? nimm doch ansonsten einfach dein prog und minimiere es in den systray und das fenster zeigst du nur bei bedarf an. ist glaub ich die zeit unaufwendigste lösung für dein problem.

mfg Markus

17.07.2008 - 00:26 Uhr

Die prozesse bekommst du über die klasse


System.Diagnostics.Process

schau sie dir einfach mal an (besonders die statischen Methoden)


System.Diagnostics.Process.GetProcesses();
System.Diagnostics.Process.GetProcessesByName("....");

den Pfad zum Prozess solltest du so ekommen:


System.Diagnostics.Process.GetProcessesByName("....").MainModule.FileName 

mfg Markus

16.07.2008 - 23:33 Uhr

Hallo Hajoseb,

warum instanzierst du diese Klasse 350.000(!) mal???? Soweit ich das verstanden hab kann die Klasse ja nicht mehr als Umlaute zu Parsen und dafürnimmst halt ein assoziatives Array, nun gut aber wieso dann nicht einmal global instanzieren? wenn du aus gründen auch immer trotzdem öfters deine instanzierung brauchst dann mach daraus eine singleton klasse -> damit wird es nur einmal wirklich inistanziert und initialisiert. Eine statische Klasse würd natürlich auch gehen aber singleton ist OOP naher.

Edit (vergessen):

Was meimnst du mit vereinfachter initialisierung? Sowas:
(bin mir nicht sicher ab welcher framework version das funktioniert,ich hab 3.5)


            Dictionary<string, string> Umlaute = new Dictionary<string, string>()
            {
                { "Ä", "AE"}, 
                { "Ü", "UE"}
            };

und ich versteh sowieso nicht wie dein code funktionieren soll????

mit Dictionary<string> fehlt dir ein generischer parameter. und was soll

UmlauteÜbersetzung["Ä"] = "AE";

so legt man doch kein paar an?!?

mfg Markus

15.07.2008 - 13:01 Uhr

Schau dir mal das Rucksackproblem an,

Hier und Hier
mfg Markus

15.07.2008 - 12:56 Uhr

Hallo stav0815,

ich kann dein Problem anhand deines Posts nicht rausfinden, müsste schon ein wenig mehr code her und der Aufbau der Textdate
ien.
Was du aber ausprobieren kannst ist schritt für schritt den code zu debuggen, möliche fehlerquellen sind ja:

  1. er arbeitet die Schleife nicht ab sondern eine der abrechenden if abfragen trifft zu und das Prog bricht ab.

  2. ein fehler (-> mölicherweiße wegen deiner Converts) tritt in den Zeilen in der du in das Array schreibst auf, da du sie mit einem try ... catch umschlossen hast werden sie nicht abgearbeitet.

am besten im Schrittmodus debuggen.

Zum Stil des Codes:

  1. Deine Hauptabfrage
if (typ == "pi" || typ == "PI")

ist auch fehleranfällig, könnte ja auch sein das der typ = "Pi" ist, was ja Windows an sich egal ist, du aber dann nicht behandelst

Würde dir empfehlen (natürlich auch für txt):

if (typ.ToLower() == "pi")
  1. du schreibst:

StreamReader ausles = new StreamReader(path);
                    {
                       // Code...
                    }

warum die geschwungenen Klammern? Besser ist das ganze in einem Using Block zu verpacken dann sparst du dir auch die anzen ausles.Close()


using (StreamReader ausles = new StreamReader(path))
                    {
                       // Code...
                    }

  1. Du liesst ein und fragst dann ab ob überhaupt noch was eingelesen wurde, wenn nicht abbrechen

if (zeile == null)
                            {
                                ausles.Close();
                                break;
                            }

geht natürlich auch, schau dir aber lieber mal die Eigenschaft EndOfFile (EOF) deines StreamReader Objekts an.

  1. Deine Konvertierung der Werte die du dann dem Array zuweist sind sehr Fehleranfällig, am besten liest du dir DAS durch.

  2. Du solltest nicht nichts in deinen Catch teil schreiben, lass eventuelle Fehler nicht unendeckt.

Noch abschliessend, falls es dir um das Speichern und Auslesen von Daten deines Programms geht kannst du dich auch mit der Serialisierung beschäöftigen ist weitaus komfortabler.

mfg Markus

14.07.2008 - 12:47 Uhr

@ Herbivore, das funktioniert doch nicht?!?! 8o

Wenn ich bei deinem Code Objekte der Klasse instanziere würde das doch keinen Sinn machen, bsp:


Person a = new Person("a", "A");
Person b = new Person("b", "B");
Person c = new Person("c", "C");

c = new Person("c1", "C1");

in jedem dieser Fälle ist die Liste _PersonenListe nur mit dem EINEN Eintrag in der instanzierung versehen. Was bringt das also?

Sehe das so wie JAck30lena, leg eine liste vom Typ Person ausserhalb der Klasse an.

mfg Markus Bodlos

14.07.2008 - 12:20 Uhr

In C# gibt es (außer über umwege) keinen My - Namespace. Jedoch sind alle Funktionen aus diesem natürlich möglich, deine gesuchte findest du unter:


Application.StartupPath      // nur der Pfad
//bzw.
Application.ExecutablePath // Pfad + Dateiname + Erweiterung

mfg Markus

PS (fürs nächste mal): Deine Frage bezieht sich nicht direkt auf WPF/Silverlight (auch wenn du es in deinem Projekt verwenden magst) sondern passt eher in das Forum "Basistechnologien und allgemeine .NET-Klassen". Du bekommst auch schneller Antworten wenn du im richtigen Forum postest

14.07.2008 - 01:14 Uhr

Hallo und willkommen im Forum,

wo genau ist denn das problem? beim einlesen? oder beim verarbeiten?

wenns am einlesen liegt, schau dir mal an wie man mit streams arbeitet, findest hier: 🛈 - interessant könnte für dich auch die xml serialiserung sein, dann schaut das config file nach einer xml struktur aus sofern es richtig implementiert ist.

Was aber gesagt gehört, so verwendet man keine einstellungen. Dotnet verwaltet dir settings automatisch (vieler art nicht nur text), die editierung machst du dann in einem schönen optionsfenster in deinem prog. Falls es dir aber wichtig ist das bei prorammende zu tun geht natürlich dein weg mit einem file sehr gut.

mfg Markus

12.07.2008 - 12:15 Uhr

Hallo,

[Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

und :rtfm: 🛈 📗

aber als kleiner tipp der fehler schleicht sich in diesen zeilen ein. und nicht erst dann wenn er auftritt.

            
            string[] Name2;
            //Dadurch geht er in diese Schleife nie rein
            for (int i=0; i< Anzahl; i ++)
            {
                Name2 = Name[i].Split(' ');
                listBox2.Items.AddRange(Name2);
            }

mfg Markus Bodlos

11.07.2008 - 20:45 Uhr

ist mir noch nie passiert, kann also nur tipps geben:

  • versteckt?
  • anderes dateisystem (wobei eigenartig wäre wenns mit F:\Daten geht)?
  • versuch mal GetDrives() und schau ob dir das laufwerk aufgelistet wird
  • leg eine datei im Root verzeichniss an und schau ob sie mit GetFiles dabei ist
  • mach ein neues projekt wo du nur diese methode ausprobierts und schau ob dort auch nichts gefunden wird

mfg Markus

11.07.2008 - 20:38 Uhr

Putin, Moses (sofern der schafhirte in der ersten reihe das ist 😉, ...

11.07.2008 - 20:36 Uhr

Hallo,

ich verstehe deinen code nicht, du liesst zeile für zeile aus einer text datei ein, schreibst das gelesene in einen label aber splittest nur die letzte zeile?!?

mal zum aufbau (die methodennamen können abweichen, hab leider kein c# da) streamreader in einem using block (besserer stil) dann liest du den kompletten inhalt mit der methode "readtoend" deines streams ein. diesen string splittest du dann um den operator plus(+) -> jetzt hast ein string array. du musst dir überlegen (du weißt ja das der name eines jeden elements am anfang steht wie du ihn unterscheiden kannst vom übrigen.

  1. Möglichkeit: der name hat kein leerzeichen -> du suchst nach dem ersten leerzeichen und nimmst den teil von links bis zum auftreten dieses.

  2. Möglichkeit: wenn du glück hast, hast du ein zeichen nach dem du nochmal splitten kannst vielleicht ein komma(?)

einfügen tust du die namen dann, durch iteration durchs array.

mfg Markus

11.07.2008 - 20:24 Uhr

Hallo Herbivore und JAck30lena,

warum soll ich dann auf Abbrechen, um den Tippfehler ändern zu können und dann wieder neu in den Dialog, in dem ich dann alle Einstellungen erneut vornehmen muss? Besser wäre es, wenn ich trotz des geöffneten Dialogs den Text noch korrigieren könnte.

stimmt natürlich, nervt total wenn man es erst später merkt.

usability hat auch in der projektplanung deutlich an bedeutung gewonnen.

full ack.

ein modaler dialog zwingt den user sich mit diesem dialog zu beschäftigen und das ist bad style.

ich behaupte dass es auch anwendungsbereiche gibt, wo sich der user einfach mit der abarbeitung sofort(!) beschäftigen muss. -> Fehler und Warnungen, zwingende updates, im allgemeinen wesentliche benachrichtigungen gehören meines erachtens sowieso dazu. Das mit den Drucker und Datei dialogen lass ich mir einreden dass man das besser lösen kann 😉

mfg Markus

11.07.2008 - 14:56 Uhr

Ja, das ist genau das was ich in meinem ersten Post gepostet habe!
Zum design, würde vorschöagen du erstellt erstmal dein mdi formular in diesem platzierst dann eben deinen toolstrip (dock:top) und ein tablelayoutpanel (dock:fill) mit 2 spalten und 2 reihen. die erste spalte nutzt du um deine Gruppen und items anzuzeigen, in der 2ten Splate erstellt du einen Splitcontainer (würde auch mit Panels gehen, splitcnt ist aber comfortabler) mit rowspan = 2 und die formulare erstellst du im container wie in meinem ersten post beschrieben, im Anhang ein Bild wie es dann ausschauen könnte.

mfg Markus

11.07.2008 - 13:25 Uhr

Oha, dann hab ich das falsch verstanden, dachte ihm eht es um ein docking von fenstern in einem MDI Parent window. Sorry

mfg Markus

11.07.2008 - 13:00 Uhr

modale Dialoge sind out.

wie kommst du zu dieser allgemeinen aussage? Was ist mit dem Save|OpenFileDialog, PrinterDlg und ähnliches?

mfg Markus

11.07.2008 - 12:57 Uhr

Hallo Pria,

was soll das bringen? ihm geht es ja primär um das layout und bei einem mdi formular ein child explizit zu den controls hinzufüen ist ja unnötig. Man setzt die Eigenschaft "MdiParent".

Code im MDI Formular:


Form myform = new Form();
myform.MdiParent = this;
myform.Show();

mfg Markus

11.07.2008 - 11:46 Uhr

Stichwort: Globale Variable, da das aber grundlagen sind befasse dich bitte mit diesen Quellen :rtfm: 🛈 📗

mfg Markus

11.07.2008 - 10:47 Uhr

Hallo,

machs mit einem SplitContainer damit gehts total einfach. Du legst dir ein MDIForm an, in diesem machst du einen SplitContainer rein (Orientation = Horizontal, Dock = Fill) im Code öffnest du dann deine Formulare .


            Form f = new Form();
            f.MdiParent  = this;
            f.Parent = this.splitContainer1.Panel1;
            f.Dock = DockStyle.Fill;
            f.Show();

            Form f2 = new Form();
            f2.MdiParent = this;
            f2.Parent = this.splitContainer1.Panel2;
            f2.Dock = DockStyle.Fill;
            f2.Show();

falls es wiedu schriebst nocht genau passt kannst du eigenschaften am layout für die ränder festlegen, kontrolliere die panels ob bei der Eigenschaft "padding was drinnen steht, wenn ja auf 0 setzen. Wenn du es ohnehin nicht verschiebbar machen willst kannsz ja noch im SplitContainer die Eigenschaften IsSplitterFixed = true und SplitterWidth auf eins setzen. Das schaur dann nicht so schlecht aus.

mfg Markus

10.07.2008 - 14:06 Uhr

Hallo,

dafür gibt es mehrere Wege. Wenn es sich um Dialog Fenster handelt. kannst du jeden aufruf so gestalten:


Form f = new Form();

f.ShowDialog();
this.Close();

mfg Markus

09.07.2008 - 22:25 Uhr

was genau geht denn nicht? ist das formular wo anders? öffnet es sich gar nicht? gibts ne fehlermeldung?
-> Wie poste ich richtig? Punkt 5

mfg Markus

09.07.2008 - 21:00 Uhr

da es doch SO ein geniales Spiel ist tststs

ja, aber viel zu kurz.

09.07.2008 - 20:33 Uhr

Hallo,

ist mir bis jetzt noch nie aufgefallen. was aber funktioniert ist drag'n'drop eines ordners in den Projektmappenexplorer.

mfg Markus

09.07.2008 - 12:50 Uhr

Zum Verstehen von Rekursion eignet sich auch diese Geschichte gut. Faires Teilen

mfg Markus

08.07.2008 - 18:42 Uhr

Hallo,

das du (Thanatos81) das forum da so runtermachst kann ich jetzt nicht verstehen. eziehst du diesen einen Thread jetzt auf das komplette Forum???? Dieses Forum bietet durchaus kompetente Hilfe in Sachen dotnet / C#. Darüber, dass das eine oder andere Kommentar vielleicht übertrieben war lässt sich diskutieren aber nichts desto trotz hat der fragende wenig eigeninitiative bewiesen.
Ich verstehe auch nicht wie du dich so outen kannst wenn du erst seit 07.07.2008 also GESTERN(!) dabei bist. ich denke es ist zeigt von nicht viel intelligenz eine Gemeinschaft in der gößenortnung dieses Forums mit mehr Usern als dass du sie an einem Tag kennen lernen kannst zu kritisieren.
Hilfe ist hier nunmal nicht eine vorgekaute Lösung wie es einige Erwarten sondern eine Unterstützung zur Eigeninitiative!

mf Markus

08.07.2008 - 17:58 Uhr

Hallo,

Stack fügt die Elemente oben (vorne) an, wärend eine List etc. neue Elemente unten (hinten) anfügt.

du verwechselt da ein bisschen was. Grundsätzlich mal, ein Stack ist eine List mit der besonderen eigenschaft eine LIFO (LastInFirstOut) Speicher zu sein. Das bedeutet in der Praxis, wenn du einen Stapel von Büchern darfst du nur oben am Stapel Bücher drauflegen, willst du bei deinem Stapel zum 2. Buch von unten musst du zuerst alle bücher von oben wegnehemn um zum 2 buch zu kommen. Bei einer Liste schaut die Sache so aus das du eine beliebige Zelle lesen und beschreiben kannst sogar das einfügen eines neuen items zwischen 2 bestehenden ist möglich.

Wovon du allerdings redest mit den elementen am anfang einfügen heißt Queue (deutsch:Schlange) existiert wie der Stack im leichen Namespace und ist auch in einer generischen Version vorhanden. Eine Queue ist ein FIFO Speicher, First In First Out, vergleichbar mit einer Schlange im Supermarkt, derjenige welcher als erstes zur Kasse kommt wird auch als erstes Bedient, also genau das Gegenteil zum Stack.

Abschliessend bedeutet das, dass im framework eine Queue sowie ein Stack eine List sind aber mit besonderen Eigenschaften.

mfg Markus

08.07.2008 - 16:58 Uhr

Hallo Kre8,

mir ist keine Klasse bekannt welche das Verhalten eines Ringbuffers nachbildet. Wieso sollen sie bei einer Liste am Anfang dran gehängt werden.

Hab da mal ein beispiel von mir strak vereinfacht was aer das macht was du brauchst.


public class RingBuffer<T>
        {
            private List<T> _Ring = new List<T>();
            private int _Capacity;

            public RingBuffer(int Capacity)
            {
                this._Capacity = Capacity;
            }

            public T Pop()
            {
                T ret_value = this._Ring.LastOrDefault(x => true);
                this._Ring.Remove(ret_value);
                return ret_value;
            }

            public void Push(T item)
            {
                if (this._Ring.Count >= this._Capacity)
                    this._Ring.Remove(this._Ring.FirstOrDefault(x => true));

                this._Ring.Add(item);
            }

            public int Capacity
            {
                get { return this._Capacity; }
            }
        }

mfg Markus

Edit: Funktioniert nur mit .net 3

07.07.2008 - 10:47 Uhr

Funzt natürlich mit Anchor super, falls du aber mal komplexere Layouts hast (z.B. manche controls sollen wachsen andere nicht) kannst du auch das TableLayoutPanel Control verwenden. Funktioniert auch bei deiner Anforderung.

mfg Markus

06.07.2008 - 22:20 Uhr

Audio aus/eingabe ist ja nichts anderes als ein user interface[ui] also wirds auch dementsprechend implemetiert.

mfg Markus

06.07.2008 - 11:16 Uhr

Hallo,

wenn du nicht die Expressversion hast kannst es mit einem Setup Projekt machen.

siehe hier

mfg Markus