我正在使我的程序多线程,因为它是Bukkit(Minecraft)的服务器管理器,对某些系统而言非常重要。现在我面临一个小问题。当我想打开一个新的子表单时,我无法告诉它中心表格。它只是做我告诉表格要做的事情。我找到了一个解决方法,但我不知道它是否可以更容易完成,或者我是否需要更改其他内容。
这是我的代码:
的工程
private void ThreadFrmSettings()
{
Form frmSettings = new frmSettings();
frmSettings.StartPosition = FormStartPosition.Manual;
frmSettings.Location = new Point(Location.X + (Width - frmSettings.Width) / 2, Location.Y + (Height - frmSettings.Height) / 2);
frmSettings.ShowDialog();
}
无效
var frmSettings = new frmSettings();
frmSettings.ShowDialog();
这种行为是正常的吗?谢谢!
答案 0 :(得分:0)
StartPosition = FormStartPosition.CenterScreen;
的{{1}}属性怎么样?
即
From
注意: public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
StartPosition = FormStartPosition.CenterScreen;
Form frmSettings = new Form();
frmSettings.Width = 300;
frmSettings.Height = 200;
frmSettings.StartPosition = FormStartPosition.CenterScreen;
//frmSettings.Location = new Point(Location.X + (Width - frmSettings.Width) / 2, Location.Y + (Height - frmSettings.Height) / 2);
frmSettings.ShowDialog();
}
}
给出了不同的结果,在这种情况下,窗口不会位于中心。
以下是带有线程/任务的示例
frmSettings.Show();
答案 1 :(得分:0)
我已经按照MadScienceDreams的建议获得了我想要的结果,这就是执行这个技巧的代码:
this.Invoke(new MethodInvoker(()=>ThreadFrmSettings())