Laden...
Avatar #avatar-3073.png
DavidT myCSharp.de - Member
Student Winterberg Dabei seit 30.05.2007 998 Beiträge
Benutzerbeschreibung

Forenbeiträge von DavidT Ingesamt 998 Beiträge

26.08.2009 - 16:40 Uhr

Okay, die Lösung ist:


foreach(ToolStripMenuItem item in contextMenuStrip1.Items)
            {
                item.Enabled = true;
            }

Im meinen Augen total unintuitiv das ich bei Enable = false alle Items ausschalte, aber bei Enable = true nicht wieder einschalte... Gut dafür mag es Einsatzbereiche geben, aber wenn ich mir andere Enable-Verhalten angucke ist es da doch auch nicht anders. Wenn ich panel.Enable = true mache sind auch alle Controls wieder aktiviert...

Gruß David

26.08.2009 - 16:35 Uhr

Okay, das Problem tritt noch viel simpler auf: contextMenü auf die Form ziehen, enable im Designer auf false setzen und dann im Konstruktor oder in der OnLoad auf true. Der Wert ist dann zwar auch true aber es wird immernoch inakti angezeigt... HÄ?!?!?!

Gruß David

26.08.2009 - 16:30 Uhr

Hallo,

ich habe 2 Controls (UC1 und UC2) wobei UC2 von UC1 abgeleitet ist. Nun ist in UC1 ein contextMenü definiert mit Sichtbarkeit protected. In UC2 möchte ich nun bei bestimmten Aktionen die Sichbarkeit von dem contextMenü andern. Aber so oft ich auch contectMenü.Enable = true aufrufe, es passiert nichts.

Steh ich grad total auf dem Schlauch und mache nen dummen Fehler oder was ist da los!??

Danke im Voraus.

Gruß David

22.08.2009 - 15:24 Uhr

Hallo,

  1. Test kann es nie genug geben, aber sie müssen ein von dir vorher "vermutetes" Verhalten beweisen
  2. Ein Test sollte immer nur eine "Sache" beweisen
  3. Bei Paramtern solltest du immer Grenzklassen bilden und diese auf richtiges Verhalten testen. Wenn du z.B. einen Paramter hast der eine Zahl ≥0 akzeptieren soll, Prüfst du ihn auf die Werte -1,0,1
  4. Schleifen solltest du in Tests generell vermeiden, lieber mit 2-3 Tests Grenzklassen testen als mit einer Schleife rumzurödeln.

Gruß David

20.08.2009 - 17:18 Uhr

Hallo,

alternativ mit einem StringStream 😃

Gruß David

20.08.2009 - 17:17 Uhr

Hehe, sowas passiert mir leider auch hin und wieder 😛

Gruß David

20.08.2009 - 13:47 Uhr

Bitte, konfigurierst du deine Listener evtl in der app.config und hast einen clear-Tag drin?

Gruß David

20.08.2009 - 11:54 Uhr

Hallo,


fi[0].SetValue(targetObject, 1234);

An der Stelle übergibst du tragetObject NICHT als referenz und da Strukturen Wertetypen sind, wird an SetValue eine Kopie von targetObject übergeben, also wird auch nur die Kopie verändert, wovon die Referenz nichts mitbekommt.

Strukturen => Wertetypen => Call-by-Copy
Klassen => Referenztypen => Call-by-Reference

Gibt es einen zwingenden Grund warum du es unbedingt mit Strukturen lösen willst?

Edit: Ah, ich glaub ich habe den Sinn von SetValue missverstanden. Kopier doch mal die gesamte Methode hier rein damit man es nachvollziehen kann.

Gruß David

20.08.2009 - 11:41 Uhr

Also da .NET bzw C# nur von Mircrosoft entwickelt wird, finde ich gibt es ein ziemlich einheitliches Vokabular, was eigentlich in allen Büchern einheitlich verwendet wird. Ausnahmen sind da nur die "eingedeutschten" Wörter, aber das Problem hat man ja überall.

Als Lehrbuch / Arbeitsbuch eignet sich (in meinen Augen) hervorragend das C# 2008 Buch von Kühnel (siehe openbook), das sowohl als Printausgabe als auch als OpenBook einfach unverzichtbar geworden ist.

Was die Zertifizierungen angeht, solltest du klar unterscheiden. Du kannst dich (z.B. bei Microsoft) nicht zu C# Zertifizieren lassen, sondern zu .NET. Nimmt man den 70-536 als "Einsteigszertifikat", so werden dort Themen behandelt die nie und nimmer in einem normalen Buch zu C# stehen (Anwendungskonfiguration, COM, CAS, ACL, usw). Darüber hinaus beziehen sich alle Microsoft-Zertifikate in .NET ja (wie das .NET Konzept ja propagiert) auf alle .NET Sprachen.

Gruß David

20.08.2009 - 11:33 Uhr

Hallo,

die einfachste Methode wäre wohl das ganze zunächst in Tokens zu unterteilen (mit regex) und dann einen Syntaxbaum aufzustellen. Weil wie willst du mit syntaktisch falschem Code umgehen?

Gruß David

20.08.2009 - 11:06 Uhr

hmmm, TextRenderer? Interessant... g

Gruß David

20.08.2009 - 11:03 Uhr

Hallo,

dann musst du das Beispiel ein wenig nach Herbivores Vorschlag umbauen 😉


static int GetIndexOfId(int id)
{
     return _liste.FindIndex(delegate(Datatype dt) { return dt.id == id; });
}

Gruß David

20.08.2009 - 10:53 Uhr

Hallo,

google nach Graphics.DrawString und nach der Klasse StringFormat, das sollte alle deine Wünsche erfüllen.

Gruß David

20.08.2009 - 10:49 Uhr

Hallo The_Mexican,

aber genau das kannst du doch mit meiner Lösung so machen 😃 Verstehe das Problem nicht so ganz.


class Program
    {
        private static List<Datatype> _liste;

        struct Datatype
        {
            public int id;
            public string name;
        }

        static void Main(string[] args)
        {
            _liste = new List<Datatype>()
                         {
                             new Datatype{id=1,name="David"}, 
                             new Datatype{id=2, name = "Julia"}
                         };
            int index = GetIndexOfId(1);

            Console.WriteLine("Person mit id {0} befindet sich an index {1}",1,index);

            Console.ReadKey();
        }

        static int GetIndexOfId(int id)
        {
            return _liste.FindIndex(val => val.id == id);
        }
    }

Gruß David

20.08.2009 - 10:35 Uhr

Hallo,

kann es sein das du die Listener gelöscht hast?

probier mal:


Debug.Listeners.Clear();
Debug.Listeners.Add(new DefaultTraceListener());
Debug.WriteLine("Testnachricht");

dann sollte es funktionieren.

Gruß David

20.08.2009 - 10:15 Uhr

Hallo,


class Program
    {
        private static List<int> _liste;

        static void Main(string[] args)
        {
            _liste = new List<int>{1,3,6,8,3,5,2,4,3,7,9,8};
            Console.WriteLine(GetIndexOfIrgendwas(3));
            Console.ReadKey();
        }

        static int GetIndexOfIrgendwas(int deinWert)
        {
            return _liste.FindIndex(val => val > deinWert); 
        }
    }

Wenn ich dich richtig verstehe, sollte das machen was du willst (zumindest das Prinzip).

Gruß David

20.08.2009 - 10:04 Uhr

Wo erwartest du die Ausgabe denn?

Edit: Evtl. ist das etwas unverständlich, aber was meinst du mit "Ausgabefenster"? Die Console oder die Ausagabe in VS? Debug.WriteLine geht standardmässig nur in die VS Ausgabe und das auch nur wenn du im Debug-Build arbeitest.

Gruß David

20.08.2009 - 10:03 Uhr

Hallo,

das dachte ich auch erst, aber wenn ich in der Rückrufmethode die Eigenschaft IsThreadPoolThread (oder wie die genau heißt..) prüfe, steht die auf false.

