none
button process ziel zur laufzeit bestimmen und abspeichern RRS feed

  • Frage

  • Hallo.

    Und zwar habe ich vor eine einfache form mit 2 Butons zu erstellen. Ist ja soweit kein Problem. Wie ich zb ein Programm oder so per Button öffne ist nicht das Problem.

    Jetzt will ich jedoch nicht fest im Code integrieren welches Programm ich ausführen will, sondern dies zur Laufzeit bestimmen und dies dann auch speichern, so das beim nächsten ausführen des Programms diese Programme beim klick der buttons ausgeführt werden.

    Könnt ihr mir vielleicht helfen bzw Tips geben wie ich das am besten umsetzten kann.

    Bin in C# doch noch ein blutiger Anfänger und stoß bei sowas an meine Grenzen. Das Ziel zur Laufzeit zu bestimmen sowie das Abspeichern stellt mich vor ein Problem, da ich nicht weiss wie ich das anstellen soll.

    Evtl kann man ja einen weiteren Button einfügen der dann einen dialog öffnet welches nach einem kennwort frägt und dann die, ich nenn es mal "umprogrammierung" der Buttons zulässt.

    Sorry für die vielen Fragen, aber ich wurde bei der Arbeit von einem Kollegen gefragt ob ich ihm vielleicht sowas basteln kann. Und da ich erst alles versuchen will, das zu Lösen, bevor ich sag das ich das nich hinbekomm, dachte ich mir das ich hier mal Frage.

    Schon wieder viel zu viel geschrieben, aber ich hoffe ihr versteht was ich meine und könnt mir helfen.

     

    Mein nächster Step, sofern ich das alles mal geschafft und verstanden hab ist, zur Laufzeit weitere Buttons hinzuzufügen und position, name usw ebenfalls abzuspeichern. Aber das is noch reine zukunftsmusik.

     

    Danke schon mal im Vorraus. Michi

    • Bearbeitet humility86 Dienstag, 6. Dezember 2011 21:38
    Dienstag, 6. Dezember 2011 21:35

