Как я могу сделать прозрачную вкладку? Я нашел такие решения, как установить для форм BackColor
и TransparencyKey
цвет, подобный Color.LimeGreen
, или переопределить OnPaintBackground
с помощью пустого метода, но TabPage не имеет ни метода TransparencyKeyproperty nor
OnPaintBackground`. Как я могу это сделать?
Как я могу сделать прозрачную вкладку?
Ответы (1)
TabControl — это родной компонент Windows, он всегда рисует вкладки непрозрачными без встроенной поддержки прозрачности. Решение этой проблемы требует небольшой помощи нестандартного мышления, элемент управления вкладками с прозрачными страницами вкладок просто превращается в видимую полосу вкладок. Все, что вам нужно сделать, это использовать панели для размещения элементов управления, которые теперь находятся на вкладках, и сделать правильный элемент видимым с помощью события SelectedIndexChanged.
Лучше всего придерживаться этого в производном классе, чтобы вы могли нормально использовать элемент управления вкладками во время разработки. Добавьте новый класс в свой проект и вставьте код, показанный ниже. Скомпилировать. Перетащите новый элемент управления из верхней части панели инструментов на форму, заменив существующий.
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
class TransparentTabControl : TabControl {
private List<Panel> pages = new List<Panel>();
public void MakeTransparent() {
if (TabCount == 0) throw new InvalidOperationException();
var height = GetTabRect(0).Bottom;
// Move controls to panels
for (int tab = 0; tab < TabCount; ++tab) {
var page = new Panel {
Left = this.Left, Top = this.Top + height,
Width = this.Width, Height = this.Height - height,
BackColor = Color.Transparent,
Visible = tab == this.SelectedIndex
};
for (int ix = TabPages[tab].Controls.Count - 1; ix >= 0; --ix) {
TabPages[tab].Controls[ix].Parent = page;
}
pages.Add(page);
this.Parent.Controls.Add(page);
}
this.Height = height /* + 1 */;
}
protected override void OnSelectedIndexChanged(EventArgs e) {
base.OnSelectedIndexChanged(e);
for (int tab = 0; tab < pages.Count; ++tab) {
pages[tab].Visible = tab == SelectedIndex;
}
}
protected override void Dispose(bool disposing) {
if (disposing) foreach (var page in pages) page.Dispose();
base.Dispose(disposing);
}
}
Вызовите метод MakeTransparent() в обработчике событий Load формы:
private void Form1_Load(object sender, EventArgs e) {
transparentTabControl1.MakeTransparent();
}
TransparentTabControl
там больше нет (после компиляции), только его вкладки: prntscr.com/720z9s а>
- person Jack; 06.05.2015
TabPage1.BackColor = Color.Transparent
измените TabPage1 на имя вашего элемента управления и попробуйте это. - person MethodMan   schedule 05.05.2015