mathe172
Goto Top

VB.NET(VS2010)-Sinnloser(?) Fehler bei Controls.Add eines FlowLayoutPanels - Fragen zum Drag n Drop

Hallo zusammen!
Ich habe gleich wieder einen ganzen Haufen fragen zu einem Program, das ich zur Zeit entwickle...
Die erste Frage habe ich schon im Visual Basic Developer Center gestellt, bekam aber bisher keine Antwort...
Ich hoffe ihr habt eine face-smile

Ich schreibe im Moment an einer Klasse, die von FlowLayoutPanel erbt und Drag 'n Drop ermöglichen soll...
Das funktioniert auch alles. Nun wollte ich es möglich machen, dass man eine Datei darauf ziehen kann, für die dann ein spezieller Button (Class FileButton, Inherits Button) erstellt werden soll, der den Pfad der Datei enthält...

1. Problem:

Das funktioniert auch noch. Nun hat dieser neue FileButton(Meine Button-Klasse, die von Button erbt) aber noch die Standardeigenschaften (er ist zu klein, hat die Falsche Farbe...).

Um das zu ändern habe ich eine neue Eigenschaft zu meiner "FlowLayoutPanel"-Klasse hinzugefügt, die einen Standard-Button enthält. (Public Property MyControlsModel as FileButton)

Dann soll dieser Code den fertigen Button "erstellen", der alle Eigenschaften richtig hat.
'----Code zur Zuweisung aller Eigenschaften----  
'source ist vom Typ FileButton  
'Pfad zwischenspeichern  
Dim FilePath As String = source.FilePath'FilePath ist die Eigenschaft meiner Klasse FileButton, die den DateiPfad enthält  
'StandardButton klonen  
source = _MyControlsModel.Clone
'Pfad zuweisen  
source.FilePath = FilePath
'Zu den Controls hinzufügen  
Me.Controls.Add(source)

'----Clone-Funktion der Klasse FileButton----  
Public Function Clone() As FileButton
  Return MemberwiseClone()
End Function
Der Button hat alle Eigenschaften richtig(soweit ich weiss), aber die .Add-Methode funktioniert nicht.

Sie bringt den Fehler:"child" ist kein untergeordnetes Steuerelement dieses übergeordneten Elements.

Das Argument von .Add heisst aber value und auch sonst, ich will das Control ja erst hinzufügen, es sollte ja noch gar nicht untergeornet sein!?
Oder gibt es ja eine bessere Methode, um dem Button meine Eigenschaften zu geben, ohne den Code von FileButton anzupassen oder alle Eigenschaften aufzulisten und manuell zu setzen(Das ist meine Zwischenlösung)?

2. Problem:

Das Drag 'n Drop funktioniert jetzt übergangsmässig schon mal...
Wenn ich jetzt aber auf mein Program den Ordner BeispielBilder ziehe(OS:Windows 7; Pfad :C:\Users\Public\Pictures\Sample Pictures) dann ist der Text meines Buttons (wird automatisch zu Datei- oder Ordnername) leider eben "Sample Pictures", da der Name aus dem Pfad geholt wird.
Kann man das ändern? Also dass der Text BeispielBilder lautet?
Mein jetziger Code:
Partial Class FileButton
    'Zur Laufzeit kommt der Pfad aus einem DataObject, vom DragDrop Event von FlowLayoutPanel  
    Public Event FilePathChanged(ByVal ChangedButton As FileButton)
    Private _FilePath As String
    Public Property FilePath As String
        Get
            Return _FilePath
        End Get
        Set(ByVal value As String)
            If value <> "" Then  
                RaiseEvent FilePathChanged(Me)
                _FilePath = value.Replace("/", "\")  
                ChangeImgAndText(_FilePath)
            End If
        End Set
    End Property

    Private Sub ChangeImgAndText(ByVal Path As String)
        If My.Computer.FileSystem.FileExists(Path) Or My.Computer.FileSystem.DirectoryExists(Path) Then
            himgsmall = SHGetFileInfo(Path, 0, shinfo, System.Runtime.InteropServices.Marshal.SizeOf(shinfo), SHGFI_ICON Or SHGFI_LARGEICON)

            Me.ForeGroundImage = Icon.FromHandle(shinfo.hIcon).ToBitmap
            '------------Hier soll der Name der Datei oder der Ordner rausgefunden werden------------  
            Me.Text = System.IO.Path.GetFileName(Path)
            If Me.Text = "" Then Me.Text = New System.IO.DirectoryInfo(Path).Name  
        End If
    End Sub
End Class

3. (Und letztes face-smile) Problem:

Um die Gedroppten Objekte verarbeiten zu können, muss ich ja den Typ kennen (oder?)...
Was hat zum Beispiel die Bibliothek Dokumente (Windows 7) für einen Typ. Es ist auf jeden Fall kein DataObject mit FileDropList...(wie alle anderen Dateien)
Und wenn ich Lesezeichen aus FireFox akzeptieren lassen will? Kann man das herausfinden(mit GetType oder so), bzw. muss man das Wissen/Nachlesen?


Ich weiss es ist viel, aber ich wollte nicht mehrere Themen aufmachen und irgendwie gehören sie ja zusammen...
Wenn ihr mehr Code braucht oder sonst etwas unklar ist, bitte nachfragen!

Verzweifelt,
Mathe172

Content-ID: 162531

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

Ausgedruckt am: 05.11.2024 um 19:11 Uhr