Hi, ich habe folgendes Problem mit einer Checkbox. Ich möchte beim Klicken der Checkbox eine bestimmte Routine ausführen. Allerdings kann diese Checkbox auch durch das Programm selbst gesetzt werden. Wenn aber das Programm die Checkbox setzt will ich nicht das die oben genannte Routine ausgeführt wird. Meine Fragen: - Kann ich erkennen wo ein Event ausgelöst wird um es dann in bestimmten Fällen zu ignorieren? - Kann ich der Checkbox sagen, dass sie nur auf Klicks ein Event auslöst und bei setzen durchs Programm nicht? Hoffe ihr könnt mir hier weiterhelfen, oder mir zumindest einen Begriff nennen, damit ich googlen kann.
das event kannst du nicht unterdrücken, du must aber nicht darauf reagieren. Du kannst einfach z.b. im Proberty TAG der Checkbox eine Variabe setzen und diesen dann in dem Event auswerten.
Danke für den Tipp. Ich habe es so hinbekommen. Jetzt habe ich aber eine letzte Frage. Ich bin gerade dabei meine GUI fertig zu stellen. Die GUI zeigt mehrere Segmente eines Roboters an, die je nach Bedingung aufleuchten. Jedes Segment einzeln. Dazu habe ich 20 JPG´s erstellt, in denen jedes Mal ein anderes Segment aufleuchtet. Auf meinem PC funktioniert auch alles einwandfrei, da die Bilder mit absoluten Pfaden angegeben sind. Das Startbild habe ich im GUI Editor (Visual C# 2010 Express) eingestellt. Dieses wird auch in der fertigen *.exe angezeigt. Je nach Bedingung ändere ich das Bild mit: pictureBox_table.Image = Image.FromFile("D:\\xxx\\xxx\\Bilder\\segFloat.JPG"); Möchte ich nun in meiner fertigen *.exe die Bilder anzeigen, wird eine Exception geworfen. Ich habe die Bilder aber in der Form1.resx importiert, da ich als erstes daran dachte. Die fertige exe ist dadurch auch um einiges Größer geworden, so das die Bilder schon irgendwo in der *.exe intergriert sind. Hat jemand ne Ahnung?
> Hat jemand ne Ahnung?
Klar, aber für was? Irgendwie fehlt da ne konkrete Frage :)
Wenn du die Bilder in die Ressourcen geklopft hast, braucht's natürlich
den Pfad nicht mehr.
Und was jeder C#-Programmierer sich angewöhnen sollte ist, wenn er eine
Exception erwähnt, sollte er auch deren Fehlermeldung und genaues
Auftreten beschreiben :) Woher sollen wir sonst die Ursache wissen.
Ralf
Am besten relativ zu deiner Executable einen Ordner mit deinen Bildern. ...\Programm.exe ...\Bilder\... Du brauchst dann nur einmal den Pfad deines Executables zu ermitteln und kannst daraus ja ganz leicht den rest ableiten: String myPath = @Application.StartupPath + @"\\Bilder"; Alles weitere kannst du ja beliebig anhängen. @ erspart dir eine Ersetzung der \ durch \\. Ist halt schlussendlich sicher etwas flexibler als fest eingebundene Bilder... Sind sie fest in den Resourcen, so musst du dann auch entsprechend darauf zugreifen... Viele Grüße
@Sesk K. ich habe es jetzt nicht noch einmal nachgelesen, aber ich denke das @Application.StartupPath sehr ungünstig ist, das ist doch das Anwendungsverzeichniss. Dies stimmt aber nicht, wenn man die Anwendung absolut startet. Man muss der Verzeichniss vom den Executable nehmen.
Danke für die schnellen Antworten. Wenn ich den Pfad so angebe: Image.FromFile(@Application.StartupPath + @"\Bilder\tisch.JPG"); Dann steht in Application.StartupPath folgendes: D:\Projekte\xxx\xxx\bin\Debug\Bilder\xxx.JPG Da soll er ja aber auch nicht nach den Bildern suchen? Sind die Bilder richtig eingebettet wenn unter "Projektmappen-Explorer/Resources/ die Bilder drin liegen? Muss ich in den Eigenschaften der Bilder noch etwas einstellen? z.B. Buildvorgang auf "Eingebettete Resource" umstellen?
Peter II schrieb: > @Sesk K. > > ich habe es jetzt nicht noch einmal nachgelesen, aber ich denke das > @Application.StartupPath sehr ungünstig ist, das ist doch das > Anwendungsverzeichniss. Dies stimmt aber nicht, wenn man die Anwendung > absolut startet. Man muss der Verzeichniss vom den Executable nehmen. Das ist das Verzeichnis, aus welcher die Anwendung gestartet wurde. D.h. egal wohin man diese kopiert bleibt der Rest ja relativ erhalten... @Hansbär: Das war auch vielmehr eine Alternative zu den fest eingebundenen Resourcen. Auf die Resourcen musst du wahrscheinlich aber ja auch ganz anders zugreifen, etwa meinProjekt.Properties.Resources.meinTisch ... Inwieweit der Compiler da automatisch was tauscht alsbald es in die Res importiert wurde weiß ich nicht. Image myImage = meinProjekt.Properties.Resources.meinTisch;
Sesk K. schrieb: > Das ist das Verzeichnis, aus welcher die Anwendung gestartet wurde. D.h. > egal wohin man diese kopiert bleibt der Rest ja relativ erhalten... genau das ist ja das problem: c: cd \windows c:\programme\test\test.exe dann liefert es c:\windows zurück und das ist falsch.
Das heißt aber ich müsste einen Ordner mit Bildern immer mitführen. Ich möchte die Bilder aber mit ins Assembly reinbauen, damit ich nur "eine" Exe habe wo alles drin steckt.
@ Hansbär: Image myImage = deinProjekt.Properties.Resources.deinBild; pictureBox1.Image = myImage; @ Peter II: Nein, das ist nicht richtig! Ausgegeben wird der Pfad, in dem sich die Exec befindetr. "Aus welcher sie gestartet wurde" ist somit vllt. wirklich zweideutig zu verstehen, zugegeben.
deinBild kennt er nicht. Er meldet: Fehler 2 "xxx.Properties.Resources" enthält keine Definition für "seg0x05". D:\Projekte\xxx\xxx\Form1.cs 182 64 xxx Wenn ich Image myImage = xxx.Properties.Resources.seg0x05.jpg; schreibe. Mit seg0x05 gehts auch nicht
Nein, es liefert den korrekten Pfad. Schaut man via Reflector oder ILSpy in den Code sieht man das GetModuleFilename() aufgerufen wird und daraus der Pfad gezogen wird. MS könnte das aber ruhig mal besser dokumentieren, ich hab früher auch immer Application.ExecutablePath + Path.GetDirectoryName() genommen weil ich da unsicher war ;D
Bernd H. schrieb: > MS könnte das aber ruhig mal besser dokumentieren, ich hab früher auch > immer Application.ExecutablePath + Path.GetDirectoryName() genommen weil > ich da unsicher war ;D gut dann bin ich wenigsten nicht der einzigste
Hansbär schrieb: > deinBild kennt er nicht. Er meldet: > > Fehler 2 "xxx.Properties.Resources" enthält keine Definition für > "seg0x05". D:\Projekte\xxx\xxx\Form1.cs 182 64 xxx > > > Wenn ich Image myImage = xxx.Properties.Resources.seg0x05.jpg; schreibe. > > Mit seg0x05 gehts auch nicht Beim tippen werden dir ja bereits Möglichkeiten Offeriert. Ist da nichts dabei? Auf welche Weise hast du die Resourcen eingebunden? "Resourcen hinzufügen"->"Vorhandene Datei"? Also funktionieren tut es anfürsich.
Ich habs jetzt so eingebunden wie du oben beschrieben hast. Bei xxx.Properties.Resources. bietet er mir an: Culture Equals ReferenceEquals ResourceManager aber keine Bilder
Hm, schon komisch... Vllt. kannst du das hier noch probieren:
1 | System.Resources.ResourceManager rm = new System.Resources.ResourceManager(Properties.Resources.ResourceManager.BaseName, GetType().Assembly); |
2 | |
3 | Image image = (Image)rm.GetObject ("meinBild"); |
4 | |
5 | pictureBox.Image = image; |
Für meinBild den symbolischen Namen, welchen du gewählt hast. Also ohne .jpg .
Wo liegt denn deine Resourcen-Datei? (*.resx) Die muss nämlich nicht zwangsweise in Properties liegen, muss nicht Resources heißen und man kann außerdem gleich mehrere davon haben ;D
Bernd H. schrieb: > Wo liegt denn deine Resourcen-Datei? (*.resx) > Die muss nämlich nicht zwangsweise in Properties liegen, muss nicht > Resources heißen und man kann außerdem gleich mehrere davon haben ;D Genau und falls dem so ist, ersetzt du Properties.Resources.ResourceManager.BaseName gegen die entsprechende Angabe. Vllt. liegt sie in einem anderen Namespace?
Du kannst hierzu einfach mal in deine .resx->.cs schauen, dort wird mit dem Namespace eröffnet und idR ist der dann eben Projekt.Properties. Sollte dem bei dir nicht so sein, kannst du eine der beiden Methoden von weiter oben darauf anpassen...
Meine Resourcen Datei liegt im gleichen Verzeichnis wie die Projektdatei und die *.cs Datei. Diese heißt bei mir Form1.resx. Ich habe eben bemeerkt, dass wenn ich im Projekt-Explorer auf Resourcen hinzufügen"->"Vorhandene Datei gehe, dann ist die EXE nur ca. 100kb groß. Wenn ich aber in VS die Form1.resx öffne und ziehe die Bilder dort rein, dann wird die EXE etwa 1MB groß. Das heißt die Bilder sind schon mit drin. Ich muss sie nur noch aufrufen können.
Sesk K. schrieb: > System.Resources.ResourceManager rm = new System.Resources.ResourceManager(Properties.Resources.ResourceManager.Ba seName, GetType().Assembly); > > Image image = (Image)rm.GetObject ("meinBild"); > > pictureBox.Image = image; Funktioniert auch nicht, weil ich BaseName ebenfalls nicht angezeigt bekomme
Sooo... jetzt hab ichs doch noch hinbekommen. Scheinbar sind nur die statischen Bilder. Die zum Übersetzungszeitpunkt schon bestehen in der resx gespeichert. Dort sind nämlich nur drei statische Bilder von mir drin. Ich habe die Bilder über den Projekt-Explorer in Properties/Resourcen hinzugefügt. Dann erscheinen sie im Ordner Resources im Explorer (dort liegen sie auch wenn man die Bilder direkt in die resx importiert. Die Bilder rufe ich dann wie folgt auf: pictureBox_table.Image = Projektname.Properties.Resources.bildname; bildname ist nur der Name ohne .jpg, .bmp oder sonstiges. Trotzdem vielen Dank für Eure mithilfe!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.