Label oder Picturebox? TextBox auf Bild ?!?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von diylab.

    Label oder Picturebox? TextBox auf Bild ?!?

    Servus,

    Momentan lade ich ein Bild in eine PictureBox welches in einem Panel liegt (Dock in der Mitte)

    Jetzt lade ich mittels Mousekoordinaten Textboxen mit StreamWriter auf eine php-Seite
    was auch alles ganz toll klappt.
    Mit der GDI+ Zeichne ich dann auf der PixtureBox ein Rechteck - was aber nur eine Anfängerlösun ist :rolleyes:

    Ich habe nun versucht das Bild als Backgroundimage in das Panel zu laden,
    was auch geht, nur das er mit bei dem Backgroundimage keine Scrollbalken macht ?(
    da dies ja nach Inhalt geht !!

    Folgendes möchte ich haben:
    Ich Klicke auf das Bild (egal ob Panel oder PictureBox)
    an meine Mouse Position kommt dann eine Textbox/SelectBox in der ich dann meine Bezeichnung eingeben kann

    Kann mir einer erklären wie ich das hinbekomme?
    Moin!

    Also du möchtest Folgendes:
    - Ein scrollbares Bild darstellen (Bild-Größe > Form-Größe)
    - Bei Mausklick eine Textbox an der Maus-Koordinate anzeigen
    - Danach irgendwas tolles damit machen.

    Ich würde es erstmal so versuchen (vielleicht nicht optimal, aber eine Idee):
    - Panel oder Form: AutoScroll/AllowScroll/Scrollable = True (Damit ggf. Scrollbars angezeigt werden)
    - PictureBox in obiges Panel oder Form stellen, wenn Picturebox ein Image bekommt (ImageChanged?) PictureBox.Size = Image.Size
    - Eine Textbox erstellen und anfangs .Visible = False stellen.
    - Bei Mausklick auf PictureBox: Textbox.Visible = True, Textbox.Location = PointToClient(Cursor.Position) (oder auch im Event mitgegebene Maus-Koordinaten verwenden).
    - Bei Druck auf Enter, einen Button oder wie auch immer den Textbox.Text auswerten, auf String.Empty oder "" setzen und Textbox.Visible = False.

    Sollte dann eigentlich ganz easy sein. Du kannst auch noch einbauen, dass die Textbox ausgeblendet wird, wenn sie schon angezeigt wird und auch, dass sie nur angezeigt und verschoben wird, wenn sie derzeit ausgeblendet wird.

    Ich hoffe, ich konnte helfen!

    MfG,
    X-Zat / Mo

    schorge schrieb:

    Jetzt lade ich mittels Mousekoordinaten Textboxen mit StreamWriter auf eine php-Seite

    Ihr habt das echt verstanden? Ich habe keine Ahnung, was der TE eigentlich wissen möchte. Wo sind wir denn jetzt - .NET oder PHP?
    Ahh - ich glaub jetzt versteh ichs auch.
    Also soll in die Textbox an der Mausposition etwas eingetragen werden und dann (durch was? Enter?) wird der Inhalt an die PHP-Seite übertragen - ist das so richtig?
    Und jetzt noch weiter gedacht - wenn dann also das Bild scrollbar ist, soll nach dem Abschicken des Textboxinhaltes also eine grafische Markierung ins Bild gemalt werden, egal wie groß das Bild ist - so richtig?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „diylab“ ()

    schorge schrieb:

    an meine Mouse Position kommt dann eine Textbox/SelectBox
    Du könntest dort einen modalen Dialog anzeigen, auf dem nur die Textbox ist. Gib ihm den BorderStyle = None und beende ihn, wenn Enter gedrückt wurde.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    schorge schrieb:

    Kann mir einer erklären wie ich das hinbekomme?

    Hey - heute ist Dein Glückstag :P !
    Ich hatte Lust und Laune, das mal umzusetzen.

    Spoiler anzeigen

    C#-Quellcode

    1. using System;
    2. using System.Drawing;
    3. using System.Windows.Forms;
    4. using System.IO;
    5. namespace PicTagger
    6. {
    7. public partial class frmMain : Form
    8. {
    9. public frmMain()
    10. {
    11. InitializeComponent();
    12. }
    13. /// <summary>
    14. /// Load image
    15. /// </summary>
    16. /// <param name="sender"></param>
    17. /// <param name="e"></param>
    18. private void btnLoad_Click(object sender, EventArgs e)
    19. {
    20. if (openFileDialog1.ShowDialog() == DialogResult.OK && File.Exists(openFileDialog1.FileName))
    21. pbTagImage.Image = new Bitmap(openFileDialog1.FileName);
    22. }
    23. /// <summary>
    24. /// MouseDown in PictureBox
    25. /// </summary>
    26. /// <param name="sender"></param>
    27. /// <param name="e"></param>
    28. private void pbTagImage_MouseDown(object sender, MouseEventArgs e)
    29. {
    30. if (e.Button == MouseButtons.Left)
    31. {
    32. tbTagText.Text = "";
    33. tbTagText.Visible = true;
    34. tbTagText.Location = new Point(pnlWrapper.AutoScrollPosition.X + e.X, pnlWrapper.AutoScrollPosition.Y + e.Y);
    35. }
    36. }
    37. /// <summary>
    38. /// KeyDown in TextBox
    39. /// </summary>
    40. /// <param name="sender"></param>
    41. /// <param name="e"></param>
    42. private void tbTagText_KeyDown(object sender, KeyEventArgs e)
    43. {
    44. if (e.KeyCode == Keys.Enter && tbTagText.Text.Length > 0)
    45. {
    46. tbTagText.Visible = false;
    47. this.Text = tbTagText.Text;
    48. using (Graphics g = Graphics.FromImage(pbTagImage.Image))
    49. {
    50. StringFormat stringFormat = new StringFormat();
    51. stringFormat.Alignment = StringAlignment.Center;
    52. stringFormat.LineAlignment = StringAlignment.Center;
    53. Rectangle drawArea = new Rectangle(tbTagText.Location.X - pnlWrapper.AutoScrollPosition.X, tbTagText.Location.Y - pnlWrapper.AutoScrollPosition.Y, tbTagText.Width, tbTagText.Height);
    54. g.FillRectangle(new SolidBrush(Color.FromArgb(100, 100, 0, 0)), drawArea);
    55. g.DrawString(tbTagText.Text, tbTagText.Font, new SolidBrush(Color.White), drawArea, stringFormat);
    56. pbTagImage.Invalidate();
    57. }
    58. }
    59. }
    60. }
    61. }




    Sollte alles so funktionieren, wie Du es wolltest.
    Projekt ist als Anhang dabei, zum selber Fummeln.

    Viel Spaß,
    Bruno
    Dateien
    • PicTagger.zip

      (54,32 kB, 192 mal heruntergeladen, zuletzt: )