Hilfe bei meinem ersten Projekt

Ich weiß nicht, was du in deiner Log-Datei speichern willst, aber an deiner Stelle würde ich mit der Trace-Klasse arbeiten. Was passiert nämlich, wenn dein Programm abstürzt, wenn ein Fehler auftritt, sodass die Datei am Schluss nicht mehr geschrieben werden kann?
Außerdem kann die Technik mit dem Verknüpfen von zwei Strings mit "&" sehr langsam sein. Vielleicht solltest du besser einen System.Text.StringBuilder nehmen.

Dann hätte ich am Schluss noch ein paar kleine Tipps:

If liste = ("") Then
Was passiert, wenn der String "Nothing" ist? Und wozu die Klammern?
If String.IsNullOrEmpty(liste) Then

ControlChars.CrLf
einfacher zu verstehen:

Vor dem Schließen des StreamWriters schadet auch nie ein "Flush", weil so u. U. Daten einfach nicht geschrieben werden.

Ich glaub, das wars erstmal. :)
 
Hallo liebe Community,

ich bin es schon wieder. Ich möchte das Wochenende nutzen, um ein wenig weiter zu programmieren.

Ich mein Projekt nun erweitert. Ich habe zwei Timer eingebaut. Somit kann ich jetzt über die Numeric Schaltfläche bestimmen, nach wievielen Stunden und Minuten die *.exe beendet wird. Ich poste einfach einmal meine Prozeduren und hoffe, dass ihr mir sagen könnt, ob man die Codezeilen irgendwie optimieren kann oder ob es so ein langer Code sein muss.

Visual Basic:
Public Class Form1
    Dim anwendung As New System.Diagnostics.Process()
    Dim hCount As Integer
    Dim mCount As Integer
    Dim pBar As Integer
    Dim ofd As New OpenFileDialog

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ofd.InitialDirectory = "C:\"
        ofd.Filter = "exe (*.exe)|*.exe"
        ofd.Title = "Wählen Sie eine EXE zum Starten und Beenden aus"
        If ofd.ShowDialog() = _
        Windows.Forms.DialogResult.OK Then
            MsgBox("Es wird geöffnet: " & ofd.FileName)
        Else
            MsgBox("Abbruch")
        End If
        anwendung.StartInfo.FileName = ofd.FileName
        anwendung.Start()
        Label2.Text = hCount & " Stunden"
        Label3.Text = mCount & " Minuten"
        Timer1.Start()
        Timer2.Start()
        pBar = 100
        ProgressBar1.Value = ProgressBar1.Maximum

    End Sub

    Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDown1.ValueChanged
        hCount = NumericUpDown1.Value
    End Sub

    Private Sub NumericUpDown2_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDown2.ValueChanged
        mCount = NumericUpDown2.Value
    End Sub

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        pBar = pBar - 10
        mCount = mCount - 1
        Label3.Text = mCount & " Minuten"
        ProgressBar1.Value = pBar
        If mCount = 0 Then
            Label3.Text = "0 Minuten"
        End If
        If hCount = 0 And mCount = 0 Then
            Timer2.Stop()
            anwendung.Kill()
            ProgressBar1.Value = ProgressBar1.Minimum
        End If
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        hCount = hCount - 1
        Label2.Text = hCount & (" Stunden")
        If hCount = 0 Then
            Timer1.Stop()
        End If
    End Sub

    Private Sub ProgressBar1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProgressBar1.Click

    End Sub
End Class

Ich möchte es auf insgesamt drei *.exen gleichzeitig ausprägen. Also ich kann drei Anwendungen starten lassen und sie werden je nachdem, welche Zeit ich für die einzelne angegeben habe geschlossen. Kann ich da einfach den Code kopieren und neue Variablen erstellen, oder wie gehe ich da am besten vor ?

Ein weiteres Problem ist das unendlich, also wenn ich keine Stunden oder Minuten angebe, soll die Anwendung solange laufen, bis ich mein Programm schließe.

Ich hoffe ihr helft mir wieder einmal so schön wie neulich. Vielen lieben Dank im Voraus.
 
Ich versteh nicht ganz was du genau willst. Etwas genauer bitte.
Willst du das mit der Log nicht mehr benutzen? Sehe ich nicht in deinem Code.

Peter86
 
Visual Basic:
        If ofd.ShowDialog() = _
        Windows.Forms.DialogResult.OK Then
            MsgBox("Es wird geöffnet: " & ofd.FileName)
        Else
            MsgBox("Abbruch")
        End If
        anwendung.StartInfo.FileName = ofd.FileName
Wenn vom OpenFialDialog kein OK zurück kommt würde ich den Methode beenden.
In deinem Fall kommt zwar die Abbruch Meldung aber es wird dann dennoch versucht ein Prozess zu starten.
Code:
        If ofd.ShowDialog() = _
        Windows.Forms.DialogResult.OK Then
            MsgBox("Es wird geöffnet: " & ofd.FileName)
        Else
            MsgBox("Abbruch")
            Return 'Methode verlassen
        End If
        anwendung.StartInfo.FileName = ofd.FileName