Gruß David

19.08.2009 - 21:09 Uhr

UI, hervorragend, danke schön!

19.08.2009 - 19:27 Uhr

Hallo,

ich habe meinem aktuellen Thread ein Principal-Objekt zugewiesen und dieses wird in neuen Threads (per BeginXXX) nicht übernommen. Muss man das explizit irgendwo einstellen? Wenn das gar nicht funktioniert, verstehe ich den Sinn von der Eigenschaft nicht, dann ist es doch einfacher eine statische Eigenschaft in die principal-Klasse zu machen mit GetCurrentPrincipal oder so...

Danke im Voraus!

Gruß David

19.08.2009 - 10:51 Uhr

Hallo ihr beiden,

ConfigurationManager meine ich. Mit ConfigurationManager.GetSection(...) lade ich mir die benutzerdefinierte Section in meinen Komponentne. Aber es wäre schön wenn ich zu Programmstart dem ConfigurationManager irgend ein Schema mitgeben könnte um das ganze von vorne herein Fehler abzufangen.

Gruß David

18.08.2009 - 20:27 Uhr

Hallo,

ich habe eine mittlerweile recht große Anwendung entwickelt die mit sehr großen Konfigurationsdateien arbeitet die teilweise recht kompliziert aufgebaut sind. Das alles von Hand zu verifizieren ist sehr aufwändig, gibt es daher eine möglichkeit mit der app.config ein Schema zu Verknüpfen mit dem der ConfigManager das ganze validiert?

Habe schon bei google gesucht, afinde aber nichts passendes.

Gruß David

05.08.2009 - 18:55 Uhr

Hallo,

ich habe vor kurzem mal über eine "mögliche" Lösung zu deinem Problem einen Blogeintrag geschrieben.

Gruß David

10.07.2009 - 16:32 Uhr

Besten Dank.

Gruß David

10.07.2009 - 16:19 Uhr

Geht mir auch nicht um die Klausur, sondern darum soetwas mal praktisch einzusetzen 😃 Hast du ein paar Stichworte für mich?

Gruß David

10.07.2009 - 16:12 Uhr

Hallo,

es geht nicht um die Klasse Semaphore (das es die gibt ist mir klar), es geht um Message Passing und ob es mit .NET möglich ist, dass Message Passing gebunden an eine Semaphore durchzuführen!

Edit: Entschudligt, ich habe grad erst gemerkt wie knapp meine Frage formuliert war: Also das es Semaphore in .NET gibt ist klar, mir geht es darum ob ich Message Passing prozess- oder sogar rechnerübergreifend durchführen kann ohne MPI.NET einzusetzen.

Gruß David

10.07.2009 - 15:03 Uhr

Hallo,

ich lerne grad für die Klausur Betriebssysteme und dort geht es um Message Passing. Dort wird soetwas gemacht wie:


Semaphore mutex = new Semaphore(1,1);
...
send(mutex, msg);
...
receive(mutex, ref msg);

Geht soetwas auch mit C# oder muss ich da auf MPI.NET zurückgreifen?

Gruß David

06.07.2009 - 12:10 Uhr

Hallo herbivore,

scheinbar war ich gestern Nacht total daneben. Ich hatte es mit IComparable als Contraint gelöst, habe dann aber beim Aufruf mit einem Enum als Typparamter einen Fehler bekommen, den ich darauf zurückgeführt hatte, das Enums kein IComparable implementieren. Daher hatte ich den Gedanken verworfen. Aber ihr habt recht, IComparable wird von Enums implementiert, keine Ahnung was das für ein Fehler war.

Mensch mensch, Danke für eure Hilfe.

edit: Fehler gefunden: Ich habe gestern Abend IComparable<T> implementiert und das funktioniert dann nicht, da ValueType nur IComparable implementiert (wie kleines_eichhoernchen schon richtig angemerkt hat).

Nochmal Danke schön 😃

Gruß David

06.07.2009 - 11:13 Uhr

