Как я могу сделать прозрачную вкладку? Я нашел такие решения, как набори TransparencyKey
, например, Color.LimeGreen
или переопределить OnPaintBackground
пустым методом, но TabPage не имеет ни метода TransparencyKey property nor
OnPaintBackground`. Как я могу это сделать?Как я могу сделать прозрачную вкладку?
ответ
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();
}
Это работает удивительно хорошо. Я создал пользовательский элемент управления из этого класса и перетащил элемент управления в свою форму. Но во время разработки есть проблема: после запуска приложения управление стало полностью невидимым. Сразу после того, как я поместил элемент управления в свою форму, он выглядит так: http://prntscr.com/720szz после того, как я скомпилирую приложение и вернусь к дизайну VS GUI, он выглядит так: http://prntscr.com/720t4a Кажется, это но до сих пор я все еще могу сказать, перейдя в список элементов управления формы на ComboBox прямо над Property Grid. – Jack
На самом деле, элемент 'TransparentTabControl' сам по себе больше не находится (после компиляции) только его вкладки: http://prntscr.com/720z9s – Jack
Отмечено, OnParentChanged() был поздним изменением, а дизайнеру не нравится это очень. Я отразил проблему, теперь работает намного лучше. –
- 1. Как я могу сделать прозрачную размытую границу?
- 2. Как я могу сделать прозрачную сетку?
- 3. Cardslib Как я могу сделать прозрачную карту
- 4. Как я могу сделать вкладку DIV?
- 5. Как сделать прозрачную стрелу?
- 6. Как сделать прозрачную активность
- 7. Как сделать прозрачную картинку?
- 8. Как создать прозрачную вкладку в ios
- 9. Как сделать прозрачную кнопку?
- 10. Сделать прозрачную прозрачную карту для QLabel
- 11. Как сделать «мышь-прозрачную» панель?
- 12. Как я могу Grep вкладку
- 13. Android Сделать прозрачную половину обзора
- 14. Как я могу поставить ImageView под прозрачную панель инструментов?
- 15. Как сделать прозрачную форму внутри панели?
- 16. Как сделать прозрачную панель навигации прозрачной?
- 17. Как сделать прозрачную границу с помощью CSS?
- 18. Android: Как я могу получить прозрачную область на изображении
- 19. Как сделать прозрачную jframe изменяемой по размеру?
- 20. Как сделать прозрачную накладку на изображении
- 21. JqGrid - как сделать прозрачную кнопку поиска видимой?
- 22. сделать прозрачную часть изображения unclickable
- 23. Возможно сделать прозрачную градиентную маску?
- 24. Сделать прозрачную прозрачную панель в одном действии/фрагменте
- 25. Как сделать прозрачную форму для окрашивания
- 26. Как сделать прозрачную форму в лазаре?
- 27. Как сделать прозрачную прокси-модель: QAbstractProxyModel?
- 28. Как сделать прозрачную форму в vb6.0?
- 29. Как сделать прозрачную границу с CSS?
- 30. Как сделать прозрачную деятельность с использованием AppCompat
'TabPage1.BackColor = Color.Transparent' Ставить в TabPage1 на имя вашего контроля и попытаться что .. – MethodMan
Короче говоря, вы не можете. WinForms представляет собой оболочку вокруг собственных элементов управления Win32 и GDI, ни одна из которых не поддерживает истинный Z-порядок компонентов пользовательского интерфейса с альфа-каналами. Для этих эффектов вам нужно будет использовать WPF или другую инфраструктуру пользовательского интерфейса. – Dai