Alle Antworten

  • den Text kannst du mittels
       button.Text = "Neuer Text";
    ändern, bzw. mit
       string text = button.Text;
    auslesen

    Pfade(also Texte) speichern geht mit
       System.IO.File.WriteAllText("Pfad", "Inhalt");

    Auslesen einer Datei geht mit
       string content = System.IO.File.ReadAllText("Pfad");

    Ein weiteren Dialog kannst du mittels einer neuen Form machen.


    Koopakiller - http://koopakiller.ko.ohost.de/
    Mittwoch, 7. Dezember 2011 16:53
  • Öhm, ok, aber das war nicht unbedingt das was ich wissen wollte.

    Ok, es wäre natürlich auch gut den namen des Buttons zur Laufzeit zu bestimmen aber das Hauptaugenmerk leigt wo anders, und zwar geht es mir darum, das ich zur Laufzeit des tools das Ziel des buttons bestimmen kann und das tool dies beibehält, so das ich nicht bei jedem neuen Ausführen des Tools das Ziel wieder neu bestimmen muss.


    Mittwoch, 7. Dezember 2011 17:55
  • Hallo,

    dann schreibe die ermittelten Informationen in die Anwendungs-Einstellungen.
    Wenn Du dafür eine Benutzer-Einstellung verwendest, kann jeder seine eigenes "Ziel" bestimmen.

    Gruß Elmar

    Mittwoch, 7. Dezember 2011 18:10
    Beantworter
  • Hi!

    Ich hab mal sowas programmiert!

    Zur Info:

    Button1 ist zum ausführen des ersten Programms.

    Button2 ist zum ausführen des zweiten Programms.

    Button3 ist zum ändern des Programms, das bei Button1 ausgeführt wird.

    Button4 ist zum ändern des Programms, das bei Button2 ausgeführt wird.

    Die Datei pfad1.dat ist zum speichern für den Pfad des ersten Programms.

    Die Datei pfad2.dat ist zum speichern für den Pfad des zweiten Programms.

     

    Der Code:

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            string pfad1 = "";
            string pfad2 = "";

            private void button3_Click(object sender, EventArgs e)
            {
                OpenFileDialog fd = new OpenFileDialog();

                fd.Title = "Bitte Datei wählen!";
                fd.Filter = "Alle Dateien|*.*";
                fd.ShowDialog();
                pfad1 = fd.FileName;
                CheckPath();
                SavePath();

            }
            private void button4_Click(object sender, EventArgs e)
            {
                OpenFileDialog fd = new OpenFileDialog();

                fd.Title = "Bitte Datei wählen!";
                fd.Filter = "Alle Dateien|*.*";
                fd.ShowDialog();
                pfad2 = fd.FileName;
                CheckPath();
                SavePath();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                //erster pfad
                if (System.IO.File.Exists("pfad1.dat"))
                    pfad1 = System.IO.File.ReadAllText("pfad1.dat");
                else
                    System.IO.File.Create("pfad1.dat");

                //zweiter pfad
                if (System.IO.File.Exists("pfad2.dat"))
                    pfad2 = System.IO.File.ReadAllText("pfad2.dat");
                else
                    System.IO.File.Create("pfad2.dat");
          
                CheckPath();
            }

            //Wenn noch keine Datei gewählt ist werden die Buttons deaktiviert
            private void CheckPath()
            {
                button1.Enabled = true;
                button1.Text = pfad1;
             
                button2.Enabled = true;
                button2.Text = pfad2;

                if (pfad1 == "")
                {
                    button1.Enabled = false;
                    button1.Text = "Noch nicht gewählt!";
                }

                if (pfad2 == "")
                {
                    button2.Enabled = false;
                    button2.Text = "Noch nicht gewählt!";
                }
          
            }
          
            //Pfade speichern
            private void SavePath()
            {
                try
                {
                    System.IO.File.WriteAllText("pfad1.dat", pfad1);
                    System.IO.File.WriteAllText("pfad2.dat", pfad2);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message,"Fehler!");
                }
            }
         
            private void button1_Click(object sender, EventArgs e)
            {
                try
                {
                    System.Diagnostics.Process.Start(pfad1);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message,"Fehler!"); 
                }
            }

            private void button2_Click(object sender, EventArgs e)
            {
                try
                {
                    System.Diagnostics.Process.Start(pfad2);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Fehler!");
                }
            }
        }
    }

     

    Ich hoffe es hilft dir!


    majoba-it
    Mittwoch, 7. Dezember 2011 19:22
  • @ Elmar Boye: Das klingt ganz gut. Nur hab ich mal versucht rauszubekommen wie ich da in dem sinne den Pfad des Buttons speichern kann, hab nur gefunden wie ich farbe oder so bestimmen kann, aber das will nicht wirklich so klappen.

     

    @Majoba it: Danke für deinen Code. Als Grundgerüst erst mal echt super.

    Echt super das hier einem so gut geholfen wird.

    Klar muss ich mich auch einfach mal richtig in C# reinarbeiten aber tu mir halt meist leichter Sachen zu verstehen wenn ich mal Beispiele hab wie es funktionieren könnte.

    Mittwoch, 7. Dezember 2011 21:36
  • Hallo,

    Du speicherst nicht den Button, sondern den Pfad zu dem auszuführenden Programm,
    also den Inhalt einer Variablen,  im Beispiel von majoba-it z. B. pfad1 und pfad2

    Die Einstellungen kannst Du in den Projekt-Eigenschaften unter Einstellungen vornehmen.

    Ein Artikel, der das weiter erläutert: C# Settings.settings in Visual Studio

    Gruß Elmar

     

    Mittwoch, 7. Dezember 2011 22:02
    Beantworter
  • Super Sache. Funktioniert soweit ganz gut. Dann werd ich mich mal weiter damit beschäftigen :)

    Danke an alle.

    Donnerstag, 8. Dezember 2011 21:23
  • Jetzt hab ich doch noch eine Frage.

    Wie kann ich abfragen ob mein String in Settings gefüllt ist.

    Wenn ich meinen Button klicke, ohne vorher das Ziel bestimmt zu haben, kommt der Fehler das mein Prozess kein Ziel hat. Sprich ich muss zuerst das Ziel bestimmen und dann geht alles.

    Um das Abzufangen muss ich ja irgendwie abfragen od der String mit dem Ziel gefüllt ist.

     

    Hat da jemand vielleicht eine Idee?

     

    Donnerstag, 8. Dezember 2011 22:39
  • Hallo,

    abfragen kannst Du das z. B. mit String.IsNullOrEmpty:

       if (String.IsNullOrEmpty(Properties.Settings.Default.Pfad1))
       {
            // Schaltfläche deaktivieren
            this.button1.Enabled = false;
       }
    
    

    was dann die Schaltfläche deaktiviert, wenn dort nichts hinterlegt wurde.

    Wenn es sich um eine Datei handelt, könntest Du zudem mit File.Exists prüfen,
    ob die Datei noch vorhanden ist.

    Gruß Elmar

    Freitag, 9. Dezember 2011 20:39
    Beantworter
  • Danke nochmal an alle für de Hilfe.

    Jetzt bin ich schon mal um einiges schlauer.

     

     

    Freitag, 9. Dezember 2011 21:41