我正在处理以下代码:
private Label textLabel;
public void ShowDialog()
{
Form prompt = new Form();
prompt.Width = 500;
prompt.Height = 150;
prompt.Text = caption;
textLabel = new Label() { Left = 50, Top=20, Text="txt"};
TextBox textBox = new TextBox() { Left = 50, Top=50, Width=400 };
Button confirmation = new Button() { Text = "Ok", Left=350, Width=100, Top=70 };
confirmation.Click += (sender, e) => { prompt.Close(); };
prompt.Controls.Add(confirmation);
prompt.Controls.Add(textLabel);
prompt.Controls.Add(textBox);
prompt.ShowDialog();
}
我正在使用另一种方法调用上述方法并尝试更新循环内的textLabel
字段
public void doIt()
{
ShowDialog();
for(int i=0;i<10;i++)
{
textLabel.TEXT = ""+i;
Threading.Thread.Sleep(1000);
}
}
这就是我们用Java做的方式,但在C#中,我无法以这种方式更新标签文本。这里有什么问题,为什么我不能更新文本?
答案 0 :(得分:4)
所以这就是我要做的,它不是一个完整的解决方案,但我希望它会指出你正确的方向:
制作将从表格派生的Prompt
课程。添加控件(我手动完成但您可以使用设计器)。添加将在每秒触发的Timer
,这将更改标签的文本。当计数器击中10时停止计时器。
public partial class Prompt : Form
{
Timer timer;
Label textLabel;
TextBox textBox;
Button confirmation;
int count = 0;
public Prompt()
{
InitializeComponent();
this.Load += Prompt_Load;
this.Width = 500;
this.Height = 150;
textLabel = new Label() { Left = 50, Top = 20, Text = "txt" };
textBox = new TextBox() { Left = 50, Top = 50, Width = 400 };
confirmation = new Button() { Text = "Ok", Left = 350, Width = 100, Top = 70 };
this.Controls.Add(confirmation);
this.Controls.Add(textLabel);
this.Controls.Add(textBox);
timer = new Timer();
timer.Interval = 1000;
timer.Tick += timer_Tick;
}
void Prompt_Load(object sender, EventArgs e)
{
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
this.textLabel.Text = " " + count.ToString();
count++;
if (count == 10)
timer.Stop();
}
}
在doIt
方法中,创建Prompt
表单的实例,设置其标题并调用其ShowDialog()
方法。
public void doIt()
{
Prompt p = new Prompt();
p.Text = caption;
p.ShowDialog();
}