如何在 mdiparent RibbonFarm 的 mdi 子窗体中列出所有条形按钮项目?

How to list all the barButton Items in a mdichild form from mdiparent RibbonForm?

我试图在 gridcontrol 中以 mdichild 的形式在 xtraTabbedMdiManager1 中加载所有来自 mdiparent RibbonForm 的功能区页面的 barButtonItems。

DataTable dt = new DataTable();
dt.Clear();
dt.Columns.Add("ID");
dt.Columns.Add("PAGE");
dt.Columns.Add("GROUP");
dt.Columns.Add("BARBUTTON");
DataRow dr;
RibbonControl parentRibbon = ((RibbonForm)this.MdiParent).Ribbon;
RibbonPageGroup group = parentRibbon.Pages.GetPageByName("ribbonPage1").Groups.GetGroupByText("ribbonPageGroup4");            
foreach (DevExpress.XtraBars.BarButtonItem item in parentRibbon.Controls)
{
dr = dt.NewRow();
dr["BARBUTTON"] = item.Name;
dt.Rows.Add(dr);
}
gridControl1.DataSource = dt;

但它没有 运行 它。它向我显示此错误 System.NullReferenceException。请帮我。提前致谢。

试试这个:

ItemLinks 将为您提供所有 BarButtonItem 访问权限。您可以阅读这篇文章以获取更多信息: https://documentation.devexpress.com/WindowsForms/DevExpress.XtraBars.BarButtonItemLink.class

请记住,Form1 是父窗体,ribbonControl1 是父窗体功能区控件。

    DataTable dt = new DataTable();
    dt.Clear();
    dt.Columns.Add("ID");
    dt.Columns.Add("PAGE");
    dt.Columns.Add("GROUP");
    dt.Columns.Add("BARBUTTON");
    DataRow dr;
    XtraForm frm = (XtraForm)Application.OpenForms["Form1"];
    RibbonControl parentRibbon = (RibbonControl)frm.Controls["ribbonControl1"];
    List<BarItemLink> var = parentRibbon.Pages.GetPageByName("ribbonPage1").Groups.GetGroupByText("ribbonPageGroup1").ItemLinks.ToList();
    foreach (DevExpress.XtraBars.BarItemLink bar in var)
    {
        dr = dt.NewRow();
        dr["BARBUTTON"] = bar.Caption; // bar.Item.Name; // bar.DisplayCaption;
        dt.Rows.Add(dr);
    }