从父表单调用子表单上的方法

我有2个表单ParentForm和一个子表单。在我的父窗体中,我有一个线程监听器,它监听更新ParentForm区域的feed。现在,我有一个ChildForm,它还需要将来自侦听器的数据放在ChildForm的一个区域上。线程监听器使用委托在获取feed时更新我的​​ParentForm。 我的ParentForm有这些。
private delegate void UpdateLogCallback(string strFeed);
private Thread thr;

private void InitializeFeed()
{
    ...
    // Get the feed connection
    ...
    thr = new Thread(new ThreadStart(ReceivedFeeds));
    thr.Start();
}

private void ReceivedFeeds()
{
    string strFeed = GetFromStream();

    // invoke my updater while connected
    while(Connected)
    {
        this.Invoke(new UpdateLogCallback(this.UpdateLog), new object[] { strFeed });
    }
}

private void UpdateLog(string strFeed)
{
    txtLog.AppendText(strFeed + "rn");
}
这很好,现在问题就在这里。当我从ParentForm打开一个ChildForm时,我还想使用我从ParentForm中的
ReceivedFeeds()
得到的内容来更新该表单的一部分,我将如何实现这一目标?我无法在ChildForm中创建另一个Feed连接,因为这将复制Connection并导致错误。我只想做与F2ѭ在ChildForm中做的事情一样的事情。 编辑 我打电话给ChildForm在父表单上打开一个
OnClick
事件并显示它。
// onclick event
ChildForm childForm = new ChildForm();
childForm.Name = ((ListBox)sender).SelectedItem.ToString();
childForm.ShowDialog(this);
这就是我打开ChildForm的方法,如何在我的
UpdateLogCallback
或我的
UpdateLog()
中调用ChildForm中的方法 我的ChildForm中也有一个
UpdateLog()
方法。     
已邀请:
如果您只是在parnet表单中保留对子表单的引用,则可以从父表单中调用
UpdateLog
方法
private void UpdateLog(string strFeed)
{
    txtLog.AppendText(strFeed + "rn");
    _child.UpdateLog(strFeed);
}
编辑: 此外,如果您有许多子表单,您可以拥有它们的集合。只需确保在关闭时将其从列表中删除。     
要么调用两个方法而不是一个方法,要么从父窗体更新方法中调用子窗体更新方法,在我看来 - 在父窗体上的UpdateLogCallback中从父窗体中添加一个事件。因此,任何知道父类的类都可以依赖于整个更新系统。     
从父级共享方法之一并从子级调用方法或从子级共享一种方法并从父级调用它可以解决它     
设置表单在创建时不可见。在ctor中写下以下内容(在
InitializeComponents()
之后):
Visible = false;
现在添加一个子窗体的方法,如下所示:
internal void ShowForm(Form parent)
{
    var p = parent as Form1;
    if (p != null)
    {
        p.DataReady += (s, ev) =>
        {
            //update your data here
        };
    }
    ShowDialog(parent);
}
在父表单中声明一个这样的事件:
internal event EventHandler<EventArgs> DataReady;
根据您将数据传递给子表单的需要,您可能需要创建自定义类处理表单
EventArgs
。显示这样的子表单:
var f=new ChildForm();
f.ShowForm(this);//this is parent form
    

要回复问题请先登录注册