C # Form.TransparencyKey работает по-разному для разных цветов, почему? - PullRequest
12 голосов
/ 15 декабря 2010

Вчера я обнаружил что-то очень странное (я думаю).Похоже, Form.TransparencyKey дает разные результаты, в зависимости от того, какой цвет используется как BackgroundColor и TransparencyKey.Если вы хотите воспроизвести это, сделайте следующее:

  1. Создайте новое приложение Windows Forms
  2. Добавьте Panel в форму
  3. Дайте ему "Зеленый" какBackgroundColor и установите для Form1's TransparencyKey также зеленый
  4. Запустите программу и поместите форму с «отверстием» поверх чего-либо, и вы увидите, что можете щелкнуть через это отверстие (как описано в MSDN)
  5. Теперь измените оба цвета на «Красный» и запустите приложение - вы увидите «дыру», но вы больше не можете щелкнуть, хотя она

Знаете ли вы, почему это происходит?Какое правило?Я использую .NET 4 с VS2010, протестирован на двух компьютерах с одинаковой конфигурацией.

Не так много кода для этого ... Но я могу опубликовать настройки в конструкторе:

private void InitializeComponent()
{
     this.panel1 = new System.Windows.Forms.Panel();
     this.SuspendLayout();
     // 
     // panel1
     // 
     this.panel1.BackColor = System.Drawing.Color.Red;
     this.panel1.Location = new System.Drawing.Point(23, 26);
     this.panel1.Name = "panel1";
     this.panel1.Size = new System.Drawing.Size(229, 176);
     this.panel1.TabIndex = 0;
     // 
     // Form1
     // 
     this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
     this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
     this.ClientSize = new System.Drawing.Size(284, 262);
     this.Controls.Add(this.panel1);
     this.Name = "Form1";
     this.Text = "Form1";
     this.TransparencyKey = System.Drawing.Color.Red;
     this.ResumeLayout(false); 
}
//that outside:
private System.Windows.Forms.Panel panel1;

1 Ответ

9 голосов
/ 15 декабря 2010

Я слышал об этой проблеме раньше, но никогда не понимал, что она связана с выбором TransparencyKey.Хорошая находка.Это почти наверняка вызвано Aero.Если он отключен, эффект реализуется путем использования аппаратного наложения в видеоадаптере.Когда он включен, функция компоновки окон рабочего стола реализует его.Обычно вы можете очень быстро определить цвет прозрачности, прежде чем DWM догонит и заменит область пикселями из окон на заднем плане.Отключение DWM для вашего окна может решить проблему, но вы также потеряете эффекты стекла.

Я вижу небольшую рифму или причину для значения цвета, для меня это выглядит довольно случайным.Трудно назвать это что-то еще, кроме ошибки.Я никогда не сталкивался с этим раньше себя, я всегда использую один и тот же ключ прозрачности.Color.Fuchsia, отличный цвет fuchsed-up.Рекомендуется.

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