首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交叉通讯

交叉通讯
EN

Stack Overflow用户
提问于 2014-04-01 13:53:29
回答 7查看 616关注 0票数 0

我有一个有两种形式的程序。第二种形式,Form2,其中我希望用主表单中的值初始化几个标签。

守则:

代码语言:javascript
复制
public Form2()
        {
            InitializeComponent();
            Form1 mainForm = (Form1)this.Owner;
            lblName.Text = mainForm.gvRow.Cells[2].Value.ToString();
            lblItemType.Text = mainForm.gvRow.Cells[1].Value.ToString();
            lblLocation.Text = mainForm.gvRow.Cells[3].Value.ToString();
        }

由于某些原因,这在Form2()部分中不起作用,this.Owner为null。但是,如果我要将代码放在一个事件方法中,它就工作得很好。

我怎么才能解决呢?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2014-04-01 14:00:23

第二种形式一开始就不需要知道你的主表单。即使是这样,解读其内部控制也是一个非常糟糕的想法。

相反,第二个窗体应该具有公共属性,通过它可以接受主窗体希望提供给它的数据,而无需公开任何内部控制,主窗体可以使用其控件中的数据设置这些属性。如果您只有少量数据,那么也可以将参数用于构造函数,这是您唯一需要提供的时候。

代码语言:javascript
复制
public class Form2
{
    public string Name
    {
        get { return lblName.Text; }
        set { lblName.Text = value; }
    }
}

public class MainForm
{
    public void Foo()
    {
        Form2 child = new Form2();
        child.Name = mainForm.gvRow.Cells[2].Value.ToString();
        child.Show();
    }
}
票数 4
EN

Stack Overflow用户

发布于 2014-04-01 13:59:23

此代码在创建Form2窗体时执行。Owner还没有被设置(而且,大概数据还没有出现)。如果把它放在VisibleChanged事件处理程序中--它将在Owner和数据出现时执行。

票数 2
EN

Stack Overflow用户

发布于 2014-04-01 14:00:47

使用Load事件。只有在显示表单之后才初始化Owner,然后表单会引发Load事件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22788008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档