这是设计窗口的图像:
以下是MainForm.Designer.cs
文件:
namespace SamsCSharp24
{
partial class ImeObrasca
{
// irrelavent code is omitted, only event subscriptions are left
private void InitializeComponent()
{
// irrelavent code is omitted for brewity
//
// SelectPicture
//
this.SelectPicture.Paint += new System.Windows.Forms.PaintEventHandler(this.SelectPicture_Paint);
this.SelectPicture.Click += new System.EventHandler(this.SelectPicture_Click);
//
// Quit
//
this.Quit.Click += new System.EventHandler(this.Quit_Click);
//
// PictureBox
//
this.PictureBox.MouseLeave += new System.EventHandler(this.PictureBox_MouseLeave);
this.PictureBox.MouseEnter += new System.EventHandler(this.PictureBox_MouseEnter);
//
// btnOptions
//
this.btnOptions.Click += new System.EventHandler(this.btnOptions_Click);
//
// timerClock
//
this.timerClock.Tick += new System.EventHandler(this.timerClock_Tick);
}
#endregion
}
}
以下是MainForm.cs
文件:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace SamsCSharp24
{
public partial class ImeObrasca : Form
{
public ImeObrasca()
{
InitializeComponent();
// when uncommenting below line, window is not seen in taskbar
// this.ShowInTaskbar = false;
}
// other code is omitted for brewity
private void SelectPicture_Paint(object sender, PaintEventArgs e)
{
// just for fun, change color of a button to light blue
SelectPicture.BackColor = Color.Azure;
}
private void timerClock_Tick(object sender, EventArgs e)
{
// when timer ticks, change label's text into current time of day
staticClock.Text = "Current time of day: " +
DateTime.Now.Hour.ToString() + " : " +
DateTime.Now.Minute.ToString() + " : " +
DateTime.Now.Second.ToString();
}
}
}
定时器控件具有以下通过设计器设置的属性:
Enabled = true;
Interval = 1000
Name = timerClick
Tick (event) = timerClock_Tick
至于标签,这里是设置设置的属性:
BorderStyle = FixedSingle
Name = staticClock
Autosize = false
Text =
Other properties are default or irrelevant ( like Location or Size )
当我运行应用程序时(在调试模式下),会出现一个窗口,其中包含正确放置的控件并且看起来正确。代码的每个其他部分都能成功运行(图片打开/绘图等),但标签仍为空,如设计师最初设置的那样。
在最小化/最大化窗口后,标签文本设置正确。我试图移动窗口的一部分,标签“在屏幕外”,并让它回来看看会发生什么。标签中的文字已更改有时 - >它没有更新正确。
这是我第一次尝试使用C#和WinForms,所以我试图在计时器上找到一些在线文档。
在检查.Designer.cs
文件后,我发现工具箱中的计时器属于System.Windows.Forms.Timer
类。我找不到任何帮助我,因为在备注部分声明将属性Enabled
设置为true
启动计时器,并将其设置为false
将其停止。
我试图放置简单的消息框,当窗口最小化时它开始正常弹出。当窗口处于正常状态时,没有任何显示,但程序的其他部分运行良好(图片打开/绘图/等)。
在尝试使用Google进行解决方案/搜索之后,我找不到具体的解决方案(虽然提出了一些建议,但正如我所说,它们对我没有帮助。)
如何修改计时器的刻度线处理程序,以便每隔一段时间修改标签的文本?
我做错了什么?
答案 0 :(得分:2)
正如Hans Passant在其中一条评论中所说,“Paint事件处理程序应该只绘制,它们永远不应该更改导致Paint事件再次被触发的属性。这样的恶作剧会导致UI线程烧掉100%核心,永远不会调度低优先级的合成消息。就像WM_TIMER一样。最小化窗口会暂时停止。“