这是最简单的事情,但我无法更新状态栏上的文字...我刚刚开始使用c#但无法找到解决方案..
在所有答案中,接受的答案是statusBar1.Text = "text";
我做了简单的菜单,并在菜单中添加了LOAD项目。图片已加载,一切正常,只是状态文本不更新...
顺便说一下,MessageBox还会在状态栏中显示我需要的正确文本。
这是我的代码,它不起作用:
private void menuLoad_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Title = "Load Photo";
dlg.Filter = "jpg files (*.jpg)"
+ "|*.jpg|All files (*.*)|*.*";
if (dlg.ShowDialog() == DialogResult.OK)
{
try
{
statusBar1.Text = "Loading " + dlg.FileName;
pbxPhoto.Image = new Bitmap(dlg.OpenFile());
statusBar1.Text = "Loaded " + dlg.FileName;
MessageBox.Show("Text = " + dlg.FileName);
}
catch (Exception ex)
{
statusBar1.Text = "Unable to load file " + dlg.FileName;
MessageBox.Show("Unable to load file: " + ex.Message);
}
}
dlg.Dispose();
}
答案 0 :(得分:4)
也许文本被设置但是因为你的线程忙于加载图片而没有被绘制?您可以尝试强制状态栏使自身无效并重新绘制:
statusBar1.Text = "Loading " + dlg.FileName;
statusBar1.Invalidate();
statusBar1.Refresh();
pbxPhoto.Image = new Bitmap(dlg.OpenFile());
statusBar1.Text = "Loaded " + dlg.FileName;
statusBar1.Invalidate();
statusBar1.Refresh();
MessageBox.Show("Text = " + dlg.FileName);
实际上我认为我会将其封装成一个方法,如下所示:
private void UpdateStatusBarText(string text)
{
statusBar1.Text = text;
statusBar1.Invalidate();
statusBar1.Refresh();
}
这样你的try
块看起来像这样:
UpdateStatusBarText("Loading " + dlg.FileName);
pbxPhoto.Image = new Bitmap(dlg.OpenFile());
UpdateStatusBarText("Loaded " + dlg.FileName);
MessageBox.Show("Text = " + dlg.FileName);
修改强>
StatusStrip
控件是容器控件。向其添加ToolStripStatusLabel
项,并更改该控件的文本而不是statusBar1
的文本:
private void UpdateStatusBarText(string text)
{
toolStripStatusLabel1.Text = text;
statusBar1.Invalidate();
statusBar1.Refresh();
}
答案 1 :(得分:3)
此答案与WPF有关,因为此问题最初标记为
WPF
。
正如@MattBurland所提到的,UI更新不会在执行的同时发生。这意味着为UI属性设置不同的值是没有意义的,因为实际上只会更新最后一个。相反,您需要使用Dispatcher
在UI线程上安排消息。尝试这样的事情:
private void UpdateStatus(string message)
{
Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
{
statusBar1.Text = message;
}));
}
然后在你的方法中:
try
{
UpdateStatus("Loading " + dlg.FileName);
pbxPhoto.Image = new Bitmap(dlg.OpenFile());
UpdateStatus("Loaded " + dlg.FileName);
MessageBox.Show("Text = " + dlg.FileName);
}
catch (Exception ex)
{
UpdateStatus("Unable to load file " + dlg.FileName);
MessageBox.Show("Unable to load file: " + ex.Message);
}