C#在从另一个类调用方法后设置Form Parent
本文关键字:设置 Form Parent 方法 调用 另一个 | 更新日期: 2023-09-27 17:59:13
我在谷歌上搜索了一整天,找不到问题的正确答案,希望这里有人能帮助我。
因此,在"Main"表单中,我有一个方法来显示一个需要直接位于父表单(frmMain)上方的表单。通常我会调用ShowDialog(this)来查看父级,但出于某种原因,我必须将loadNewsFeedItem设置为static,以便从flpNewsFeedHeader:Label derried类(如下)中查看方法。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()可见,或者如何在静态访问器中解决这个问题?
提前感谢!
Chris
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 );
}