ToolStripButtons пользовательского BindingNavigator отображается заблокированным в конструкторе форм. - PullRequest
1 голос
/ 20 июня 2020

Я пытаюсь создать собственный элемент управления BindingNavigator с дополнительным ToolStripButton (Edit и ExportToExcel). ToolStripButton добавляется в BindingNavigator, но я не могу выбрать этот новый ToolStripButton, например, для добавления кода в его обработчик событий Click. На самом деле кнопки ToolStripButtons появляются заблокированы .

Вот мой код и изображение, которое должно описывать проблему:

using System.Windows.Forms;

public class BindingNavigator : System.Windows.Forms.BindingNavigator
{
    public ToolStripButton btnEdit;
    public ToolStripButton btnExcelExport;

    public BindingNavigator()
    {
        this.LayoutCompleted += BindingNavigator_LayoutCompleted;
    }

    public void BindingNavigator_LayoutCompleted(object sender, System.EventArgs e)
    {
        if (this.Items.Contains(btnEdit))
            return;
        if (this.Items.Count >= 11)
        {
            btnEdit = new ToolStripButton();
            btnEdit.Image = global::BaseControls.Properties.Resources.Edit___16x16;
            btnEdit.Name = "btnEdit";
            this.Items.Insert(10, btnEdit);

            this.Items.Add(new ToolStripSeparator());

            btnExcelExport = new ToolStripButton();
            btnExcelExport.Image = global::BaseControls.Properties.Resources.Excel___16x16;
            btnExcelExport.Name = "btnExcelExport";
            this.Items.Insert(13, btnExcelExport);
        }
    }
}

моя привязка навигатор

1 Ответ

0 голосов
/ 21 июня 2020

Класс BindingNavigator имеет специальный конструктор BindingNavigatorDesigner, производный от ToolStripDesigner. Конструктор вызывает метод publi c virtual AddStandardItems () , который затем вызывается конструктором форм, когда BindingNavigator добавляется в форму.

Чтобы кнопки работали, переопределите это в настраиваемом классе и добавьте сюда новые кнопки. Теперь ваши ToolStripButtons сериализованы в конструкторе форм, и если вы дважды щелкните одну из своих настраиваемых кнопок, в форму добавится обработчик Click.

Примечания, которые вы можете найти в. Net Исходный код :

Переопределите этот метод в производных классах, чтобы определить дополнительные или альтернативные стандартные элементы. Чтобы обеспечить оптимальную поддержку производного класса во время разработки, убедитесь, что каждый элемент имеет значимое значение в свойстве Name. Во время разработки это будет использоваться для создания уникального имени для соответствующей переменной-члена. Затем свойство Name элемента будет обновлено, чтобы оно соответствовало имени, присвоенному переменной-члену.

BindingNavigator Custom Как видите, теперь кнопки полностью функциональны

Я предлагаю вам изменить свой пользовательский BindingNavigator следующим образом:

► Не называйте свой пользовательский элемент управления BindingNavigator

public class BindingNavigatorEx : BindingNavigator
{
    private ToolStripItem btnEdit;
    private ToolStripItem btnExcelExport;

    public BindingNavigatorEx() { }

    public override void AddStandardItems()
    {
        base.AddStandardItems();
        this.Items.Add(new ToolStripSeparator());

        btnEdit = new ToolStripButton() {
            Image = Properties.Resources.Edit___16x16,
            Name = "bindingNavigatorButtonEdit",
            DisplayStyle = ToolStripItemDisplayStyle.Image
        };
        this.Items.Add(btnEdit);

        btnExcelExport = new ToolStripButton() {
            Image = Properties.Resources.Excel___16x16,
            Name = "bindingNavigatorButtonExcelExport",
            DisplayStyle = ToolStripItemDisplayStyle.Image
        };
        this.Items.Add(btnExcelExport);
    }
}
...