aadnk Skrevet 13. juli 2007 Skrevet 13. juli 2007 (endret) {0} erstattes med den første parameter, {1} med den andre, og så videre. Se f.eks. på denne koden: Dim A As String = "er", B As String = "test"MsgBox(String.Format("Dette {0} en {1}.", A, B)) Her blir sluttresultatet «Dette er en test.» Endret 13. juli 2007 av aadnk
AnaXyd Skrevet 13. juli 2007 Forfatter Skrevet 13. juli 2007 Aah.. Så, det blir nesten det samme som: MsgBox(String.Format("Dette" & A & "en" & B & ".") Eller har jeg misforstått litt?
Spartakus Skrevet 13. juli 2007 Skrevet 13. juli 2007 (endret) Nesten, MsgBox("Dette" & A & "en" & B & ".") Endret 13. juli 2007 av xtc
ze5400 Skrevet 13. juli 2007 Skrevet 13. juli 2007 Det er .NET vi snakker? I så fall, drit i MsgBox() MessageBox.Show er korrekt i .NET. Ingen vits i å lære AnaXyd vranglære vel?
Manfred Skrevet 13. juli 2007 Skrevet 13. juli 2007 (endret) MsgBox() Er gammel vb6-shit... Akkurat som VbCrLf og slike ting. Det er en stygg uvane og en uting å bruke det i et .net-prosjekt. MessageBox.Show() og Environment.NewLine er .net-funksjonen/-propertyen. Endret 13. juli 2007 av Manfred
aadnk Skrevet 13. juli 2007 Skrevet 13. juli 2007 Ingen vits i å lære AnaXyd vranglære vel? 9067503[/snapback] Nei, det gikk litt fort i svingene der, gitt. Beklager. MsgBox() er inkludert for bakoverkompatibilitet med Visual Basic 6 og lavere. Funksjonen kalles på samme måte, og forenkler dermed overgangen. For programmer en utvikler i .NET er dette derimot helt unødvendig og fører kun til tregere kode (MsgBox() kaller MessageBox.Show() internt). Men det er jo raskere å skrive MsgBox() da.
AnaXyd Skrevet 13. juli 2007 Forfatter Skrevet 13. juli 2007 Ingen vits i å lære AnaXyd vranglære vel? 9067503[/snapback] Nei, det gikk litt fort i svingene der, gitt. Beklager. MsgBox() er inkludert for bakoverkompatibilitet med Visual Basic 6 og lavere. Funksjonen kalles på samme måte, og forenkler dermed overgangen. For programmer en utvikler i .NET er dette derimot helt unødvendig og fører kun til tregere kode (MsgBox() kaller MessageBox.Show() internt). Men det er jo raskere å skrive MsgBox() da. 9067689[/snapback] Ja, det er mye raskere ja.. Hehe..
AnaXyd Skrevet 13. juli 2007 Forfatter Skrevet 13. juli 2007 Jeg lurer på en ting igjen... Går det ann å eksludere noen filer fra kopieringa? Har nemlig noen filer som er skrivebeskyttet(ja de må være det), og de fungerer å bli kopiert over, men ikke bli overskrevet på nytt. Da blir det error.. Filen heter MEMSTICK.IND, hvis det er til hjelp!
Spartakus Skrevet 13. juli 2007 Skrevet 13. juli 2007 Du kan jo gjøre det litt mer generelt ved å legge en try/catch rundt selve setningen som kopierer fila over. I catchen tar du vare på (legge til en stringe feks) filnavnet som feilet og eventuelt feilmeldinga stom oppstod på den fila.
AnaXyd Skrevet 13. juli 2007 Forfatter Skrevet 13. juli 2007 (endret) Okay, jeg skal se om jeg får til noe! Mens vi er i siget her nå: Jeg kopierte kopieringsfunksjonen inn i en annen form i samme prosjekt, og får denne erroren: 'Callback' cannot expose type 'Progress' outside the project through class 'frmDG'. Og enda en ting som jeg tror er ganske enkelt å løse: Når den kopierer, viser den hele banen til fila som blir kopiert. Hvordan kan jeg kutte litt ned på denne, slik at den bare viser litt av banen? ToolStripStatusLabel1.Text = String.Format("Copying file {0}.", File) Er veldig hyggelig at dere hjelper meg! Endret 13. juli 2007 av AnaXyd
aadnk Skrevet 13. juli 2007 Skrevet 13. juli 2007 Legg først funksjonen inn i en klassemodul og endre Public Sub til Public Shared Sub: Klikk for å se/fjerne innholdet nedenfor Public Class Files Public Delegate Sub Progress(ByVal File As String, ByVal Percentage As Double) Public Shared Sub Copy(ByVal Source As String, ByVal Destination As String, ByVal SubDirectories As Boolean, _ Optional ByVal SearchPattern As String = "*.*", Optional ByVal Callback As Progress = Nothing) ' Lag en liste over alle filene vi skal kopiere Dim aFiles() As String = IO.Directory.GetFiles(Source, SearchPattern, IIf(SubDirectories, _ IO.SearchOption.AllDirectories, IO.SearchOption.TopDirectoryOnly)) ' Kopier hver av dem til destinasjonsmappen For Index As Integer = 0 To aFiles.Length - 1 Try Dim sNewPath As String = IO.Path.Combine(Destination, _ aFiles(Index).Substring(Source.Length).TrimStart("\")) ' Forsøk å kopiere filen IO.Directory.CreateDirectory(IO.Path.GetDirectoryName(sNewPath)) IO.File.Copy(aFiles(Index), sNewPath, True) ' Informer om progresjonen If Callback IsNot Nothing Then Callback(aFiles(Index), Index / aFiles.Length) End If Catch ex As Exception ' Du bør selv bestemme hvordan du vil reagere på feil Callback("Error: " & ex.ToString, (Index + 1) / aFiles.Length) End Try Next End Sub End Class Deretter kan funksjonen kalles ifra alle former med navnet Files.Copy: Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Files.Copy("D:\Temp\A", "D:\Temp\B", True, , AddressOf ProgressUpdater) End Sub Public Sub ProgressUpdater(ByVal File As String, ByVal Precentage As Double) ' Oppdaterer merknadsboks (viser kun selve filnavnet) Me.Text = String.Format("Copying file {0}.", IO.Path.GetFileName(File)) ' Lar hendelser kjøres (slik at teksten oppdateres) Application.DoEvents() End Sub End Class
Spartakus Skrevet 13. juli 2007 Skrevet 13. juli 2007 ...Og enda en ting som jeg tror er ganske enkelt å løse: Når den kopierer, viser den hele banen til fila som blir kopiert. Hvordan kan jeg kutte litt ned på denne, slik at den bare viser litt av banen? ToolStripStatusLabel1.Text = String.Format("Copying file {0}.", File) Er veldig hyggelig at dere hjelper meg! 9068552[/snapback] Sjekk String.Substring()
GeirGrusom Skrevet 14. juli 2007 Skrevet 14. juli 2007 Å kutte ned er egentlig litt komplisert, fordi du må kutte bort deler av banen som kanskje ikke er så viktig, man er kanskje uansett interresert i å vite hvilken fil det er, men ikke nødvendigvis hele filbanen. Mange programmer bytter ut flere mapper i filnavnet med "..." men beholder disk bokstaven og filnavnet.
AnaXyd Skrevet 14. juli 2007 Forfatter Skrevet 14. juli 2007 @Geir: Ja, det har jeg lagt merke til også! Er det veldig komplisert å få til noe slik altså? @aadnk: Takk for svar!
ze5400 Skrevet 14. juli 2007 Skrevet 14. juli 2007 (endret) Er nok ikke veldig vansklig å få til nei. Ingen ta å si hvordan, la han tenke selv. Please Først definerer vi ett sett med regler. La oss ta ett fiktivt filnavn med bane. C:\Programmer\Lol\Lol.exe Banen starter med stasjonsbokstav:\ Deretter kommer noe uvesentlig (som skal erstattes med ...) fulgt av \ En gang til. Deretter kommer filnavn fulgt av . filendelse. Bruk de reglene til å lage filteret. Er ganske enkelt med noen looper av en eller annen form. Detta ble ganske dårlig forklart, men jeg er trøtt nå, så bær over med meg. Endret 14. juli 2007 av ze5400
AnaXyd Skrevet 14. juli 2007 Forfatter Skrevet 14. juli 2007 Oj! Hehe utfordrer dere meg? Jeg skal prøve litt.. Give me some time..
Degeim Skrevet 14. juli 2007 Skrevet 14. juli 2007 Nå gjør dere det unødvendig komplisert:) Aadnk har jo allerede fikset dette: Me.Text = String.Format("Copying file {0}.", IO.Path.GetFileName(File)) Der viser bare filnavnet. IO.Path.GetPathRoot(File) & "...\" & IO.Path.GetFileName(File) Dette viser feks "C:\...\Fil.exe". Ta heller en kikk på IO.Path-namespacet, du;)
AnaXyd Skrevet 14. juli 2007 Forfatter Skrevet 14. juli 2007 (endret) Ah, en smule enklere! Jeg prøvde meg på denne String.Split, men vanskelig å finne ut noe om den når IDE'n min ikke sier noe om den engang. Men jeg tviler på at jeg hadde fått den til uansett... EDIT: Oj! Fungerer perfecto også! Nydelig! Nå må jeg bare sette meg ned og se om jeg forstår hva den koden egentlig gjør... IO.Path.GetPathRoot(File) & "...\" & IO.Path.GetFileName(File) Hvordan kan egentlig denne kutte ned på filbanen da? Jeg skjønner ikke helt det. Hvorfor blir det ikke bare "hele filbanen + "...\" + "filnavn"? Endret 14. juli 2007 av AnaXyd
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå