Form.Shown调用未显示PictureBox图像

时间:2014-08-17 21:00:38

标签: c# .net winforms picturebox

我有一个包含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是最后一个被称为。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您了解Windows窗体事件生命周期,那么您可以轻松了解您正在获得的问题。基本上,在绘制表单时将绘制图像和其他控件,并在结束时引发Paint事件。因此,这意味着在所有流程都没有完成之前,应用程序不会绘制任何控件或图形。

您应该在不同的过程中调用AddText()方法。