C#: String kann nicht als Zahl verwendet werden?



  • Hallöchen,
    wenn ich versuche einen Wert (Zahl) aus einer Textbox als Wert für einen Timer verwenden will, kommt immer folgende Fehlermeldung:

    Eine implizite Konvertierung vom Typ "string" in "int" ist nicht möglich.

    string textbox2inputneu = textBox2.Text;
    
    timer1.Interval = textbox2inputneu;
    

    Wie kann man das lösen? Danke im vorraus 😃

    EDIT: Wieso wird "V O R R A U S" zensiert? 😕 😃



  • Du machst dir die Mühe, dich wegen einer Frage zu registrieren, die du hättest in einer Sekunde ergoogeln können? Du musst noch einiges lernen ^^

    z.B. mit Convert.ToInt32(string)



  • Ich habe die ergoogelten Antworten entweder nicht verstanden oder sie passten nicht 😃

    Ich bin leider noch nicht so der C#-Pro (also eher Einsteiger ^^) und eigentlich Google ich immer zuerst 🙂

    Sorry, ich versteh das nicht ganz 😞

    Wie kann ich denn den Inhalt dieser Textbox Konvertieren? Oder soll ich den string konvertieren? Sry, ich stecke gerade fest 😕

    EDIT:
    OK geht. Habe die Timer-Sachen durch

    timer1.Interval = Convert.ToInt32(textBox2.Text);
    

    ersetzt



  • Der "Inhalt" der TextBox, also die Eigenschaft Text ist vom Typ string. Den musst du in einen int konvertieren. Also im Endeffekt so:

    timer1.Interval = Convert.ToInt32(textbox2inputneu);
    


  • TheJoGie schrieb:

    EDIT: Wieso wird "V O R R A U S" zensiert? 😕 😃

    Weil es "voraus" heißt 😃

    Convert.ToInt32 ist blöd. Schau Dir int.TryParse an
    http://msdn.microsoft.com/en-us/library/f02979c7(v=vs.110).aspx



  • Upps, falsche Rechtschreibung wir hier wohl auch Zensiert ^^

    Ich würde jetzt gerne noch dem Programm
    (-LINK WEGEN USERHINWEIS ENTFERNT-)
    eine Progressbar hinzufügen, die den aktuellen Status der Auslastung anzeigt.

    Google-Ergebnisse habe ich leider nicht kapiert 😮
    Vielleicht kann mir einer helfen 🙂

    mfg



  • TheJoGie schrieb:

    Upps, falsche Rechtschreibung wir hier wohl auch Zensiert ^^

    Ich würde jetzt gerne noch dem Programm
    (https://dl.dropboxusercontent.com/u/47611022/CPU-Auslastung.exe)
    eine Progressbar hinzufügen, die den aktuellen Status der Auslastung anzeigt.

    Niemand hier ist so doof Deine Malware auszuführen.
    Falls dahinter aber keine böswillige Absicht steckt: Poste Code, keine ausführbaren Dateien.



  • Ok, kein Schadcode. Trotzdem bitte keine ausführbaren Dateien mehr verlinken.

    using System;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Drawing;
    using System.Threading;
    using System.Windows.Forms;
    namespace CPU_Auslastung
    {
    	public class Form1 : Form
    	{
    		private int inputtextbox2;
    		private PerformanceCounter CPUCounter = new PerformanceCounter();
    		private Thread CPUWatcher;
    		private IContainer components = null;
    		private Button button1;
    		private Label label1;
    		private System.Windows.Forms.Timer timer1;
    		private Button button2;
    		private TextBox textBox1;
    		private Label label2;
    		private Label label3;
    		private Label label4;
    		private TextBox textBox2;
    		private Button button3;
    		private Label label5;
    		public Form1()
    		{
    			this.InitializeComponent();
    		}
    		private void Form1_Load(object sender, EventArgs e)
    		{
    			this.CPUCounter.CategoryName = "Processor";
    			this.CPUCounter.CounterName = "% Processor Time";
    			this.CPUCounter.InstanceName = "_Total";
    		}
    		private void button1_Click(object sender, EventArgs e)
    		{
    			this.label1.Text = "LADEN...";
    			this.timer1.Start();
    			this.textBox1.Text = "Der Timer wurde erfolgreich gestartet.\r\n\r\nAktualisiere nun CPU.\r\n\r\nBITTE WARTEN!";
    			this.CPUWatcher = new Thread(new ThreadStart(this.GetCPUUsage));
    			this.CPUWatcher.Start();
    			this.button1.Enabled = false;
    			this.button2.Enabled = true;
    		}
    		private void GetCPUUsage()
    		{
    		}
    		private void timer1_Tick(object sender, EventArgs e)
    		{
    			this.CPUCounter.NextValue();
    			Thread.Sleep(1000);
    			this.textBox1.Text = "Aktuelle CPU-Auslastung wird nun angezeigt.\r\n\r\nBEENDEN:\r\n'Aktualisierung stoppen' drücken!";
    			this.label1.Text = this.CPUCounter.NextValue().ToString() + "%";
    		}
    		private void button2_Click(object sender, EventArgs e)
    		{
    			this.timer1.Stop();
    			this.textBox1.Text = "Timer gestoppt.\r\n\r\nSie können das Programm nun beenden.";
    			this.button1.Enabled = true;
    			this.button2.Enabled = false;
    		}
    		private void textBox2_TextChanged(object sender, EventArgs e)
    		{
    		}
    		private void button3_Click(object sender, EventArgs e)
    		{
    			string text = this.textBox1.Text;
    			try
    			{
    				if (Convert.ToInt32(this.textBox2.Text) < 1000)
    				{
    					MessageBox.Show("Achtung! Der von ihnen gewählte werde ist sehr klein! Dies kann zu Laggs auf Leistungsschwachen Computern führen. Stellen sie die Optionen etwas höher. Wichtig: Die eingegebene Zeit ist in Millisekunden!\nEs wird empfohlen einen höheren Wert zu benutzen (ca. 1000-3000)", "Niedriger Wert!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
    				}
    				else
    				{
    					if (Convert.ToInt32(this.textBox2.Text) > 3000)
    					{
    						MessageBox.Show("Achtung! Der von ihnen gewählte werde ist ziemlich gross! Dies kann zu langsamen und nicht aktuellen Weren führen. Stellen sie die Optionen etwas niedriger. Wichtig: Die eingegebene Zeit ist in Millisekunden!\nEs wird empfohlen einen niedrigeren Wert zu benutzen (ca. 1000-3000)", "Hoher Wert!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
    					}
    				}
    				this.timer1.Interval = Convert.ToInt32(this.textBox2.Text);
    				this.textBox1.Text = "Neue Countdown-Zeit erfolgreich bestätigt:" + this.textBox2.Text;
    			}
    			catch
    			{
    				this.textBox1.Text = "Fehler! Siehe MessageBox";
    				MessageBox.Show("Der Wert konnte nicht gelesen werden! Stellen sie sicher, dass sie keine Buchstaben eingegeben haben und der eingegebene Wert nicht '0' beträgt!\n\nEingegebener Wert:\n" + this.textBox2.Text, "Fehler!");
    			}
    		}
    		protected override void Dispose(bool disposing)
    		{
    			if (disposing && this.components != null)
    			{
    				this.components.Dispose();
    			}
    			base.Dispose(disposing);
    		}
    		private void InitializeComponent()
    		{
    			this.components = new Container();
    			this.button1 = new Button();
    			this.label1 = new Label();
    			this.timer1 = new System.Windows.Forms.Timer(this.components);
    			this.button2 = new Button();
    			this.textBox1 = new TextBox();
    			this.label2 = new Label();
    			this.label3 = new Label();
    			this.label4 = new Label();
    			this.textBox2 = new TextBox();
    			this.button3 = new Button();
    			this.label5 = new Label();
    			base.SuspendLayout();
    			this.button1.Location = new Point(3, 2);
    			this.button1.Name = "button1";
    			this.button1.Size = new Size(108, 51);
    			this.button1.TabIndex = 0;
    			this.button1.Text = "Aktualisierung starten";
    			this.button1.UseVisualStyleBackColor = true;
    			this.button1.Click += new EventHandler(this.button1_Click);
    			this.label1.Font = new Font("Arial", 14.25f, FontStyle.Regular, GraphicsUnit.Point, 0);
    			this.label1.ImageAlign = ContentAlignment.TopCenter;
    			this.label1.Location = new Point(111, 86);
    			this.label1.Name = "label1";
    			this.label1.Size = new Size(179, 47);
    			this.label1.TabIndex = 1;
    			this.label1.Text = "Bitte Aktualisierung starten!";
    			this.label1.TextAlign = ContentAlignment.TopCenter;
    			this.timer1.Interval = 1500;
    			this.timer1.Tick += new EventHandler(this.timer1_Tick);
    			this.button2.DialogResult = DialogResult.Cancel;
    			this.button2.Enabled = false;
    			this.button2.Location = new Point(263, 5);
    			this.button2.Name = "button2";
    			this.button2.Size = new Size(108, 51);
    			this.button2.TabIndex = 2;
    			this.button2.Text = "Aktualisierung stoppen";
    			this.button2.UseVisualStyleBackColor = true;
    			this.button2.Click += new EventHandler(this.button2_Click);
    			this.textBox1.BackColor = SystemColors.MenuText;
    			this.textBox1.Font = new Font("Lucida Console", 9.75f, FontStyle.Regular, GraphicsUnit.Point, 0);
    			this.textBox1.ForeColor = SystemColors.Window;
    			this.textBox1.Location = new Point(70, 155);
    			this.textBox1.Multiline = true;
    			this.textBox1.Name = "textBox1";
    			this.textBox1.ReadOnly = true;
    			this.textBox1.Size = new Size(260, 95);
    			this.textBox1.TabIndex = 3;
    			this.label2.AutoSize = true;
    			this.label2.Location = new Point(147, 139);
    			this.label2.Name = "label2";
    			this.label2.Size = new Size(86, 13);
    			this.label2.TabIndex = 4;
    			this.label2.Text = "Aktuelle Konsole";
    			this.label3.AutoSize = true;
    			this.label3.Location = new Point(108, 73);
    			this.label3.Name = "label3";
    			this.label3.Size = new Size(182, 13);
    			this.label3.TabIndex = 5;
    			this.label3.Text = "Die aktuelle CPU-Auslastung beträgt:";
    			this.label4.AutoSize = true;
    			this.label4.Location = new Point(129, 2);
    			this.label4.Name = "label4";
    			this.label4.Size = new Size(101, 13);
    			this.label4.TabIndex = 6;
    			this.label4.Text = "Aktualisierung alle...";
    			this.textBox2.Location = new Point(133, 18);
    			this.textBox2.MaxLength = 10;
    			this.textBox2.Name = "textBox2";
    			this.textBox2.Size = new Size(54, 20);
    			this.textBox2.TabIndex = 7;
    			this.textBox2.TextChanged += new EventHandler(this.textBox2_TextChanged);
    			this.button3.Location = new Point(136, 44);
    			this.button3.Name = "button3";
    			this.button3.Size = new Size(94, 22);
    			this.button3.TabIndex = 8;
    			this.button3.Text = "Bestätigen";
    			this.button3.UseVisualStyleBackColor = true;
    			this.button3.Click += new EventHandler(this.button3_Click);
    			this.label5.AutoSize = true;
    			this.label5.Location = new Point(193, 21);
    			this.label5.Name = "label5";
    			this.label5.Size = new Size(71, 13);
    			this.label5.TabIndex = 9;
    			this.label5.Text = "Millisekunden";
    			base.AutoScaleDimensions = new SizeF(6f, 13f);
    			base.AutoScaleMode = AutoScaleMode.Font;
    			base.CancelButton = this.button2;
    			base.ClientSize = new Size(380, 262);
    			base.Controls.Add(this.label5);
    			base.Controls.Add(this.button3);
    			base.Controls.Add(this.textBox2);
    			base.Controls.Add(this.label4);
    			base.Controls.Add(this.label3);
    			base.Controls.Add(this.label2);
    			base.Controls.Add(this.textBox1);
    			base.Controls.Add(this.button2);
    			base.Controls.Add(this.label1);
    			base.Controls.Add(this.button1);
    			base.MaximizeBox = false;
    			base.MinimizeBox = false;
    			base.Name = "Form1";
    			this.Text = "RAM-Verbrauch";
    			base.Load += new EventHandler(this.Form1_Load);
    			base.ResumeLayout(false);
    			base.PerformLayout();
    		}
    	}
    }
    


  • Wo ist jetzt genau das Problem das Value-Property der Progressbar zu setzen?



  • Ist es noch .NET 1.x oder wieso ist Form1 keine partielle Klasse?



  • Mechanics schrieb:

    Ist es noch .NET 1.x oder wieso ist Form1 keine partielle Klasse?

    Der Code ist mit ILSpy aus der exe rekonstruiert.



  • Sorry nochmal, ich wollte keinen erschrecken (und erst recht nichts schlimmes verlinken) Link habe ich entfernt

    Der (originale) Code lautet:

    using System;
    using System.Diagnostics;
    using System.Threading;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace CPU_Auslastung
    {
        public partial class Form1 : Form
        {
            int inputtextbox2;
            public Form1()
            {
                InitializeComponent();
            }
            PerformanceCounter CPUCounter = new PerformanceCounter(); 
            // Instanz der Klasse PerformanceCounter
            Thread CPUWatcher; 
            // Thread zum Abfragen der CPU - Auslastung
    
            private void Form1_Load(object sender, EventArgs e)
            {
                // CPUCounter mit beschriebenen Werten initialisieren
                CPUCounter.CategoryName = "Processor";
                CPUCounter.CounterName = "% Processor Time";
                CPUCounter.InstanceName = "_Total";
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                label1.Text = "LADEN...";
                timer1.Start();
                textBox1.Text = "Der Timer wurde erfolgreich gestartet.\r\n\r\nAktualisiere nun CPU.\r\n\r\nBITTE WARTEN!";
                // hierfür wird der Thread CPUWatchner (neu) initialisiert und gestartet
                CPUWatcher = new Thread(new ThreadStart(GetCPUUsage));
                CPUWatcher.Start();
                button1.Enabled = false;
                button2.Enabled = true;
            }
                // im Thread CPUWatcher wird diese Funtkion gestartet
            private void GetCPUUsage()
            {
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                // die Funktion ruft NextValue() 2 mal mit einem Abstand von jeweils 1 Sekunde auf,
                // das Ergebnis wird per MessageBox angezeigt
                CPUCounter.NextValue();
                System.Threading.Thread.Sleep(1000);
                textBox1.Text = "Aktuelle CPU-Auslastung wird nun angezeigt.\r\n\r\nBEENDEN:\r\n'Aktualisierung stoppen' drücken!";
                label1.Text = CPUCounter.NextValue().ToString() + "%";
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                timer1.Stop();
                textBox1.Text = "Timer gestoppt.\r\n\r\nSie können das Programm nun beenden.";
                button1.Enabled = true;
                button2.Enabled = false;
            }
    
            private void textBox2_TextChanged(object sender, EventArgs e)
            {
    
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
                string textbox2inputneu = textBox1.Text;
                try
                {
                    if (Convert.ToInt32(textBox2.Text) < 1000)
                    {
                        MessageBox.Show("Achtung! Der von ihnen gewählte werde ist sehr klein! Dies kann zu Laggs auf Leistungsschwachen Computern führen. Stellen sie die Optionen etwas höher. Wichtig: Die eingegebene Zeit ist in Millisekunden!\nEs wird empfohlen einen höheren Wert zu benutzen (ca. 1000-3000)", "Niedriger Wert!",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Warning,
                        MessageBoxDefaultButton.Button1);
                    }
    
                    else if (Convert.ToInt32(textBox2.Text) > 3000)
                    {
                        MessageBox.Show("Achtung! Der von ihnen gewählte werde ist ziemlich gross! Dies kann zu langsamen und nicht aktuellen Weren führen. Stellen sie die Optionen etwas niedriger. Wichtig: Die eingegebene Zeit ist in Millisekunden!\nEs wird empfohlen einen niedrigeren Wert zu benutzen (ca. 1000-3000)", "Hoher Wert!",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Warning,
                        MessageBoxDefaultButton.Button1);
                    }
                    timer1.Interval = Convert.ToInt32(textBox2.Text);
                    textBox1.Text = "Neue Countdown-Zeit erfolgreich bestätigt:" + textBox2.Text;
                }
                catch
                {
                    textBox1.Text = "Fehler! Siehe MessageBox";
                    MessageBox.Show("Der Wert konnte nicht gelesen werden! Stellen sie sicher, dass sie keine Buchstaben eingegeben haben und der eingegebene Wert nicht '0' beträgt!\n\nEingegebener Wert:\n" + textBox2.Text, "Fehler!");
                }
            }
        }
    }
    
    Nochmal zur Fragestellung: Mit Progressbars kenne ich mich gar nicht aus.. :/ (mit C# auch noch nicht so wirklich  :D )
    Hoffe nochmal auf ne Antwort
    


  • TheJoGie schrieb:

    "Achtung! Der von ihnen gewählte werde ist sehr klein! Dies kann zu Laggs auf Leistungsschwachen Computern führen. Stellen sie die Optionen etwas höher. Wichtig: Die eingegebene Zeit ist in Millisekunden!\nEs wird empfohlen einen höheren Wert zu benutzen (ca. 1000-3000)"

    OMG, so viele Fehler in einem Satz.

    Ich sehe bei dir keine Progressbar. Du musst also erst eine hinzufügen. Buttons usw. hast du ja schon hinzugefügt, die Progressbar findest du da auch irgendwo in der Toolbar. Dann kannst du vielleicht noch paar Eigenschaften von der Progressbar konfigurieren, z.B. den maximalen Wert. Im Code sagst du dann

    myProgressbar.value = Convert.ToInt32(textBox2.Text);
    

    Oder wie auch immer. Wichtig ist, dass du lernst Code zu verstehen und anzupassen, nicht die konkreten Eigenschaften und Methoden.



  • Hallo,

    der Text in den MessageBoxen war auch eher ohne viel Nachdenken "hingeschmiert", soll ja eig. nur ein Beispiel sein...

    Zu deinem Beispiel

    myProgressbar.value = Convert.ToInt32(textBox2.Text);
    

    Das zeigt ja die eingegebene Zeit in einer Progressbar an. Ich würde aber gerne die aktuelle CPU-Auslastung (die ja im label1 angegeben wird) in eine Progressbar bekommen.
    Ich habe

    progressbar1.value = Convert.ToInt32(label1.Text);
    

    versucht, das konnte C# aber (wegen falschem Format) nicht als Value für die Progressbar setzen 😕



  • TheJoGie schrieb:

    Das zeigt ja die eingegebene Zeit in einer Progressbar an. Ich würde aber gerne die aktuelle CPU-Auslastung (die ja im label1 angegeben wird)

    Ich weiß ja nicht, wo bei dir was steht, ist mir ja auch egal 😉 Aber du hast es ja zumindest geschafft, die Idee soweit anzupassen.
    Sollte jetzt doch eigentlich ganz einfach sein, das noch richtig hinzubekommen? Wo kommt der Wert in deinem Label1 her? Schau dir den Code mal an. Hast du an der Stelle nicht auch den Wert als Zahl und könntest du ihn nicht gleich der Progressbar zuweisen?


Log in to reply