Autor Beitrag
General_Windu512
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 16.12.10 18:51 
Hallo

Ich hab folgendes Problem :

Ich habe in meinem windows form programm mehrere pictreboxen die alle das selbe contextstripmenu verwenden.wenn ich nun auf eine der boxen rechtsklicke erscheint das contextmenu und ich kann auf den ersten punkt klicken.im quelltext vom dazugehörigen click event hab ich nun den namen der picturebox auf die ich rechtsgeklickt habe in einer string variable gespeichert(mit hilfe von sourcecontrol).ich habe vor das bild das sich in der entsprechenden picturebox befindet mit hilfe von Load(); zu verändern.Doch das will irgendwie nicht klappen.
Ich hab bereits versucht eine neue picturebox anzulegen-in etwa so :

picturebox icon = new picturebox();

dann hab ich den namen dieser picturebox mit dem in der string variable überschrieben und dann versucht das bild von icon zu verändern-der name dieser picturebox ist jetzt eigentlich der der anderen picturebox ,die ich angeklickt hatte-

Das Problem ist jetzt ganz einfach das er nicht das bild der angeklickte picturebox
verändert sondern (vermutlich,kann man ja nicht sehen) das der icon picturebox



hoffe ihr könnt mir so weit folgen und ich hoffe ihr könnt mir bei diesem Problem helfen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 16.12.10 19:23 
Ich nehme an, dein Problem ist, daß "SourceControl" als Typ "Control" deklariert ist und du jetzt nicht weißt, wie man dann auf die zugehörige PictureBox zugreifen kann. Das Zauberwort heißt "casten":
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
PictureBox pb = contextMenuStrip.SourceControl as PictureBox;
if(pb != null// Test, ob wirklich eine PictureBox vorliegt
{
  pb.Load();
}

(s.a. [Tipp] Casten aber richtig: Begriffe wie Cast / is / as)

_________________
... denn die Kunst ist nur der Schein anders als der Rest zu sein.

Für diesen Beitrag haben gedankt: General_Windu512
General_Windu512 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 16.12.10 19:53 
Vielen Dank! Das ist genau das was ich gebraucht hab :D

wusste bisher gar nicht dass man die funktionen eines befehls auf einen anderen übertragen kann,sehr praktisch.

Na ja jedenfalls vielen Dank!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 16.12.10 20:22 
Nein, die Funktionen kann man auch nicht einfach so "übertragen", sondern es ist so, daß hinter dem SourceControl ja ein konkretes Control steckt (in deinem Fall PictureBox).
Aber grundsätzlich kann man ja ein ContextMenuStrip an jedes beliebige Control hängen, daher ist SourceControl als Datentyp "Control" definiert.
Das Objekt dahinter bleibt auch unverändert:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
PictureBox pb = new PictureBox();

Object obj = pb; // kann auch "Control" (oder eine andere Oberklasse von PictureBox) hier stehen!

PictureBox same_pb = (obj as PictureBox);

// same_pb ist nun eine Referenz auf die ursprüngliche PictureBox (genau wie pb)!