我有一个包含TableLayoutPanel的表单,其中包含1行和2列。
第1列包含一个包含图片框的面板。 第2列是一个文本框。
我想显示表单,然后一次将一个字符添加到文本框中。除了在文本框填写完成之前不显示图片框图像外,一切都很完美。
class Program
{
static void Main(string[] args)
{
MainForm mainForm = new MainForm();
FormShown Shown = new FormShown(mainForm);
mainForm.Shown += new EventHandler(Shown.mainForm_Shown);
mainForm.ShowDialog();
}
}
class FormShown
{
MainForm mainForm;
public FormShown(MainForm aMainForm)
{
mainForm = aMainForm;
}
public void f1_Shown(object sender, EventArgs e)
{
mainForm.AddText("hello!");
}
}
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
PictureBox.Image = MyApp.Properties.Resources.MyImage;
}
public void AddText(string text)
{
foreach (char c in text)
{
TextBox.Text += c;
TextBox.Refresh();
System.Threading.Thread.Sleep(100);
TextBox.SelectionStart = TextBox.Text.Length;
}
}
}
我希望从资源中设置代码中的图像会足够快,我希望通过Form.Shown事件加载图片框 - 我认为这是错误的吗?
我尝试在设计视图中设置图像而不是代码,但结果相同。
我应该使用不同的活动吗?我相信Shown是最后一个被称为。
谢谢!
答案 0 :(得分:1)
如果您了解Windows窗体事件生命周期,那么您可以轻松了解您正在获得的问题。基本上,在绘制表单时将绘制图像和其他控件,并在结束时引发Paint事件。因此,这意味着在所有流程都没有完成之前,应用程序不会绘制任何控件或图形。
您应该在不同的过程中调用AddText()
方法。