2013-03-21 33 views
0

我讓我的程序是多線程的,因爲它是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

怎麼樣'StartPosition = FormStartPosition.CenterScreen;'From'的屬性? – 2013-03-21 18:30:46

+2

多線程是如何特別困擾你的? 「ShowDialogue」的默認行爲不是「中心父母」,不管你是否有多個線程。 – IdeaHat 2013-03-21 18:35:26

+0

@MadScienceDreams當我刪除多線程代碼完美的作品:/。 – 2013-03-21 18:38:58

回答

0

StartPosition = FormStartPosition.CenterScreen;From的財產怎麼樣?

I.e.

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

      }); 

     } 
    } 

enter image description here

+0

似乎沒有工作:(。 – 2013-03-21 18:33:15

+0

@FoxyShadoww看看更新的代碼 – 2013-03-21 18:34:10

+0

這個工程,但它並沒有把表格放在父母的中心:p。至少,不適合我 – 2013-03-21 18:35:55

0

我已經按照MadScienceDreams的意見,並得到了我想要的結果的樣品,這是沒有的伎倆代碼:

this.Invoke(new MethodInvoker(()=>ThreadFrmSettings()) 
+0

[Microsoft.JScript]中的MethodInvoker'(http://msdn.microsoft.com/zh-cn/library/microsoft.jscript.methodinvoker.aspx)?該頁面顯示「此API支持.NET Framework基礎結構,不能直接在您的代碼中使用。」 – 2013-06-10 21:26:08

相關問題