0

一部のシステムではかなり重いBukkit(Minecraft)のサーバーマネージャーであるため、プログラムをマルチスレッド化しています。今、私は少し問題に直面しています。新しい子フォームを開きたいときは、センターペアレントに伝えることができません。フォームに指示したことを実行しません。私はこれの回避策を見つけましたが、それがもっと簡単にできるのか、それとも何か他のものを変更しなければならないのかわかりません。

これは私が持っているコードですatm:
Works

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();

この動作は正常ですか?ありがとう!

4

2 に答える 2

0

私はMadScienceDreamsのアドバイスに従い、希望する結果を得ました。これがトリックを実行したコードです。

this.Invoke(new MethodInvoker(()=>ThreadFrmSettings())
于 2013-03-21T20:57:35.697 に答える
0

StartPosition = FormStartPosition.CenterScreen; のプロパティはどう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(); 異なる結果が得られ、その場合、ウィンドウは中央にありません。

これがスレッド/タスクのサンプルです

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            StartPosition = FormStartPosition.CenterScreen;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(() => {

                Form frmSettings = new Form();
                frmSettings.Width = 300;
                frmSettings.Height = 200;
                frmSettings.StartPosition = FormStartPosition.CenterParent;

                frmSettings.ShowDialog();

            } );   

        }
    }

ここに画像の説明を入力

于 2013-03-21T18:31:05.013 に答える