Announcement

Collapse
No announcement yet.

dynamische ressourcen

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

  • dynamische ressourcen

    Hallo,

    ich suche verzweifelt nach einer Lösung für folgendes Problem:

    Ich möchte in einem Handle das Bild des Handleauslösers ändern (Mouseenter - kein Problem) allerdings bekomme ich den dynamischen Zugriff auf die Ressourcen nicht hin.

    Code:
    Private Sub Buttons_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BearbeitungUebernehmen.MouseEnter
            sender.BackgroundImage = My.Resources(sender.Name.ToString & "Hover")
        End Sub
    das beispiel so geht natürlich nicht, das markierte ist falsch

    also wenn das event durch sender ausgelöst wird, soll das bild des sender-objektes den Zusatz "Hover" bekommen
    Bild Normal: 'dasIstMeinBild'
    Bild bei Hover: 'dasIstMeinBildHover'

    beide bilder liegen ntürlich ordentlich in resources und können über My.Resources.??? einwandfrei aufgerufen werden. Doch das mit der dynamisierung klappt einfach nicht - google spuckt auch nichts brauchbares aus.

    danke.
    Zuletzt editiert von KriZa; 12.12.2008, 13:59.

  • #2
    Hallo,

    das geht schon deshalb nicht, weil System.Object keine Eigenschaft Name hat. Du kannst aber davon ausgehen, dass sender bei Control-Ereignissen eigentlich immer ein Control ist (mir ist bisher jedenfalls noch kein anderer Fall untergekommen). Du kannst deshalb aus "sender As Object" mit CType ein "senderControl As Control" machen, bei dem Du Name abfragen kannst.

    Dann ist auch ToString völlig überflüssig, weil es sowieso ein String ist.

    Jürgen

    Comment


    • #3
      mhh - ich habe grad einen c# code gefunden, den ich übersetzt lassen habe (von einem converter). folgedes habe ich nach anpassungen hinbekommen:

      Code:
      Private Sub Buttons_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BearbeitungUebernehmen.MouseEnter
          Dim resources As New ResourceManager(Me.[GetType]().[Namespace] & ".Resources", Me.[GetType]().Assembly)
          sender.BackgroundImage = resources.GetObject("Button" & sender.Name.ToString & "Hover")
          resources.ReleaseAllResources()
      End Sub
      das funktioniert. komischerweise auch mit sender.name.tostring! das würde ja deiner aussage widersprechen. was mir nich zugänglich ist ist folgender code: ResourceManager(Me.[GetType]().[Namespace] & ".Resources", Me.[GetType]().Assembly) - ich weiß was er letztendlich mach - den zugriff aus My.Resources herstellen, aber die einzelnen Argumente sind mir unklar. und was sollen die eckigen klammern? (grad probiert - kann man auch weglassen ohne probleme)

      Comment


      • #4
        Hallo,

        in den Resourcen (vom Designer) werden diese als Eigenschaften angeboten. Dh dynamisch kann nur über Reflektion darauf zugegriffen werden. Dies ist aber ein umständlicher Weg, zumal der Name des aktuell angezeigten Bildes nicht direkt gespeichert wird.

        Einfacher wäre die Verwendung der Tag-Eigenschaft eines Images um das Hover-Bild zu speichern.

        Beispiel:
        [highlight=vbnet]
        Imports System
        Imports System.Drawing
        Imports System.Windows.Forms

        Namespace WindowsFormsApplication1
        Public Partial Class Form1
        Inherits Form
        Public Sub New()
        InitializeComponent()

        ' Bilder:
        Dim img As Image = Properties.Resources.Bild
        Dim hoverImage As Image = Properties.Resources.BildHover

        ' Hover- und Original-Bild über Tag-Eigenschaft merken:
        img.Tag = hoverImage
        hoverImage.Tag = img

        ' Dem Control das Hintergrundbild zuweisen:
        button1.BackgroundImage = img
        End Sub

        Private Sub button1_MouseEnter(ByVal sender As Object, ByVal e As EventArgs)
        ' Control aus sender holen (sender ist object):
        Dim ctrl As Control = TryCast(sender, Control)

        ' Hoverbild über Tag holen:
        ctrl.BackgroundImage = TryCast(ctrl.BackgroundImage.Tag, Image)
        End Sub

        Private Sub button1_MouseLeave(ByVal sender As Object, ByVal e As EventArgs)
        Dim ctrl As Control = TryCast(sender, Control)

        ctrl.BackgroundImage = TryCast(ctrl.BackgroundImage.Tag, Image)
        End Sub
        End Class
        End Namespace
        [/highlight]

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment

        Working...
        X