Announcement

Collapse
No announcement yet.

Control zur Laufzeit austauschen

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

  • Control zur Laufzeit austauschen

    Hallo zusammen,
    ich möchte zur Laufzeit ein Control austauschen. Ob das geht weiß ich nicht, aber ich probiers halt mal.
    Ich habe auf meiner Form eine PictureBox und einen OpenFileDialog. Wird im Dialog ein Bild ausgesucht, wird dieses in der PictureBox dargestellt.
    Wird jetzt aber anstelle eines Bildes ein PDF ausgesucht, soll die PictureBox unsichtbar werden und an ihre Stelle ein ActiveX Steuerelemet treten, das PDF darstellen kann und die selben Maße wie die PictureBox bekommt.

    [highlight=vbnet]
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
    If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    txtDatei.Text = OpenFileDialog1.FileName
    If OpenFileDialog1.FileName.ToLower.EndsWith("pdf") Then
    Dim secretPDF As AxAcroPDFLib.AxAcroPDF = New AxAcroPDFLib.AxAcroPDF
    myPicBox.Hide()
    secretPDF.SetBounds(myPicBox.Left, myPicBox.Top, myPicBox.Width, myPicBox.Height)
    secretPDF.Show()
    secretPDF.LoadFile(txtDatei.Text)
    Else
    If txtDatei.Text <> "" Then
    myPicBox.Show()
    myPicBox.ImageLocation = txtDatei.Text
    End If
    End If
    End If

    End Sub
    [/highlight]

    Das ganze gibt aber leider immer eine COM-Exception
    "Eine Ausnahme vom Typ System.Windows.Forms.AxHost+InvalidActiveXStateExc eption wurde ausgelöst."
    Hat jemand eine Idee was ich falsch mache?

  • #2
    Hallo,
    1. die Dateiendung kann auch "eleganter" geprüft werden:
      [highlight=vbnet]
      Dim fileName As String = "Test.pdf"
      Dim extension As String = Path.GetExtension(fileName)
      [/highlight]
    2. um Controls zur Laufzeit hinzuzufügen und wieder zu entfernen kann folgendes Beispiel verwendet werden:
      [highlight=vbnet]
      Imports System
      Imports System.Windows.Forms

      Namespace WindowsFormsApplication1
      Public Partial Class Form1
      Inherits Form
      Private _myContainer As Control

      Public Sub New()
      InitializeComponent()
      End Sub

      Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
      ' Control von der Form entfernen:
      Me.Controls.Remove(_myContainer)

      ' Neues Control hinzufügen:
      _myContainer = New PictureBox()
      Me.Controls.Add(_myContainer)
      End Sub
      End Class
      End Namespace
      [/highlight]
    3. du kannst du Controls (fürs Bild und fürs PDF) mit dem Designer hinzufügen und die Visible-Eigenschaft bei Bedarf ändern, so dass immer nur eines der beiden angezeigt wird
    4. ziehe in Erwägung das WebBrowser-Steuerelement zu verwenden. Das kann Bilder (von IE unterstütze) und PDF (sofern das im IE eingestellt ist, ist aber standardmäßig so) darstellen


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

    Comment


    • #3
      zu 1. muss ich da noch einen Namespace hinzufügen? Path ist mir leider unbekannt.

      zu 2. genau das hab ich gebraucht

      zu 3. mit dem Designer hab ich leider keine Chance. Sämtliche Controls werden der Anwendung aus XML Dateien dynamisch hinzugefügt (was ich aber nicht gebaut hab, sonst wüsste ich ja wie es geht ) und können später vom Kunden sogar geändert werden (oder ganz rausfliegen). Immerhin konnte ich erreichen, das das Control einen Eindeutigen Namen hat, so das ich es finden und ersetzen kann. Ist es nicht da, oder heißt es anders, wird es nicht ersetzt und PDF nicht angezeigt.

      zu 4. das Webbrowser Control lässt sich nicht meinen Bedürfnissen entsprechend anpassen. Zudem bin ich noch auf der Suche nach weiteren ActiveX Controls mit denen zb. Word, Excel usw. angezeigt werden können.

      Comment


      • #4
        Path ist mir leider unbekannt.
        sorry -> der Namespace System.IO muss eingebunden werden.

        Tipp: In Visual Studio erscheint bei der Eingabe ein kleines rotes Symbol am Ende von Path das darauf hindeutet dass der Namespace fehlt. Mit der Maus auf dieses Symbol -> Menü -> einbinden oder durch Alt + Shift + F10.

        mfG Gü

        Edit: Kannst du mir dann die ActiveX-Controls nennen?
        Zuletzt editiert von gfoidl; 25.11.2008, 17:37.
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          ah...ok super

          danke dir

          EDIT: Wenn ich welche finde, sag ich sie dir. Für Word und "normale" Textdateien, sowie RTF benutz ich momentan TX TextControl.

          Comment

          Working...
          X