C# - Event unterdrücken

Gast #2482990
Lesenswert?

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.
Gast #2483583
Lesenswert?

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?
Gast #2483618
Lesenswert?

> 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
#2483644
Lesenswert?

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
Gast #2483661
Lesenswert?

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?
#2483669
Lesenswert?

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;
#2483708
Lesenswert?

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.
#2483731
Lesenswert?

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 .
#2483757
Lesenswert?

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?
Gast #2484664
Lesenswert?

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.
Gast #2484707
Lesenswert?

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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren