ToolStripButton исчезает из PropertyGrid при входе пользователя в Windows - PullRequest
2 голосов
/ 28 сентября 2011

У меня проблема, и сценарий следующий:

Я создал пользовательский элемент управления с одним компонентом PropertyGrid. К этому PropertyGrid я добавил кнопку (шестнадцатеричный режим) в PropertyGrid ToolStrip. Все отлично и прекрасно работает!

Но когда этот элемент управления отображается в форме и пользователь нажимает "Windows->Switch User" и снова регистрируется с тем же именем пользователя, моя кнопка (шестнадцатеричный режим) исчезает . Также появляется четвертая кнопка, которая была спрятана вручную ...

Я не знаю, что случилось. Возможно, Windows перезагрузит свой компонент при входе пользователя в систему?
Windows 7 (x64 / x86)

public partial class CompProperty : UserControl
  {
    private System.Windows.Forms.ToolStripButton _tsbMode = null;

    public CompProperty()
    {
      InitializeComponent();

      createAdditionalButtons();
    }

    private void createAdditionalButtons()
    {
      foreach ( Control control in propertyGrid.Controls )
      {
        ToolStrip toolStrip = control as ToolStrip;

        if ( toolStrip != null )
        {
          toolStrip.Items[4].Visible = false;

          _tsbMode = new System.Windows.Forms.ToolStripButton();
          _tsbMode.CheckOnClick = true;
          _tsbMode.Checked = true;
          _tsbMode.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
          _tsbMode.Image = Resources.img_edit;
          _tsbMode.ImageTransparentColor = System.Drawing.Color.Magenta;
          _tsbMode.Name = "tsbMode";
          _tsbMode.Size = new System.Drawing.Size( 23, 22 );
          _tsbMode.Text = "Heximal Mode";
          _tsbMode.ToolTipText = "Heximal Mode";

          toolStrip.Items.AddRange( new System.Windows.Forms.ToolStripItem[] {
            _tsbMode} );
          break;
        }
      }
    }
  }

1 Ответ

1 голос
/ 28 сентября 2011

Да, это по замыслу. Класс PropertyGrid перестраивает панель инструментов при возникновении события SystemEvents.UserPreferencesChange. Который действительно может срабатывать на настольном коммутаторе. Вы можете исправить это так:

using System;
using System.Windows.Forms;

class MyPropertyGrid : PropertyGrid {
    protected override void OnSystemColorsChanged(EventArgs e) {
        // Do nothing
    }
}

Не идеально, конечно. Холодный факт в том, что это просто не поддерживается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...