Hey, erstmal Danke für eure Tips.

Ich habe mir gestern das Beispiel ausgedacht, weil mein Programmabschnitt zu groß zum pasten gewesen wäre, leider habe ich mich etwas verzettelt.

  1. Ich kann == nicht verwenden, da der Compiler dann meckert, da nicht sichiergestellt ist das T den == - Operator implementiert.

  2. In den Beispiel hätte ich korrekter weise Equals verwenden können, allerdings muss ich konkret testen, ob enum1 ≤ enum2 ist. Geht das auch irgendwie?

Gruß David

06.07.2009 - 00:39 Uhr

Hallo, ich möchte so etwas hier erreichen


public bool AreEqual<T>(T enum1, T enum2) : where T : struct
{
   return enum1 == enum2;
}

Wie kann ich das erreichen? Leider kann ich enums ja nicht zwingen IComparable zu implementieren g

Was mache ich falsch?

Gruß David

03.07.2009 - 15:44 Uhr

Mit dem Tool Reflector solltest du es h erausfinden. Wenn es managed C++ war kannst du die DLL dort laden, wenn nicht dann eben nicht. Sollte es nicht der fall sein, arbeite dich fix in C++/CLR ein (ist ganz leicht) und schreib dir nen Wrapper für die Klassen die du brauchst. Alternativ kannst du das ganze natürlich auch noch per COM ansprechen.

Gruß David

29.06.2009 - 12:56 Uhr

Ups, hab da was verwechselt, natürlich war es DriveInfo...

Wie Junky schon sagte, noch weniger Code wäre fast schon strafbar 😉

Gruß David

29.06.2009 - 12:01 Uhr

Du kannst über Sytem.IO die Klasse Drive nutzen. Die hat eine statische Methode GetDrives der du per Enum mitteilen kannst, welche Laufwerkstypen du genau haben willst.

Gruß David

25.06.2009 - 08:41 Uhr

Hallo,

recht ellegant geht es mit VPC Images mit jeweils verschiedenen .NET-Versionen. Die liegen als frische Installationsversion auf einem Server und wenn ein neues Release raus kommt, wird ein abgeschwächter Systemtest inkl Installationstest von einem Azubi auf allen Images gemacht.

Gruß David

19.06.2009 - 19:31 Uhr

Okay. im Visual Studio unter Help -> About Visual Studio sieht man es. Du hast recht, auf dem einen fehlt das SP1, daran liegt es. Komisch ist, das ich es als .NET 2.0 kompillieren lasse... Dann dürfte das doch gar nicht gehen unter Vista.

Danke für deinen Tip 😃

Gruß David

19.06.2009 - 19:23 Uhr

Gibt es irgendwo eine edeutige Quelle welche Frameworkversionen mit welchem SP installiert sind?

Gruß David

19.06.2009 - 19:18 Uhr

Ich habe mal einen Screenshot gemacht damit ihr versteht was ich meine...

19.06.2009 - 18:55 Uhr

Hallo,

ich habe grade ein recht seltsames Phänomen.

Ich habe eine recht große Applkation geschrieben unter Win Vista 32 Bit. Dort lief sie auch hervorragend. Nun habe ich sie meinem Chef geschickt, dort lief sie nicht und stürzte ohne Fehler ab (Anwendung reagiert nicht mehr....) Nun habe ich per rpc auf unserem Subversion-Server (Win2k8 Server) mal die Projekt dateien kompilliert und einen aboslut nicht nachvollziehbaren Fehler bekommen, beim Aufruf von


AutoResetEvent _abort = new AutoResetEvent();
...
while(!_abort.WaitOne(0))

was unter Vista tadellos funktioniert, wird mir unter WIn2k8 gesagt das es für WaitOne keine Überladung mit 1 Element gibt (nur mit 2en). Wenn ich dann einen Bool-Wert dahinter klatsche funktioniert auch alles.

Auch im VS zeigt er mit unter 2k8 nur Varianten mit 2 Parametern an und unter Vista mit einem Paramtern und mit 2en...

