Announcement

Collapse
No announcement yet.

PictureBox Progleme mit BackroundImage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • PictureBox Progleme mit BackroundImage

    VS2005

    Habe eine PictureBox und möchte dort ein BackroundImage
    plazieren. Auf dieses Bild soll dann Text plaziert werden.
    Leider erfolgt keine dauerhafte Platzierung des Textes auf
    der Bitmap, der Text erscheint nur kurz und verschwindet
    sofort wieder, es scheint so, als ob er von der Bitmap
    überschrieben wird.

    Code:
         
                int Pos_x = 100;
                int Pos_y = 100;
                Graphics g = pictureBox1.CreateGraphics();
                SolidBrush brush1 = new SolidBrush(Color.Yellow);
                Font f1 = new Font("Arial", 8);
                pictureBox1.BackgroundImageLayout = ImageLayout.Stretch;
                Bitmap b1=new Bitmap(@"C:\bitmap\vorhangblau.jpg");
                pictureBox1.BackgroundImage = b1;
                System.Threading.Thread.Sleep(1000);
                g.DrawString("Reihe 1", f1, brush1, new PointF(Pos_x , Pos_y ));
    Wer weiss darüber etwas ?.
    Vielen Dank

  • #2
    Dein zusätzlicher Code zum Zeichnen gehört ins Paint Ereignis der PictureBox. Wenn du einfach irgendwo im Code mal was auf die PaintBox malst ist es beim nächsten neuzeichnen der Paintbox wieder weg.

    Also initialisier einmal die Paintbox mit dem Backgroundimage und pack den eigentlichen Code zum Zeichnen des Textes in das Paint Ereignis wie folgt.

    Code:
            private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                e.Graphics.DrawString("Reihe 1", new Font("Arial", 8), new SolidBrush(Color.Yellow), new PointF(100, 100));
            }

    Comment


    • #3
      Vielen Dank für die Antwort.
      Aktuell habe ich es über Application.DoEvents() hinbekommen,
      möchte aber meine Zeichen-Prozeduren ändern wie vorgeschlagen,
      weiss aber nicht wie.

      Prozedur1(Par1,Par2,Par3)
      { g.DrawImage(....)
      }

      Prozedur2(Par1,Par2,Par3)
      { g.DrawString(..) }

      Wie kann ich die Prozeduren in das Paint_Event ereignis einarbeiten ?.
      Vielen Dank.

      Comment


      • #4
        Kann deinem Problem jetzt nicht ganz folgen.
        Wenn du eine Prozedur hast die das Zeichnen übernimmt ruf die doch einfach aus
        dem Paint Event aus auf?

        Comment


        • #5
          Prozeduren integrieren in Paint_Ereignis

          Habe folgendes Programm:
          PictureBox1
          Auf einen bestimmten Tastendruck soll etwas in die Picturebox1 gezeichnet werden.

          Code:
          private void Key_Press(..)
          {
              Taste=e.Key.ToString();
              switch (Taste)
              {
                 case "a":
                         Prozedur1(Par1,Par2,Par3)
                        break;
                 case "b":
                         Prozedur1(Par1,Par2,Par3)
                        break;
              }
          }
          
          
          
          private void Prozedur1 (string Par1,string Par2,string Par3)
          { 
               g.DrawImage(....)
          }
          
          private void Prozedur2 (string Par1,string Par2,string Par3)
          { 
              g.DrawString(..) 
          }
          
          
          private void pictureBox1_Paint(object sender, PaintEventArgs e)
          {
               //wie können die Prozeduren in das Paint_Ereignis integriert werden ?
          }

          Wie wird das Zeichnen der Picturebox ausgelöst ? (invalidate() oder
          besser Refresh() ?.
          Wie werden die Drawstring / DrawImage Prozeduren in das Paint_Ereignis
          integriert ?.
          Bitte ein Beispiel.

          Vielen Dank.

          Comment


          • #6
            Na, wie bereits erwähnt. Ruf den Code in Paint auf.

            Code:
            private void Key_Press(..)
            {
                Taste=e.Key.ToString();
            }
            
            private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                switch (Taste)
                {
                    case "a":
                          Prozedur1(Par1,Par2,Par3)
                          break;
                    case "b":
                          Prozedur1(Par1,Par2,Par3)
                          break;
                }
            }

            Comment


            • #7
              Vielen Dank für das Beispiel.
              Wie wird die Paint-Prozedur pictureBox1_Paint(..) aufgerufen ?
              Alleine durch den Tastendruck wird dies nach dem Beispiel
              wahrscheinlich nicht ausgelöst.
              Bei mir erfolgt leider eine komplette Löschung der
              PictureBox (Clear), wenn ich für das Auslösen/Aufrufen
              über
              PictureBox.Refresh() oder PictureBox.Invalidate() vornehme, auch
              Teilbereiche mit Invalidate(rectangle,false) führen nicht zu dem
              gewünschten Erfolg.

              private void Key_Press(..)
              {
              Taste=e.Key.ToString();
              }

              Wie kann man eine Löschung des PictureBox-Bereiches verhindern ?
              Vielen Dank.

              Comment


              • #8
                Ich vermute du holst dir ein neues Graphics Object in deinen Prozeduren ran und zeichnest auf diesem?

                Das funktioniert nicht. Sobald der Paint Event zu Ende läuft wird das eigene Graphics Object verwendet um die PictureBox zu zeichnen. Deien Änderungen sind also sofort wieder weg wenn du nicht das Graphics Object benutzt das dir die PaintEventArgs im Paint Event liefern.

                Du solltest also e.Graphics aus den PaintEventArgs mit an deine Prozedur übergeben und auf diesem zeichnen.

                Der Aufruf von Refresh() der PictureBox sollte eigentlich einen Aufruf des Paint Events forcieren.

                Comment

                Working...
                X