Выделить (X) закрыть на вкладке tabPage c#

346
16 сентября 2017, 22:05

Здравствуйте, в самом конструкторе Visual Studio, в открытом окне когда наводишь курсор на вкладку (X) закрыть, данный крестик выделяется, крестик получился,а вот выделение крестика никак не получается. Спасибо. namespace WindowsFormsApplication31 { public partial class Form1 : Form { public Form1() { InitializeComponent(); tabPage1.Parent = null; tabPage2.Parent = null; tabPage3.Parent = null; tabPage4.Parent = null; tabPage5.Parent = null; tabPage6.Parent = null; tabControlTablica.DrawMode = TabDrawMode.OwnerDrawFixed;

        tabControlTablica.SizeMode = TabSizeMode.Fixed;// Чтобы изменить вкладку SizeMode должно быть исправлено
        Size tab_size = tabControlTablica.ItemSize; // Размер вкладок
        tab_size.Width = 118; //ширина вкладки
        tab_size.Height += 40; //высота вкладки
        tabControlTablica.ItemSize = tab_size;
        //Событие для вставки contextMenuStrip в tabControl
        // this.tabControlTablica.MouseClick += new MouseEventHandler(tabControlTablica_MouseClick);
    }
    private int Xwid = 6;//координаты ширины по диагонали крестика
    private const int tab_margin = 3;//координаты по высоте крестика
    private void tabControlTablica_DrawItem(object sender, DrawItemEventArgs e)
    {
        Brush text_brush, //Текст во вкладке
            box_brush;   //Рамка вокруг крестика
        Pen box_pen;
        // Рисуем в tabControlTablica (tabPage) рамку
        // Потом будем использовать в событии MouseDown.
        Rectangle tab_rect = tabControlTablica.GetTabRect(e.Index);
        // Рисуем фон
        // Подбираем соответствующие кисти и перья
        //Вкладка открыта фон изменён
        if (e.State == DrawItemState.Selected)
        {
            e.Graphics.FillRectangle(Brushes.White, tab_rect);
            e.DrawFocusRectangle();
            text_brush = Brushes.Black;
            box_brush = Brushes.Black;
            box_pen = Pens.Red;  //Цвет крестика при включенной кнопке tabPage
        }
        else
        {
            e.Graphics.FillRectangle(Brushes.LightGray, tab_rect);
            text_brush = Brushes.Gray;
            box_brush = Brushes.Black;
            box_pen = Pens.Gray;  //Цвет крестика при выключенной кнопке tabPage
        }
        // Allow room for margins.
        Rectangle layout_rect = new Rectangle(
            tab_rect.Left + tab_margin,
            tab_rect.Y + 2 + tab_margin,  //Координаты смещения крестика
            tab_rect.Width - 1 * 5 - tab_margin, //Координаты смещения крестика
            tab_rect.Height - 2 * tab_margin);
        using (StringFormat string_format = new StringFormat())
        {
            // Цифры рисуем во вкладке в нижнем правом углу 
            using (Font small_font = new Font(this.Font.FontFamily, 6, FontStyle.Regular))
            {
                string_format.Alignment = StringAlignment.Far;
                string_format.LineAlignment = StringAlignment.Far;
                e.Graphics.DrawString(
                    e.Index.ToString(),
                    small_font,
                    text_brush,
                    layout_rect,
                    string_format);
            }
            // Рисуем текст во вкладка tabControlTablica
            Font font;
            Brush br = Brushes.Black;
            StringFormat strF = new StringFormat(StringFormat.GenericDefault);
            if (tabControlTablica.SelectedTab == tabControlTablica.TabPages[e.Index])
            {
                //Формат текста во вкладках tabControl
                //e.Graphics.DrawImage(closeImageAct, imageRec);
                string_format.Alignment = StringAlignment.Near;
                string_format.LineAlignment = StringAlignment.Near;
                font = new Font("Microsoft Sans Serif", 8, FontStyle.Bold);
                e.Graphics.DrawString(tabControlTablica.TabPages[e.Index].Text,
                    font, text_brush,
                    layout_rect,
                    string_format);
            }
            else
            {
                //Формат текста во вкладках tabControl
                string_format.Alignment = StringAlignment.Near;
                string_format.LineAlignment = StringAlignment.Near;
                font = new Font("Microsoft Sans Serif", 8, FontStyle.Regular);
                e.Graphics.DrawString(tabControlTablica.TabPages[e.Index].Text,
                   font,
                    text_brush,
                    layout_rect,
                    string_format);
            }
            // //Рисуем рамку вокруг крестика
            //Rectangle rect = tabControlTablica.GetTabRect(e.Index);
            //e.Graphics.FillRectangle(box_brush,
            //    layout_rect.Right - Xwid,
            //    layout_rect.Top,
            //    Xwid,
            //    Xwid);
            //e.Graphics.DrawRectangle(box_pen,
            //    layout_rect.Right - Xwid,
            //    layout_rect.Top,
            //    Xwid,
            //    Xwid);
            //Рисуем крестик
            e.Graphics.DrawLine(box_pen,
                layout_rect.Right - Xwid,
                layout_rect.Top,
                layout_rect.Right,
                layout_rect.Top + Xwid);
            e.Graphics.DrawLine(box_pen,
                layout_rect.Right - Xwid,
                layout_rect.Top + Xwid,
                layout_rect.Right,
                layout_rect.Top);
        }
    }
    private void tabControlTablica_MouseDown(object sender, MouseEventArgs e)
    {
        // При нажатии закрыть вкладку
        for (int i = 0; i < tabControlTablica.TabPages.Count; i++)
        {
            Rectangle tab_rect = tabControlTablica.GetTabRect(i);
            RectangleF rect = new RectangleF(
                tab_rect.Left - 2 + tab_margin,
                tab_rect.Y + 2 + tab_margin,
                tab_rect.Width - 2 * tab_margin,
                tab_rect.Height - 2 * tab_margin);
            if (e.X >= rect.Right - Xwid &&
                e.X <= rect.Right &&
                e.Y >= rect.Top - 1 &&
                e.Y <= rect.Top + Xwid)
            {
                tabControlTablica.TabPages.Remove(tabControlTablica.TabPages[i]);
                tabControlTablica.SelectedIndex = tabControlTablica.TabPages.Count - 1;
            }
        }
    }
    private void button1_Click(object sender, EventArgs e)
    {
        if (tabControlTablica.TabPages.IndexOf(tabPage1) < 0)
        {
            tabControlTablica.Controls.Add(tabPage1);
        }
        if (button1.Enabled == true)
        {
            button1.Enabled = false;
        }
    }
    private void button2_Click(object sender, EventArgs e)
    {
        if (tabControlTablica.TabPages.IndexOf(tabPage2) < 0)
        {
            tabControlTablica.Controls.Add(tabPage2);
        }
        if (button2.Enabled == true)
        {
            button2.Enabled = false;
        }
    }
    private void button3_Click(object sender, EventArgs e)
    {
        if (tabControlTablica.TabPages.IndexOf(tabPage3) < 0)
        {
            tabControlTablica.Controls.Add(tabPage3);
        }
        if (button3.Enabled == true)
        {
            button3.Enabled = false;
        }
    }
    private void button4_Click(object sender, EventArgs e)
    {
        if (tabControlTablica.TabPages.IndexOf(tabPage4) < 0)
        {
            tabControlTablica.Controls.Add(tabPage4);
        }
        if (button4.Enabled == true)
        {
            button4.Enabled = false;
        }
    }
    private void button5_Click(object sender, EventArgs e)
    {
        if (tabControlTablica.TabPages.IndexOf(tabPage5) < 0)
        {
            tabControlTablica.Controls.Add(tabPage5);
        }
        if (button5.Enabled == true)
        {
            button5.Enabled = false;
        }
    }

    private void button6_Click(object sender, EventArgs e)
    {
        if (tabControlTablica.TabPages.IndexOf(tabPage6) < 0)
        {
            tabControlTablica.Controls.Add(tabPage6);
        }
        if (button6.Enabled == true)
        {
            button6.Enabled = false;
        }
    }
    private void tabPage1_ParentChanged(object sender, EventArgs e)
    {
        if (button1.Enabled == false)
        {
            button1.Enabled = true;
        }

    }
    private void tabPage2_ParentChanged(object sender, EventArgs e)
    {
        if (button2.Enabled == false)
        {
            button2.Enabled = true;
        }
    }
    private void tabPage3_ParentChanged(object sender, EventArgs e)
    {
        if (button3.Enabled == false)
        {
            button3.Enabled = true;
        }
    }
    private void tabPage4_ParentChanged(object sender, EventArgs e)
    {
        if (button4.Enabled == false)
        {
            button4.Enabled = true;
        }
    }
    private void tabPage5_ParentChanged(object sender, EventArgs e)
    {
        if (button5.Enabled == false)
        {
            button5.Enabled = true;
        }
    }
    private void tabPage6_ParentChanged(object sender, EventArgs e)
    {
        if (button6.Enabled == false)
        {
            button6.Enabled = true;
        }
    }

READ ALSO
Marshal.GetExceptionPointers и WPF-овский DispatcherUnhandledException

Marshal.GetExceptionPointers и WPF-овский DispatcherUnhandledException

Доброго времени сутокЕсть WPF-приложение + дампер(MiniDumpWriteDump)

172
Быстрое преобразование ID3D11Texture2D в management Bitmap

Быстрое преобразование ID3D11Texture2D в management Bitmap

Использую данный код: http://wwwcleoag

157
Вывести на экран числа [требует правки]

Вывести на экран числа [требует правки]

При помощи цикла вывести числа след образом

288