首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以从它的宿主控件获得一个ToolStripControlHost引用吗?

我可以从它的宿主控件获得一个ToolStripControlHost引用吗?
EN

Stack Overflow用户
提问于 2015-01-28 14:17:54
回答 1查看 371关注 0票数 0

在下面的代码中,将创建一个从ToolStrip派生的控件类。然后,该控件创建一个嵌入式(私有) ToolStripControlHost,并将其Control设置为一个新的TextBox控件。提供了一个公共成员,该成员返回对嵌入式TextBox控件的引用以供外部使用。如下..。

代码语言:javascript
复制
public class StatusToolStrip : ToolStrip
{
    private ToolStripControlHost _status = new ToolStripControlHost(new TextBox());

    public TextBox StatusTextControl { get { return (_status.Control is TextBox) ? (TextBox)_status.Control : null; } }
}

我的问题是我需要访问ToolStripControlHost。我意识到我可以简单地添加一个公共成员并直接返回它,但我很好奇为什么它似乎不可能从托管控件倒退到主机。

所以,我的问题是:我能从TextBox控件获得它的主机是什么吗?或者,就这一点而言,甚至决定它是否是托管的?

到目前为止,我还没有办法通过查看StatusTextControl成员(即托管的TextBox控件)来确定它是否位于控件主机中,更不用说主机是什么了。

这能办到吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-29 04:16:09

控件的Parent返回ToolStrip。因此,可以搜索到ToolStrip来查找控件。类似于:

代码语言:javascript
复制
private static ToolStripControlHost Find(Control c) {
    var p = c.Parent;
    while (p != null) {
        if (p is ToolStrip)
            break;
        p = p.Parent;
    }
    if (p == null)
        return null;

    ToolStrip ts = (ToolStrip) p;
    foreach (ToolStripItem i in ts.Items) {
        var h = Find(i, c);
        if (h != null)
            return h;
    }
    return null;
}

private static ToolStripControlHost Find(ToolStripItem item, Control c) {
    ToolStripControlHost result = null;
    if (item is ToolStripControlHost) {
        var h = (ToolStripControlHost) item;
        if (h.Control == c) {
            result = h;
        }
    }
    else if (item is ToolStripDropDownItem) {
        var ddm = (ToolStripDropDownItem) item;
        foreach (ToolStripItem i in ddm.DropDown.Items) {
            result = Find(i, c);
            if (result != null)
                break;
        }
    }
    return result;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28194499

复制
相关文章

相似问题

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