Questo è più un tipo di domanda di design / esperienza utente, quindi se appartiene a qualcun altro per favore fammelo sapere.
Ho un programma con più PictureBox:
PictureBox1
PictureBox2
.
.
PictureBox60
Il campo PictureBox
di Tag
viene compilato con un valore String.
Quando l'utente fa clic su una casella immagine, la proprietà Tag
viene inserita in ListBox
e io li ordino manualmente:
1. ListBox item 1
2. ListBox item 2
3. ListBox item 3
etc
Ogni riga viene anche scritta in un file di testo, sempre con il numero di riga precedente all'elemento.
Condizione 1: se ci sono già elementi nel file, rileva quante linee sono attualmente nel file e continua la numerazione, quindi il file inizia con 1. Esempio:
File1.txt
contiene già
1. Bob
2. Sally
3. Joe
e ListBox
è vuoto. Se viene fatto clic su PictureBox
con Tag
"Charles", la ListBox
ora contiene:
1. Charles
e File1.txt
ora contiene
1. Bob
2. Sally
3. Joe
4. Charles
Condizione 2: il file non esiste ancora, e quindi quando gli elementi vengono aggiunti a ListBox
e scritti nel file, il file viene creato e sono elencati nel file lo stesso come sopra. Gli elementi del file sono numerati a partire da 1.
Condizione 3: il file esiste, ma è vuoto. Voglio, indipendentemente dall'esistenza del file, la numerazione in detto file per iniziare con 1 e continuare la numerazione.
Ecco il codice che devo gestire queste tre condizioni. Mi sembra così disordinato e poco professionale, ma forse ho solo bisogno dell'approvazione degli altri per farlo sentire meno.
Private Sub saveToFile(boss As String, item As String)
' lineCount used so we know where to append in the file i.e. if there were already 5 lines we know to append at the 6th line
' + 1 to use 1 indexing
Dim lineCount As Integer
Dim fileExists As Boolean = False
' vars to retrieve item from ItemDropListBox and extract only the item name
Dim lastItem As String = ItemDropListBox.Items.Item(ItemDropListBox.Items.Count - 1)
Dim periodIndex As Integer = lastItem.IndexOf(".") + 2
Dim itemStringLength As Integer = lastItem.Length - periodIndex
Dim trimmedItem As String = lastItem.Substring(periodIndex, itemStringLength)
Dim sw As IO.StreamWriter
' TODO just me being nitpicky
' [x] - If file doesn't exist, create it and being first item at 1
' [x] - If file does exist AND there is already items in it, write to it with correct order
' [x] - If file does exist and there is NOT items in it, write to it with correct order
' If the file exists, want to
If My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath & "/logs/" & boss & ".txt") Then
lineCount = IO.File.ReadAllLines(My.Application.Info.DirectoryPath & "/logs/" & boss & ".txt").Count
fileExists = True
Else
lineCount = 1
fileExists = False
End If
' True indicates append to file instead of overwrite
sw = New IO.StreamWriter(My.Application.Info.DirectoryPath & "/logs/" & boss & ".txt", True)
If fileExists = True Then
' Write the new item to the file
sw.WriteLine((lineCount + 1) & ". " & trimmedItem)
Else
sw.WriteLine(lineCount & ". " & trimmedItem)
End If
' Close file
sw.Close()
End Sub
Domanda: Sto cercando troppo difficile di risolvere un problema che non accadrà mai? I file non saranno mai creati dall'utente 99,9% delle volte, solo dal codice, quindi la possibilità che abbiano anche un file esiste senza nulla all'interno è già molto sottile. Potrei avere un codice molto più elegante se non mi preoccupassi di gestire questa piccola possibilità.
Ho anche pensato di passare a C #. L'idea originale era di crearla in VB e quindi ricrearla in C #, ma penso che sarebbe una perdita di tempo e ho abbastanza esperienza che penso che C # andrebbe benissimo. Inoltre, da quello che posso dire, avrei molto più controllo sulle cose che voglio cambiare.
Modifica: sposta tutto il codice su C # - non c'è molto e mi sento troppo limitato con VB (nemmeno riguardo a questa domanda)