C# 全部加载前的空白窗口
在加载整个表单之前,如何对空白窗口进行编码?我试着在window_Load(窗口加载)和window_(窗口显示)时在窗口上方拖动一个白色的图片框,但没有成功。有什么想法吗?我制作了一个自定义窗口,因此当它显示时,它将显示为具有自定义外观的消息框,加载完成后,我会这样关闭此窗口C# 全部加载前的空白窗口,c#,window-load,C#,Window Load,在加载整个表单之前,如何对空白窗口进行编码?我试着在window_Load(窗口加载)和window_(窗口显示)时在窗口上方拖动一个白色的图片框,但没有成功。有什么想法吗?我制作了一个自定义窗口,因此当它显示时,它将显示为具有自定义外观的消息框,加载完成后,我会这样关闭此窗口 CMessageBox cmb = new CMessageBox("Loading..."); cmb.Show(this); //Do the heavy work here //after the heavy w
CMessageBox cmb = new CMessageBox("Loading...");
cmb.Show(this);
//Do the heavy work here
//after the heavy work finish call cmb.close()
cmb.Close();
当然,cmb是您必须自行定制的窗口
实际上,它只是一种形式,我删除了它的边框,并把它加载到中间的文本中。p>
好的,我将为自定义表单添加代码
创建新表单并将此代码添加到其中
public CMessageBox(string message)
{
InitializeComponent();
this.lblMessage.Text = message;
}
private void CMessageBox_Load(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
}
private void lblMessage_TextChanged(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
this.Refresh();
}
public string _Caption
{
get { return this.lblMessage.Text; }
set { this.lblMessage.Text = value; }
}
在那之后,你称它为我在开始时向你展示的
我已经设置了一个窗口,因此它的宽度和高度都很小,仅用于包含消息,如果您想更改此窗口,则可以忽略这两个事件
private void CMessageBox_Load(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
}
private void lblMessage_TextChanged(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
this.Refresh();
}
您需要在设计中添加标签并为其命名LBL消息您还需要将BorderStyle设置为none我已经创建了一个自定义窗口,因此当它显示时,它将显示为一个具有自定义外观的消息框,并且在加载完成时,我会这样关闭此窗口
CMessageBox cmb = new CMessageBox("Loading...");
cmb.Show(this);
//Do the heavy work here
//after the heavy work finish call cmb.close()
cmb.Close();
当然,cmb是您必须自行定制的窗口
实际上,它只是一种形式,我删除了它的边框,并把它加载到中间的文本中。p>
好的,我将为自定义表单添加代码
创建新表单并将此代码添加到其中
public CMessageBox(string message)
{
InitializeComponent();
this.lblMessage.Text = message;
}
private void CMessageBox_Load(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
}
private void lblMessage_TextChanged(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
this.Refresh();
}
public string _Caption
{
get { return this.lblMessage.Text; }
set { this.lblMessage.Text = value; }
}
在那之后,你称它为我在开始时向你展示的
我已经设置了一个窗口,因此它的宽度和高度都很小,仅用于包含消息,如果您想更改此窗口,则可以忽略这两个事件
private void CMessageBox_Load(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
}
private void lblMessage_TextChanged(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
this.Refresh();
}
您需要在设计中添加标签并为其命名LBL消息您还需要将BorderStyle设置为none我已经创建了一个自定义窗口,因此当它显示时,它将显示为一个具有自定义外观的消息框,并且在加载完成时,我会这样关闭此窗口
CMessageBox cmb = new CMessageBox("Loading...");
cmb.Show(this);
//Do the heavy work here
//after the heavy work finish call cmb.close()
cmb.Close();
当然,cmb是您必须自行定制的窗口
实际上,它只是一种形式,我删除了它的边框,并把它加载到中间的文本中。p>
好的,我将为自定义表单添加代码
创建新表单并将此代码添加到其中
public CMessageBox(string message)
{
InitializeComponent();
this.lblMessage.Text = message;
}
private void CMessageBox_Load(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
}
private void lblMessage_TextChanged(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
this.Refresh();
}
public string _Caption
{
get { return this.lblMessage.Text; }
set { this.lblMessage.Text = value; }
}
在那之后,你称它为我在开始时向你展示的
我已经设置了一个窗口,因此它的宽度和高度都很小,仅用于包含消息,如果您想更改此窗口,则可以忽略这两个事件
private void CMessageBox_Load(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
}
private void lblMessage_TextChanged(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
this.Refresh();
}
您需要在设计中添加标签并为其命名LBL消息您还需要将BorderStyle设置为none我已经创建了一个自定义窗口,因此当它显示时,它将显示为一个具有自定义外观的消息框,并且在加载完成时,我会这样关闭此窗口
CMessageBox cmb = new CMessageBox("Loading...");
cmb.Show(this);
//Do the heavy work here
//after the heavy work finish call cmb.close()
cmb.Close();
当然,cmb是您必须自行定制的窗口
实际上,它只是一种形式,我删除了它的边框,并把它加载到中间的文本中。p>
好的,我将为自定义表单添加代码
创建新表单并将此代码添加到其中
public CMessageBox(string message)
{
InitializeComponent();
this.lblMessage.Text = message;
}
private void CMessageBox_Load(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
}
private void lblMessage_TextChanged(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
this.Refresh();
}
public string _Caption
{
get { return this.lblMessage.Text; }
set { this.lblMessage.Text = value; }
}
在那之后,你称它为我在开始时向你展示的
我已经设置了一个窗口,因此它的宽度和高度都很小,仅用于包含消息,如果您想更改此窗口,则可以忽略这两个事件
private void CMessageBox_Load(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
}
private void lblMessage_TextChanged(object sender, EventArgs e)
{
this.lblMessage.Top = (this.Height - this.lblMessage.Height) / 2;
this.lblMessage.Left = (this.Width - this.lblMessage.Width) / 2;
this.Refresh();
}
您需要在设计中添加标签并为其命名LBL消息您还需要将BorderStyle设置为noneWindows使用画家的算法进行绘制,它从后面到前面。因此,你的PictureBox技巧无法工作,因为它是最后一个被绘制的。技术术语是它在Z级中是最高的。将其设置为Z顺序中的最低值也不起作用,它不再覆盖慢速控件 尝试覆盖控件通常不会起作用,移除覆盖会迫使控件重新绘制自己,您将再次看到缓慢的重画。从技术上讲,您可以使用另一个无边界表单来覆盖它,但这在较旧的Windows版本或已关闭Aero的版本上不起作用 您还需要另一个技巧,仍然要绘制控件,但不能使其对用户可见。使用“不透明度”属性可以轻松完成。像这样:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
this.Opacity = 0;
}
protected override void OnShown(EventArgs e) {
this.Update();
this.Opacity = 0.99;
base.OnShown(e);
}
}
当然,你的窗口不会更快地显示出来,但是现在它会捕捉到屏幕上,给人一种速度的感觉。不要错误地将“不透明度”指定更改为1.0,这会使其再次变慢,因为窗口需要重新创建和重新绘制。Windows使用画家的算法进行绘制,从后面到前面。因此,你的PictureBox技巧无法工作,因为它是最后一个被绘制的。技术术语是它在Z级中是最高的。将其设置为Z顺序中的最低值也不起作用,它不再覆盖慢速控件 尝试覆盖控件通常不会起作用,移除覆盖会迫使控件重新绘制自己,您将再次看到缓慢的重画。从技术上讲,您可以使用另一个无边界表单来覆盖它,但这在较旧的Windows版本或已关闭Aero的版本上不起作用 您还需要另一个技巧,仍然要绘制控件,但不能使其对用户可见。使用“不透明度”属性可以轻松完成。像这样:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
this.Opacity = 0;
}
protected override void OnShown(EventArgs e) {
this.Update();
this.Opacity = 0.99;
base.OnShown(e);
}
}
当然,你的窗口不会更快地显示出来,但是现在它会捕捉到屏幕上,给人一种速度的感觉。不要错误地将“不透明度”指定更改为1.0,这会使其再次变慢,因为窗口需要重新创建和重新绘制。Windows使用画家的算法进行绘制,从后面到前面。因此,你的PictureBox技巧无法工作,因为它是最后一个被绘制的。技术术语是它在Z级中是最高的。将其设置为Z顺序中的最低值也不起作用,它不再覆盖慢速控件 尝试覆盖控件通常不会起作用,移除覆盖会强制控件重新覆盖