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

我整天都在搜索Google,但找不到正确的答案,希望这里的人能为我提供帮助。 因此,在\“ Main \”表单中,我有一种方法来显示需要直接位于父表单(frmMain)上方居中的表单。通常,我会调用ShowDialog(this)来查看父级,但是出于某些原因,我必须将loadNewsFeedItem设置为static才能从flpNewsFeedHeader:Label派生类中看到方法(如下)。 OnClick事件触发方法loadNewsFeedItem()。 当我调用它设置父对象时,我收到消息“关键字\'this \'在静态属性,静态方法或静态字段初始化程序中无效”
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()可见,或者如何在静态访问器中解决此问题吗? 提前致谢! 克里斯     
已邀请:
        编辑:用于所有者的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);
   }
} 
    
        可能是您的意思是:
frmFeedView.Owner = System.Windows.Forms.Form.ActiveForm;
frmFeedView.ShowDialog();
    
        在静态方法中,
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 ); 
    }
    

要回复问题请先登录注册