Frameworkversionen sind gleich (3.5 SP1)

Woran liegt sowas?

Gruß David

30.05.2009 - 23:46 Uhr

Also ich habe mir die letzte Ausgabe von "Einstieg in XML" geholt und war von dem Buhc mehr als entäuscht. Normal ist man von GC-Büchern ja durchweg hohe qualität geöhnt, aber der Schreibstil des Autors war überhaupt nicht mein Fall, irgendwie Fehlt dem Buch der rote Faden und ich hatte immer das gefühl das er besonders komplizierte Sätze zusammenbauen wollte 😉
Also inhaltlich ein recht gutes Buch, lässt sich aber sehr schlecht lesen finde ich.

Gruß David

29.05.2009 - 22:24 Uhr

Hallo,

gibt es eine Möglichkeit in C# einen Codeabschnitt derart zu deklarieren, das dem Thread, solange er den Code ausführt, die zeitscheibe nicht entzogen werden kann?

Gruß David

27.05.2009 - 21:37 Uhr

Im 🛈 steht wie es geht 🙂

Gruß David

22.05.2009 - 21:31 Uhr

Da du die Bib scheinbar für andere Entwickler einfach halten willst, lass dir gesagt sein das hier wohl die Merhheit der Leute Invoke kennt und dementsprechend deinen Code schneller mit Invoke verstehen wird als mit SynchronisationContext 😃

Gruß David

22.05.2009 - 16:19 Uhr

Okay, danke euch beiden.

Gruß David

22.05.2009 - 15:57 Uhr

Und für normale buttons?

22.05.2009 - 15:03 Uhr

Hallo,

ich habe ein Menü mit mehreren Buttons die ich bei bestimmten Bedingungen undabhängig voneinadner disable. Nun möchte ich das TROTZ das enable auf flase steht, der ToolTip angezeigt wird, um dem Benutzer anzuzeigen, warum es daktiviert ist (weil eine Datei fehlt oder erkeine Rechte hat). Gibt es da eine Möglichkeit? So wie ich das verstehe ist die ShowAlways-Eigenschaft keine Lösung, weil es sich auf den Enablewert das übergeordneten Fensters bezieht und nicht auf den des Steuerelementes.

Danke im Voraus.

Gruß David

15.05.2009 - 09:49 Uhr

Wenndu mit C# entwickelst, machst du das ja auf Grundlage des .NET Frameworks, also läuft deine Anwendung auf allen Betriebssystemen, die das .NET Framework X.Y unterstützen.
Das einzige was mir bisher immer negativ aufgestossen ist, wäre das die Oberflächen unter XP / Vista / W7 etwas anders aussehen, weil z.B. unter Vista ein String bestimmter länge in eine Textbox passt und unter XP wird diese kleiner dargestellt und der string wird abgeschnitten.

Gruß David

13.05.2009 - 15:52 Uhr

Wie du bereits geschrieben hast ist der Backgroundworker die einfachste Alternative. Dein Updaten der Textbox kannst du entweder im Eventhandler von progressChanged machen oder du invokest einen Delegaten aus deiner Testklasse heraus, in dem der Text der Textbox geupdatet wird.

Gruß David

13.05.2009 - 15:49 Uhr

Hast du die CAS der Assembly überprüft? Je nachdem in welcher Zone die Assembly läuft, hast du evtl gar keine Schreibrechte.

Gruß David

13.05.2009 - 10:02 Uhr

Hallo herbivore,

unter Verwaltung ist es leider nicht, genau das ist ja mein Problem 😃

Gruß David

13.05.2009 - 09:44 Uhr

Hallo,

ich lerne grade für die MCP-Prüfung 70-536 und stolper zum wiederholten Mal über das Tool ".NET Framework 2.0 Configuration" welches sich unter Systemsteuerung -> Verwaltung befinden soll. Allerdings finde ich es dort nicht. Muss man zusätzlich zum Framework noch das SDK installieren, damit man das Tool nutzen kann?

Gruß David