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
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
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
Hallo,
Gruß David
Hallo,
alternativ mit einem StringStream 😃
Gruß David
Hehe, sowas passiert mir leider auch hin und wieder 😛
Gruß David
Bitte, konfigurierst du deine Listener evtl in der app.config und hast einen clear-Tag drin?
Gruß David
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
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
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
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
Hallo,
google nach Graphics.DrawString und nach der Klasse StringFormat, das sollte alle deine Wünsche erfüllen.
Gruß David
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
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
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
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
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
UI, hervorragend, danke schön!
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
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
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
Hallo,
ich habe vor kurzem mal über eine "mögliche" Lösung zu deinem Problem einen Blogeintrag geschrieben.
Gruß David
Geht mir auch nicht um die Klausur, sondern darum soetwas mal praktisch einzusetzen 😃 Hast du ein paar Stichworte für mich?
Gruß David
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
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
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
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.
Ich kann == nicht verwenden, da der Compiler dann meckert, da nicht sichiergestellt ist das T den == - Operator implementiert.
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
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
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
Ups, hab da was verwechselt, natürlich war es DriveInfo...
Wie Junky schon sagte, noch weniger Code wäre fast schon strafbar 😉
Gruß David
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
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
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
Gibt es irgendwo eine edeutige Quelle welche Frameworkversionen mit welchem SP installiert sind?
Gruß David
Ich habe mal einen Screenshot gemacht damit ihr versteht was ich meine...
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
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
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
Im 🛈 steht wie es geht 🙂
Gruß David
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
Okay, danke euch beiden.
Gruß David
Und für normale buttons?
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
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
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
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
Hallo herbivore,
unter Verwaltung ist es leider nicht, genau das ist ja mein Problem 😃
Gruß David
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