Ich möchte es auf insgesamt drei *.exen gleichzeitig ausprägen. Also ich kann drei Anwendungen starten lassen und sie werden je nachdem, welche Zeit ich für die einzelne angegeben habe geschlossen. Kann ich da einfach den Code kopieren und neue Variablen erstellen, oder wie gehe ich da am besten vor ?
Du könntest jetzt entweder das was du bereits hast in ein UserControl auslagern
oder dir eine Klassenbeschreibung für deine Programme anlegen.

Sprich:
Code:
Class MeinProgramm

    Public Sub New()
    End Sub
    
    Public Sub New(ByVal fileName As String)
        Me.m_fileName = fileName
    End Sub

    Public Property FileName() As Integer
        Get
            Return m_fileName
        End Get
        Set
            m_hCount = m_fileName
        End Set
    End Property
    
    Public Property HCount() As Integer
        Get
            Return m_hCount
        End Get
        Set
            m_hCount = value
        End Set
    End Property
    
    Public Property MCount() As Integer
        Get
            Return m_mCount
        End Get
        Set
            m_mCount = value
        End Set
    End Property
    
    Public Property PBar() As Integer
        Get
            Return m_pBar
        End Get
        Set
            m_hCount = m_pBar
        End Set
    End Property
    
    Private m_fileName As String
    Private m_hCount As Integer
    Private m_mCount As Integer
    Private m_pBar As Integer
End Class
Dazu kannst du dir nun eine Liste der Objekte/Programme anlegen
Code:
Dim meineListe As New List(Of MeinProgramm)()
...
meineListe.Add(New MeinProgramm("programmA.exe"))
meineListe.Add(New MeinProgramm("programmB.exe"))
...
anwendung.StartInfo.FileName = meineListe(0).FileName

Hoffe ist verständlich wie ichs mein.
 
Hallo Spyke und Peter,

erst einmal vielen Dank für eure Antworten. Doch leider muss ich gestehen, dass ich mit dem Code und der Vorgehensweise von Spyke etwas Überfordert bin. Du hast mir den Code geschrieben, aber wo gehört er genau hin (einfach am Ende drunter setzen ?) Auch die Liste der Objekte/Programme wirft Fragen auf.

Ich zeige einmal meine Vorstellung bebildert auf, ich hoffe, dass schafft Klarheit.

Hier mein zuvor erstelltes Layout

Momentaner Status

Wie man anhand meines aktuellen Statuses sehen kann, habe ich quasi ein "Block" fertig. Dieser funktioniert auch weitesgehend. Wenn ich, wie es dem Layout zu entnehmen ist, den ganzen "Block" dreimal haben möchte, um drei verschiedene Programme öffnen zu lassen und individuell, je nach eingegebner Zeit schließen lassen möchte, frage ich mich, wie ich da am besten vorgehen sollte. Der Code ist ja weitesgehend für die erste "Steuerung" fertig.

Ich hoffe, dass ihr mir weiterhin so super helft. Eine genauere Erklärung wäre wünschenswert, denn leider habe ich noch nicht viele Kenntnisse in Sachen Programmieren.
 
Wie man anhand meines aktuellen Statuses sehen kann, habe ich quasi ein "Block" fertig. Dieser funktioniert auch weitesgehend. Wenn ich, wie es dem Layout zu entnehmen ist, den ganzen "Block" dreimal haben möchte, um drei verschiedene Programme öffnen zu lassen und individuell, je nach eingegebner Zeit schließen lassen möchte, frage ich mich, wie ich da am besten vorgehen sollte. Der Code ist ja weitesgehend für die erste "Steuerung" fertig.
OK dann erstmal die einfachere Methode
(muss geschehen ist schon spät und hab keine Lust auf große Erklärungen :rolleyes: )

Den Block den du jetzt hast lagerst du einfach in ein UserControl aus.
Sprich im SolutionExplorer -> Rechte Maus -> Neues Item -> UserControl (so oder so änhlich)

Alles was du bisher im Formular hast machst du jetzt im UserControl.
(Halt alles was du draus benötigst ;) )

Nachdem du das Projekt nun einmal kompiliert hast müsste in der Toolbox (meist ganz oben) dein neues Control auftauchen.
Dieses ziehst du nun 3 Mal (oder öfters auf dein Formular)

Hoffe war verständlich.
 
Hallo lieber Spyke,

zuerst einmal möchte ich mich entschuldigen, dass ich erst jetzt antworte. In den vergangenen Wochen hatte ich leider wenig Zeit, deshalb melde ich mich jetzt erst wieder. Entschuldigung, aber besser spät als nie :rolleyes: . Ich habe deinen Ansatz ausprobiert, aber nicht hinbekommen. Zurzeit habe ich es anders gelöst:

Ich habe einfach eine Menüleiste erstellt und den Code einfach kopiert, funktioniert wunderbar :).

Selbstverständlich hole ich eine positive Bewertung für dich nach, da du mir sehr geholfen hast. An dieser Stelle möchte ich mich auch noch einmal bei Peter86 bedanken. Da ich jetzt wieder etwas mehr Zeit haben, werde ich mich wieder dem programmieren widmen (neues "Projekt") :)
 

Neue Beiträge

Zurück