moin
programmiermaessig bin ich zwar kein totaler noob, aber ich HASSE gui programmierung. hab ich das letzte mal vor 10 jahren in der schule gemacht und da schon schlecht. ich versuche grad ein programm zu schreiben dass mir aus einer rennsimulation gewisse werte ausliest und ausgibt. mit einer c# command line anwendung hatte ich das innerhalb von ner stunde fertig. der gab mir schoen throttle, gear und rpm aus. nun versuche ich das in einem C# gui programm wiedergeben zu lassen UND BEISSE DABEI IN MEIN KEYBOARD. warum zum teufel kann ich auf ein label nicht von ueberall aus zugreifen? ich will verdammt noch mal doch nur den text aendern
zur vereinfachung wollt ich mal ein einfaches gui programm schreiben. in der main soll er in einer for schleife bis 10 zaehlen, jeweils 1 sec warten und den aktuellen wert von i ins label schreiben, und danach das programm beenden. ICH haette das rein logisch ja so programmiert.
ein label namens label1 hab ich (grafisch idiotensicher) ins form1 gezogen.
aber erstens laesst sich der label1.text nicht aus der main bearbeiten. zweites (wenn ich de ganze for schleife wegnehme aus der main) beendet sich das programm nicht selber.
kann mich da mal jemand grob aufklaeren? warum ist das so beschissen unlogisch?
edit: nach ein bisl nachlesen hab ichs jetzt mal hinbekommen. den ranz muss man ja threaden
ich werd euch hier im thread aber trotzdem weiternerven sobald ich wieder fragen habe
programmiermaessig bin ich zwar kein totaler noob, aber ich HASSE gui programmierung. hab ich das letzte mal vor 10 jahren in der schule gemacht und da schon schlecht. ich versuche grad ein programm zu schreiben dass mir aus einer rennsimulation gewisse werte ausliest und ausgibt. mit einer c# command line anwendung hatte ich das innerhalb von ner stunde fertig. der gab mir schoen throttle, gear und rpm aus. nun versuche ich das in einem C# gui programm wiedergeben zu lassen UND BEISSE DABEI IN MEIN KEYBOARD. warum zum teufel kann ich auf ein label nicht von ueberall aus zugreifen? ich will verdammt noch mal doch nur den text aendern
zur vereinfachung wollt ich mal ein einfaches gui programm schreiben. in der main soll er in einer for schleife bis 10 zaehlen, jeweils 1 sec warten und den aktuellen wert von i ins label schreiben, und danach das programm beenden. ICH haette das rein logisch ja so programmiert.
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace simple_count_up
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
for (int i = 0; i < 11; i++)
{
label1.Text = i;
System.Threading.Thread.Sleep(1000);
}
Application.Exit();
}
}
}
ein label namens label1 hab ich (grafisch idiotensicher) ins form1 gezogen.
aber erstens laesst sich der label1.text nicht aus der main bearbeiten. zweites (wenn ich de ganze for schleife wegnehme aus der main) beendet sich das programm nicht selber.
kann mich da mal jemand grob aufklaeren? warum ist das so beschissen unlogisch?
edit: nach ein bisl nachlesen hab ichs jetzt mal hinbekommen. den ranz muss man ja threaden
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;
using System.Threading;
namespace counter2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Thread firstThread = new Thread(new ThreadStart(counter));
firstThread.IsBackground = true;
firstThread.Start();
//counter();
}
delegate void IntParameterDelegate(int value);
public void Update_Label_Seconds(int value)
{
if (InvokeRequired)
{
BeginInvoke(new IntParameterDelegate(Update_Label_Seconds), new object[] { value });
return;
}
label1.Text = Convert.ToString(value);
}
public void counter()
{
for (int i = 0; i < 11; i++)
{
System.Threading.Thread.Sleep(200);
Update_Label_Seconds(i);
//label1.Text = Convert.ToString(i);
}
}
}
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
ich werd euch hier im thread aber trotzdem weiternerven sobald ich wieder fragen habe
Zuletzt bearbeitet: