C#从另一个类调用方法后设置Form Parent

时间:2011-06-14 22:20:59

标签: c# .net winforms static this

我整天都在搜索Google,找不到正确的答案,希望有人可以帮助我。

因此,在“Main”表单中,我有方法来显示需要直接居中于父窗体(frmMain)上方的窗体。通常我会调用ShowDialog(this)来查看父级,但由于某种原因,我必须将loadNewsFeedItem设置为static,以便从flpNewsFeedHeader:Label derrived类(下面)中查看方法。 OnClick事件触发方法loadNewsFeedItem()。

当我调用它来设置父级时,我收到消息“关键字'这个'在静态属性,静态方法或静态字段初始化器中无效”

namespace NewsFeeds
{
public partial class FrmMain : Form
{
    public static void loadNewsFeedItem()
    {
        frmNewsFeedView frmFeedView = new frmNewsFeedView(FrmFuncs.selFeedID);
        frmFeedView.ShowDialog(this); // Error occurs on this line, when calling this via a static method
    }
}
}

public class flpNewsFeedHeader : Label
{
 private int FeedID = 0;

 public int theFeedID
 {
     get { return FeedID; }
     set { FeedID = value; }
 }

 protected override void OnClick(EventArgs e)
 {
     FrmFuncs.selFeedID = FeedID;
     Thread thrShowFeed = new Thread(new ThreadStart(FrmMain.loadNewsFeedItem));
     thrShowFeed.Start();
 }
}

有人可以给我一个更正的代码示例或提示如何在不将访问器设置为静态的情况下使loadNewsFeedItem()可见,或者如何在静态访问器中解决此问题?

提前致谢!

克里斯

3 个答案:

答案 0 :(得分:1)

编辑:为所有者使用ActiveForm。

   public partial class FrmMain : Form
   {
      public static void loadNewsFeedItem(Form owner)
      {
         frmNewsFeedView frmFeedView = new frmNewsFeedView(FrmFuncs.selFeedID);
         frmFeedView.ShowDialog(owner);
      }
   }
}

public class flpNewsFeedHeader : Label
{
   private int FeedID = 0;

   public int theFeedID
   {
      get { return FeedID; }
      set { FeedID = value; }
   }

   protected override void OnClick(EventArgs e)
   {
      FrmFuncs.selFeedID = FeedID;
      // Shouldn't need a new thread.  Already on the GUI thread.
      FrmMain.loadNewsFeedItem (System.Windows.Forms.Form.ActiveForm);
   }
} 

答案 1 :(得分:1)

可能是你的意思:

frmFeedView.Owner = System.Windows.Forms.Form.ActiveForm;
frmFeedView.ShowDialog();

答案 2 :(得分:0)

在静态方法中,this毫无意义。一种选择是跳过参数

frmFeedView.ShowDialog();

另一种选择是设置一个静态变量,如下所示(但要注意,如果你尝试打开FrmMain的多个实例,它可能有副作用)

public partial class FrmMain : Form
{
    private static FrmMain staticInstance;
    public FrmMain()
    {
       staticInstance = this;
       InitializeComponent();
       ...
    }

    public static void loadNewsFeedItem()
    {
        frmNewsFeedView frmFeedView = new frmNewsFeedView(FrmFuncs.selFeedID);
        frmFeedView.ShowDialog(staticInstance ); 
    }