nepixl
Goto Top

VB bestimmte Stelle im Bild highlighten wenn MouseOver Textbox?

Guten Morgen werte Admins,

da es etwas ruhiger geworden ist in der Firma, habe ich nun einen Auftrag erhalten, eine Form zu entwickeln mit unseren "Berechnungen".
Damit die User es leichter haben, hätte Cheffe gern ein Highlight um die jeweilige "Linie" die Berechnet wird/werden soll.

Aktuell siehts so aus: Form1 mit einer PictureBox versehen und das Bild importiert.
Bspw: sieht man auf dem Bild: A Strecke B ; in einer Textbox soll ein Wert eingetragen werden.
Cheffe möchte nun, dass wenn ich "Strecke A<>B berechne bzw. was in die Textbox tippe bzw die Textbox (Courser/Tab) onFocus setze, dass dann nur die jeweilige Linie im Bild markiert wird.

Habe mich etwas belesen im Netz aber bekomme Probleme bei der Umsetzung was daran liegt, dass ich kein erfahrerener Entwickler bin. face-sad

Würde mich echt freuen um Lösungs(ansätze).
Ich bedanke mich schonmal im Voraus! face-smile

Viele Grüße
PixL

Content-ID: 340180

Url: https://administrator.de/contentid/340180

Ausgedruckt am: 24.11.2024 um 02:11 Uhr

eisbein
eisbein 09.06.2017 aktualisiert um 08:57:17 Uhr
Goto Top
Hallo werter Fragender!

Aktuell siehts so aus

kannst du evtl. einen Screenshot oder Bild hochladen (Ist - Soll), damit man sich das besser vorstellen kann?

Verwendest du C# oder VB.net? (Sorry, steht ja in der Überschrift -> VB)

Gruß
eisbein
nepixl
nepixl 09.06.2017 aktualisiert um 09:00:24 Uhr
Goto Top
Guten Morgen Eisbein,

aktuell probiere ich mich am VB Express 2010 - also Basic. face-smile

Da ich nicht die org. Daten nehmen kann, ein kleines Beispiel:

Nun möchte mein Chef, dass wenn der User die Daten einträgt (bspw: "Strecke A-B") oder das Textfeld hovert, markiert, onFocus setzt, dass dann quasi ein gelber "Streifen" auf die Linie A bzw A<>B geht. (60% transparenz?)
Mit anderen Worten: Den jeweiligen Bereich highlighted.

Garnicht so einfach das zu umschreiben. face-big-smile

Ich danke im Voraus.
Beste Grüße
PixL
example
eisbein
eisbein 09.06.2017 um 09:14:10 Uhr
Goto Top
Hallo!

Du musst die Stecken als eines Objekt (Grafik) einblenden. Wenn es nur Linien sind, ist es noch besser:
Dim pen As New Pen(Color.FromArgb(255, 0, 0, 0))
e.Graphics.DrawLine(pen, 20, 10, 300, 100)

Beim Event onFocus zeichnest du die Linie einfach in der gewünschten Farbe neu.

Gruß
eisbein
133417
133417 09.06.2017 aktualisiert um 09:22:04 Uhr
Goto Top
Die Linien mit der Graphics API nachzeichnen wie @eisbein schreibt wäre eine Möglichkeit.
Die für dich bestimmt einfachere Variante (ohne viel Positionierarbeit) wenn du mit einer Picturebox arbeitest wäre es, einfach für jeden Step ein neues Bild einzublenden auf dem der jeweilige Schritt wie gewünscht vorgehoben ist.
Sauberer wäre es natürlich wenn du alle Strecken über das Graphics APi zeichnen würdest, weil platzsparender.

Gruß BibersBaum
nepixl
nepixl 09.06.2017 aktualisiert um 09:25:31 Uhr
Goto Top
@eisbein:
Vielen Dank für dein Feedback. Leider ist das Bild sehr aufwändig mit einigen Linien.
Mindestens 11 Strecken sollten gehighlighted werden. Einzeln zeichnen geht leider nicht da die Graphic eine CAD Zeichnung ist. face-sad

@133417:
Auch Dir danke für deine Anregung. Dein Ansatz klingt etwas "einfacher" jedoch immernoch sehr aufwändig.

@all:
Hätte mir das eher so vorgestellt: Ich erstelle eine Balken, gebe dem 60% Transparenz und lege es über die org. Strecke im Bild. Leider klappt das so nicht, da die Ebene von dem Bild irgendwie immer über dem "Balken" liegt.
Pseudotext:
Wenn TextFeld1 onFocus then balken1.enabled ...

Hat mir hier wer eine praktikable Idee?
eisbein
eisbein 09.06.2017 um 09:28:23 Uhr
Goto Top
Hallo!

Leider klappt das so nicht, da die Ebene von dem Bild irgendwie immer über dem "Balken" liegt.

Es gibt im Menü irgendwo den Befehl "In den Hintergrund", "In den Vordergrund". Da kannst du jedes Objekt in den Vordergrund bzw. Hintergrund bringen.

Ob deine Idee weniger aufwändig ist wird sich zeigen face-wink

Gruß
eisbein
133417
133417 09.06.2017 aktualisiert um 09:31:07 Uhr
Goto Top
Transparent Overlay ist so eine Sache bei Windows Forms, ist zwar machbar, aber mit einigem Tricks verbunden
https://stackoverflow.com/questions/4503210/draw-semi-transparent-overla ...

Ich würde hier gleich zu einer WPF-Anwendung greifen, dort ist das wesentlich konsistenter du hast zig mehr Möglihkeiten in dieser Hinsicht und bist auch aktueller was die modernen OS betrifft.
Windows Forms steht schon länger auf dem Abstellgleis.

Was hier Aufwändig sein soll erschließt sich mir nicht, Arbeite mal für dein Geld face-wink
nepixl
nepixl 09.06.2017 um 09:31:06 Uhr
Goto Top
@eisbein:
Oh!? Dann muss ich mich da (nochmal) umschauen. face-smile - Scheint mir entgangen zu sein. -Danke!

@133417:
Oh? Mach mich nicht verrückt. face-big-smile
WPF? Muss ich mich komplett reinarbeiten. Noch nie was damit gemacht bzw gesehen. Ohjee.

Ich Danke Euch beiden herzlichst! face-smile

Grüße
PixL
nepixl
nepixl 09.06.2017 aktualisiert um 10:37:35 Uhr
Goto Top
Werte Admins, werte Unterstützer,

habe mir eine vermutlich unkonventionelle Lösung überlegt die meinen Ansprüchen ausreicht. (Achtung, relativ simpel und vermutlich auch Augenkrebs für geübte Coder..)

Shape eingefügt, Farbe etc definiert. (50% Transparenz).
Über die gewünschte Strecke gelegt.

Die Textboxen wurden so angelegt:

[GotFocus]
Private Sub TextBox5_OnFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox5.GotFocus
         CHighlight.Visible = True
End Sub

[LostFocus]
Private Sub TextBox5_LostFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox5.LostFocus
        CHighlight.Visible = False
End Sub

Klappt bisher ganz gut.

Danke für Eure Unterstützung. face-smile

Grüße
PixL