Layout und Controls und ReBuild
- VB.NET
- .NET (FX) 4.5–4.8
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 36 Antworten in diesem Thema. Der letzte Beitrag () ist von Amelie.
-
-
Antworten krieg ich ja nich
Ich habe vor Monaten mal gegoogle nach Programmen zum "Umbenennen von Dateien" Da kamen die üblichen verdächtigen, Chip, Bild usw....
Habe mir einige angesehen 2 oder 3 auch mal ausprobiert. Sagte mir alles nicht zu.
Entweder viel zu unübersichtlich, weil mit soviel ( für mich nicht brauchbaren ) ausgestattet.. oder sie funktionierten nicht weil ich erst wieder auf Win10 oder etliche FWs downloaden sollte.
Einiges war "Free/ShareWare" oder eben nur Testprogramme, wo ich dann max 3-xx Dateien umbenennen konnte usw...
Im Endeffekt halt nichts was ich für mich brauchen konnte.Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. -
@Haudruferzappeltnoch: Was ist für Dich unbeantwortet? Welche verfügbaren Programme Amelie schon genutzt hat oder wie ihre Benennungsstrategie ist, wenn mehrere Dateien den gleichen Namen haben?
btw: Meine Programme erzeugen auch manchmal Dateien und da müssen Namen vergeben. Und da ich damit rechnen muss, dass das Programm ggf. schon eine Datei mit gleichem Namen erzeugt hat, verwende ich einfachen brute-force-Code:
@Amelie: Haudruferzappeltnoch hat ja auch nen Controlvorschlag in Post#18 gemacht.
Ich hätte aber nochmal einen, eher einfachen:
Eine ListBox, in der die Dateitypen drinstehen, und eine CheckedListBox, in der die entsprechenden Endungen drinstehen.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln. -
Damit noch ein paar Antworten kommen.
Auf die Frage was hätte ich ohne so ein Programm gemacht.
Naja z.B. jedes Bild vom Urlaub, in einem Programm geöffnet das mir das Aufnahmedatum anzeigt, es wieder geschlossen und dann von Hand umbenannt.
Das ganze dann mit jedem Bild, ach und natürlich auch mit jedem Video.
Wenn dann bei einer Kamera oder Handy nicht die richtige Uhzeit oder Datum eingestellt ist, addiere ich jedem Datum dann noch was von Hand dazu bevor ich es umbenenne.
Vor einigen Jahren habe ich das Programm "NameExif" benutz um Bilder nach Datum und Uhrzeit umzubenennen.(ist kein kommerzielles Programm)
Damals gingen allerdings Videos noch nicht und mir hat auch die Vorschau auf die neuen Namen gefehlt.
Und Vorschau von den Bildern und Videos gingen natürlich auch nicht.
Hatte vorher auch noch andere Programme angeschaut, aber auch mir haben die bisher nicht so zugesagt.
Wenn im DGV das mit den Farben auch geht wäre das auch eine Möglichkeit. (aktuell habe ich die ListView und es geht wie gewünscht)
Warum einen Falschen Dateinamen Rot anzeigen, die Kamera machen da keinen Fehler, aber der Anwender kann in der Textbox z.B. ein ? oder Eckige Klammern etc. eingeben.
Klar könnte ich das auch in der Textbox raus Filtern, da ich aber z.B. die Eckigen Klammern in der TextBox für "Standard Elemente" wie Datum oder Uhzeit etc. verwende, die dann ersetzt werden,
wäre das auch keine Lösung.
Daher Prüfe ich den Dateinamen vor der Ausgabe und färbe ihn dann in der Liste. (in der Textbox in welcher der User es eingibt wird es auch noch angezeigt)
Es ist auch möglich andere Dateien umzubenennen, aber das kommt bei aber eigentlich so gut wie vor. -
@VaporiZed
Eine ListBox, in der die Dateitypen drinstehen, und eine CheckedListBox, in der die entsprechenden Endungen drinstehen.
Dann musste sich aber der Inhalt der CheckedListbox mit den Dateiendungen automatisch ändern je nach dem was in den typen drin steht...
Mal überlegen wie ich das machen könnte... und wie ich das dann mit dem "Layout" umsetze.Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. -
Stichwort DataBinding. Wenn Du eine Datenliste mit Objekten vom Typ X hast, wobei X aus einem
String
(Kategorienamen) und eineList(Of String)
für die Endungen besteht, kannst Du mittels DataBinding bzw. BindingSource die Titel aller X-Instanzen in der ListBox und die Endungen in der CheckedListBox anzeigen lassen. Die Anzeigeumschaltung erfolgt so automatisch. Die Auswahl der gewünschten Dateiendungen ginge ggf. auch mit DataBinding. Versuch es an einem Testprojekt, bevor Du Dir Dein jetziges verunstaltest.
##########
Da die CheckedListBox aber DataBinding und Item-Selection nicht so leicht vereinbar macht, kannst Du auch alternativ zur CheckedListBox ein DGV nehmen, dass Du dann designtechnisch ähnlich gestaltest. Damit geht es dann mit DataBinding sehr leicht.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()
-
@VaporiZed Ich muss gestehen, ich sehe nicht eine Frage als hinreichend beantwortet an bis Post 24
Danke @SoEinVBler
Das geht also doch in Richtung automatisierte Umbenennung. Das heißt aber gleichzeitig, wenn du nicht selber tippen willst, dann braucht man keine Auflistung/Anzeige der Dateien. Selbes Prinzip bei "NameExif", warum braucht man denn eine Vorschau der automatisierten Umbenennung? Entweder die Automatisierung funktioniert oder sie tut es nicht, kann das so krass schiefgehen, dass das überwacht werden muss?
Ok rot für Userinput, da komm ich mit.
Kann man im Explorer nicht das Erstelldatum sehen? Also deswegen muss die Datei doch nicht so heißen. Ja ok falsche Handyzeit, das wäre nicht abgedeckt, aber kann man an diesen Geräten nicht die Uhrzeit einstellen?
Wenn das so ein großes Problem ist, dass ein Programm das ausbaden muss, dann kann man das auch kaum vergessen.
Und das mit der Anzeige ist hochrelevant, brauch ich nämlich keine Anzeige muss ich auch keine Filter auswählen. Übrigens auch eine weiterhin unbeantwortete Frage. Mir ist immer noch nicht klar, ob das überhaupt zum Filtern sein soll. So wie wir es in Post 18 und Post 23 annehmen. -
@VaporiZed
Ich hatte noch eine Idee mit dem "Treeview" aber das ist auch nicht das Gelbe vom Ei.
Habe dann mal das mit den beiden Boxen gemacht.
Hierzu gleich mal eine Frage: Wie bekomme ich die beiden auf gleiche Höhe? Habe so ziemlich alles Versucht...
Ob mir das vom Design her besser gefällt weiß ich noch nicht. Aber für andere Sachen, finde ich das schon cool.
Spoiler anzeigen
VB.NET-Quellcode
-
- Imports System.Xml
- Public Class Form1
- Private xmlDoc As New XmlDocument()
- Public Sub New()
- InitializeComponent()
- End Sub
- Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- xmlDoc.Load("A:\TestUmgebung\Extensions.xml")
- LoadTreeView(xmlDoc)
- LoadListBox(xmlDoc)
- End Sub
- Private Sub LoadTreeView(xmlDoc As XmlDocument)
- TreeView1.Nodes.Clear()
- For Each groupNode As XmlNode In xmlDoc.SelectNodes("/FileExtensionDictionary/FileExtensionGroups/Group")
- Dim groupName As String = groupNode.Attributes("Name").Value
- Dim groupTreeNode As TreeNode = New TreeNode(groupName)
- For Each extensionNode As XmlNode In groupNode.SelectNodes("Extensions/Extension")
- groupTreeNode.Nodes.Add(extensionNode.InnerText)
- Next
- TreeView1.Nodes.Add(groupTreeNode)
- Next
- End Sub
- Private Sub LoadListBox(xmlDoc As XmlDocument)
- For Each groupNode As XmlNode In xmlDoc.SelectNodes("/FileExtensionDictionary/FileExtensionGroups/Group")
- Dim groupName As String = groupNode.Attributes("Name").Value
- ListBoxGroups.Items.Add(groupName)
- Next
- End Sub
- Private Sub ListBoxGroups_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBoxGroups.SelectedIndexChanged
- CheckedListBoxExtensions.Items.Clear()
- If ListBoxGroups.SelectedIndex >= 0 Then
- Dim selectedGroup As String = ListBoxGroups.SelectedItem.ToString()
- Dim groupNode As XmlNode = xmlDoc.SelectSingleNode("/FileExtensionDictionary/FileExtensionGroups/Group[@Name='" & selectedGroup & "']")
- For Each extensionNode As XmlNode In groupNode.SelectNodes("Extensions/Extension")
- Dim extension As String = extensionNode.InnerText
- CheckedListBoxExtensions.Items.Add(extension)
- Next
- End If
- End Sub
- End Class
@Haudruferzappeltnoch
überhaupt zum Filtern sein soll
Bei mir soll das zum Filtern der DateiTypen sein. Es kann vorkommen, das ich einen Stick bekomme auf dem alles wild durcheinander ist. Da kann ich mir das dann sukzessive schnell umbenennen.Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. -
Amelie schrieb:
Wie bekomme ich die beiden auf gleiche Höhe? Habe so ziemlich alles Versucht...
Beide Boxen haben aber die PropertyIntegralHeight
, die Du aufFalse
setzen kannst. Danach kannst Du beide Boxen fließend höhentechnisch einstellen. Oder nur eine und an die andere anpassen.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln. -
@VaporiZed
Also das mit der gleichen "höhe" klappt ja.
Frage dazu: Woher bekommt man solche Infos?
OK dann habe ich nochmal mit einem DGV versucht.
2 Probleme. Ich bekomme das mit den Checkboxen nicht hin und vom Layout.. je mehr Gruppen hinzukommen, desto breiter wird das ganze. Also auch Suboptimal.
Aber trotzdem eine gute Übung mit dem DGV.
Spoiler anzeigen
VB.NET-Quellcode
-
- Private Sub LoadDataGridView(xmlDoc As XmlDocument)
- dgvXML.Rows.Clear()
- For Each groupNode As XmlNode In xmlDoc.SelectNodes("/FileExtensionDictionary/FileExtensionGroups/Group")
- Dim groupName As String = groupNode.Attributes("Name").Value
- dgvXML.Columns.Add(groupName, groupName)
- Next
- For Each groupNode As XmlNode In xmlDoc.SelectNodes("/FileExtensionDictionary/FileExtensionGroups/Group")
- Dim groupName As String = groupNode.Attributes("Name").Value
- For Each extensionNode As XmlNode In groupNode.SelectNodes("Extensions/Extension")
- Dim extension As String = extensionNode.InnerText
- Dim rowIndex As Integer = dgvXML.Rows.Add()
- dgvXML.Rows(rowIndex).HeaderCell.Value = extension
- Dim groupColumnIndex As Integer = dgvXML.Columns(groupName).Index
- If groupColumnIndex >= 0 Then
- dgvXML(groupColumnIndex, rowIndex).Value = False
- End If
- Next
- Next
- End Sub
Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. -
Amelie schrieb:
Woher bekommt man solche Infos?
IntegralHeight: Musste ich ein bisschen im Netz recherchieren, um auf den Begriff zu kommen. Hatte mir damals ein eigenes DGV basteln wollen, was sowas auch kann. Aber für dieses Sowas brauchte ich ein Begriff. Und den hatte ich damals gesucht und gefunden.
Das mit der DGV-Nutzung ist nicht wie von mir gedacht. Du solltest nicht alle Dateiendungen anzeigen lassen, sondern in einer ListBox die Kategorien und im DGV die passenden Dateiendungen. Und die erste Spalte sollte eine CheckBoxColumn sein, keine TextBoxColumn.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()
-
@VaporiZed
Das mit der DGV-Nutzung ist nicht wie von mir gedacht.
Habe ich dann falsch verstanden.
Jetzt habe ich eine Mischung aus "Listbox und Listview" gemacht. Siehe Bild.
Gefällt mir vom Layout und der Übersicht schon besser, obwohl es eine Tüftelei ist die passende "Breite" für das Listview zu ermitteln.Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. -
Die ListView hat mir optisch in früheren Windows Versionen auch immer besser gefallen. Hierzu ein kleiner Tipp du kannst auf die ListView den Explorerstyle anwenden damit sieht das Ding noch ansprechender aus.
Spoiler anzeigen
C#-Quellcode
- internal static class NativeMethods
- {
- [DllImport("uxtheme.dll", CharSet = CharSet.Unicode)]
- public static extern int SetWindowTheme(IntPtr p, string str0, string str1=null);
- }
- /*
- Friend Module NativeMethods
- <DllImport("uxtheme.dll", CharSet:=CharSet.Unicode)>
- Function SetWindowTheme(ByVal p As IntPtr, ByVal str0 As String, ByVal Optional str1 As String = Nothing) As Integer
- End Module
- */
Aufgerufen wird das ganze dann mitNativeMethods.SetWindowTheme(DeineListView.Handle, "explorer");
Zu deiner eigentliche Frage, falls ich dich richtig verstanden habe sollen egal bei welcher Breite immer die selbe Anzahl an Items pro Reihe angezeigt werden?
Einstellen kann man das leider nicht aber es gibt einen Workaround mittels einer ImageList.
D.H. weise deiner ListView eineImageList
zu und aboniere denForm_Resize
Event.
Das gezeigte Beispiel zeigt bis zu einer Bestimmten Größe immer 3 Items pro Zeile an.
C#-Quellcode
- private void Form1_Resize(object sender, EventArgs e)
- {
- int minWidth = DeineListView.Width - 140; // -140 fürs padding
- int iconWidth = (int)Math.Round(minWidth / 3d, MidpointRounding.ToEven);
- iconWidth = Math.Min(iconWidth, 256); // Maximale Breite für die ImageList.Images ist 256
- ImageList_ListViewIcons.ImageSize = new Size(iconWidth, ImageList_ListViewIcons.ImageSize.Height);
- }
-
@Fakiz
Bei deinem Bild, wo ist da der Unterschied? Ich sehe da keinen???
Dein CodeShnipped werde ich mal austesten.Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. -
Das sollte nur zeigen das es 3 Items in einer Zeile sind.
*Edit*
Hab mal 2 Bilder angehängt die den Unterschied zwischen dem Explorer-Style und den WinForms-Style zeigen. Eines ist von Win7 und das andere von Win11.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fakiz“ ()
-
@Fakiz
Danke, ich habe es nun mit der "Breite" hinbekommen. Ein paar Versuche und dann habe ich den richtigen Wert erhalten für 3 oder 4 oder 5 ...Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. -
-
Ähnliche Themen
-
intelcore22 - - Sonstige Problemstellungen
-
6 Benutzer haben hier geschrieben
- Amelie (16)
- VaporiZed (8)
- Haudruferzappeltnoch (8)
- SoEinVBler (2)
- Fakiz (2)
- mrMo (1)