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
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.
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:
3. (Und letztes ) 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
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
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
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 ) 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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 162531
Url: https://administrator.de/contentid/162531
Ausgedruckt am: 05.11.2024 um 19:11 Uhr