2013-04-09 7 views
1

У меня есть две формы окон. 1-й является mdiParent формой, названной основной. Вторая - форма представления, являющаяся дочерней формой основной формы. В форме презентаций есть вкладка. В форме презентации есть кнопка настроек. когда я нажимаю кнопку «Настройки», открывается новая форма («prefs») с просьбой нажать на кнопку набора цветов. нажатие этой кнопки открывает диалоговое окноСообщение для изменения цвета. когда я выбираю цвет, изменяется верхний цвет префикса. но dows не изменяет формат вкладки (форма представления) backcolor. Я создаю это приложение в n-уровневой архитектуре. так что помогите мне, как я могу изменить обратную сторону вкладки. Я загружу код, если вы не поняли мой вопрос.Как изменить BackColor Tab?

ответ

0

TabControls не имеет свойства BackColor, поскольку они обычно рисуются на основе текущей темы системного окна.

Обычно это не стоит усилий, но TabControl имеет свойство DrawMode, в котором вы сами нарисуете вкладку в событии DrawItem.

Каждый элемент управления TabPage имеет свойство BackColor.

0

вот мой пользовательский обработчик событий. Мне нужно создать цветную рамку, которая окружает текст. Вкладка выбран один цвет и невыбранные еще один ...

private void ChangeTabColor(Object sender, DrawItemEventArgs e) 
{ 
    Font TabFont; 
    Brush BackBrush;// = new SolidBrush(Color.Green); //Set background color 
    Brush ForeBrush = new SolidBrush(Color.Black);//Set foreground color 
    Brush borderBrush = new SolidBrush(Color.Black);//Set foreground color 

    if (e.Index == this.tabMain.SelectedIndex) 
    { 
     TabFont = new Font(e.Font, FontStyle.Bold); 
     BackBrush = new SolidBrush(Color.MediumSeaGreen); //Set background color 
     //ForeBrush = new SolidBrush(Color.Black);//Set foreground color 
    } 
    else 
    { 
     TabFont = e.Font; 
     BackBrush = new SolidBrush(Color.LightSteelBlue); //Set background color 
     //ForeBrush = new SolidBrush(Color.Yellow);//Set foreground color 
    } 

    string TabName = this.tabMain.TabPages[e.Index].Text; 
    StringFormat sf = new StringFormat(); 
    sf.Alignment = StringAlignment.Center; 

    Rectangle r = e.Bounds; 

    r = new Rectangle(r.X, r.Y + 5, r.Width, r.Height - 3); 

    if (e.Index == this.tabMain.SelectedIndex) 
    { 
     Pen rectPen = new Pen(borderBrush, 1.0f); 
     r.Y -= 2; 
     r.X += 3; 
     r.Height -= 9; 
     r.Width -= 8; 
     e.Graphics.FillRectangle(BackBrush, r); 
     e.Graphics.DrawString(TabName, TabFont, ForeBrush, r, sf); 
     e.Graphics.DrawRectangle(rectPen, r); 
    } 
    else 
    { 
     Pen rectPen = new Pen(borderBrush, 1.0f); 
     r.Y -= 2; 
     r.Height -= 4; 
     r.Width -= 2; 
     e.Graphics.FillRectangle(BackBrush, r); 
     e.Graphics.DrawString(TabName, TabFont, ForeBrush, r, sf); 
     e.Graphics.DrawRectangle(rectPen, r); 
    } 
    //Dispose objects 
    sf.Dispose(); 

    if (e.Index == this.tabMain.SelectedIndex) 
    { 
     TabFont.Dispose(); 
     BackBrush.Dispose(); 
    } 
    else 
    { 
     BackBrush.Dispose(); 
     ForeBrush.Dispose(); 
    } 
} 

конечно «tabMain» относится к названию управления вкладки. Надеюсь, это поможет вам в том, что вы пытаетесь сделать ... возможно, немного странно, но код не так уж и сложный, и я думаю, что он выглядит немного чище ... плюс для этого я постарался установить свойства approprate для шрифта и размера элемента:

шрифт = Arial, 9PT, стиль = Жирный

ItemSize = 95, 25 ... высота является важной частью, до тех пор, как вы установите SizeMode = Normal

Смежные вопросы