【问题标题】:PictureBox image not displayed by Form.Shown callForm.Shown 调用未显示 PictureBox 图像
【发布时间】:2014-08-18 11:50:36
【问题描述】:

我有一个包含 1 行 2 列的 TableLayoutPanel 的表单。

第 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 是最后一个被调用的。

谢谢!

【问题讨论】:

  • UI 线程可能正忙于所有线程都在休眠。您可以在设置PictureBox.Image 后插入无法形容的Application.DoEvents()。通常要避免,但在这里不会造成任何伤害..

标签: c# .net winforms picturebox


【解决方案1】:

如果您了解 Windows 窗体事件生命周期,那么您可以轻松了解您遇到的问题。基本上,在绘制表单时会绘制图像和其他控件,最后会引发 Paint 事件。因此,这意味着应用程序不会绘制任何控件或图形,直到所有过程都未完成。

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

【讨论】:

    猜你喜欢
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    相关资源
    最近更新 更多