Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/23: Рейтинг темы: голосов - 23, средняя оценка - 4.91
148 / 116 / 10
Регистрация: 12.09.2011
Сообщений: 785
1

Кнопка закрытия вкладки TabControl

08.02.2012, 18:04. Показов 4403. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем!

Подскажите, может кто сталкивался... Очень нужно разместить в своей программе на вкладках TabControl как бы кнопочку закрытия вкладки, как у браузеров. Возможно ли это?

Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2012, 18:04
Ответы с готовыми решениями:

Скрыть вкладки в TabControl
Как можно программно у TabControl создавать или скрывать (на подобие команды Visible) TabPages......

Программно добавить вкладки в TabControl
Приветствую всех еще раз. На форме расположен TabControl. подскажите, пожалуйста, Уважаемые...

Проверка выделенной вкладки в TabControl
Доброго времени суток. Есть такой вопрос, почему данный код тупо не работает? If...

Как вычислить координаты вкладки в TabControl
Как вычислить координаты вкладки(не страницы) в TabContro'e, например, второй по счету(см....

8
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 3
07.08.2012, 10:58 2
Можно, но при помощи бубна
У tabcontrola свойство DrawMode меняешь на OwnerDrawFixed

ну а далее обрабатываешь прорисовку, примерно так:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Private Sub TabOpenForms_DrawItem(ByVal sender As Object, ByVal e As system.Windows.Forms.DrawItemEventArgs) Handles TabOpenForms.DrawItem
        Try
            Dim SelImg As Image = My.Resources.editdeleteGrey
            If ActiveClose = True Then
                SelImg = My.Resources.editdelete
            End If
 
            Dim IconImg As Image = My.Resources.FileAdd
            Dim r As Rectangle = e.Bounds
            r = Me.TabOpenForms.GetTabRect(e.Index)
            r.Offset(2, 2)
            Dim sf As New StringFormat
            'sf.Alignment = StringAlignment.Center
            sf.LineAlignment = StringAlignment.Center
 
            Dim f As Font = Me.Font
            Dim title As String = Me.TabOpenForms.TabPages(e.Index).Text
 
            Dim myTabRect As Rectangle = TabOpenForms.GetTabRect(e.Index)
 
            If e.Index <> Me.TabOpenForms.SelectedIndex Then
                e.Graphics.FillRectangle(Brushes.DarkGray, myTabRect)
                'e.Graphics.DrawImage(img, New Point(IconImg.Width + r.X + (Me.TabOpenForms.GetTabRect(e.Index).Width - _imageLocation.X + 3), r.Y + 2))
                Dim TitleBrush As Brush = New SolidBrush(Color.White)
                e.Graphics.DrawString(title, f, TitleBrush, New PointF(8 + r.X, r.Y + r.Height / 2), sf)
 
            Else
                e.Graphics.FillRectangle(Brushes.White, myTabRect)
                e.Graphics.DrawImage(SelImg, New Point(IconImg.Width + r.X + (Me.TabOpenForms.GetTabRect(e.Index).Width - _imageLocation.X + 3), r.Y))
                Dim TitleBrush As Brush = New SolidBrush(Color.Blue)
                e.Graphics.DrawString(title, f, TitleBrush, New PointF(8 + r.X, r.Y + r.Height / 2), sf)
            End If
            'e.Graphics.DrawImage(IconImg, New Point((Me.TabOpenForms.GetTabRect(e.Index).Left + 4), 4))
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
 
 Private Sub TabOpenForms_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TabOpenForms.MouseClick
        Dim tc As TabControl = CType(sender, TabControl)
        Dim p As Point = e.Location
        Dim _tabWidth As Integer
 
        _tabWidth = Me.TabOpenForms.GetTabRect(tc.SelectedIndex).Width - (_imgHitArea.X)
        Dim r As Rectangle = Me.TabOpenForms.GetTabRect(tc.SelectedIndex)
        r.Offset(_tabWidth + 10, _imgHitArea.Y)
        r.Width = 16
        r.Height = 16
        If r.Contains(p) Then
            Dim TabP As TabPage = DirectCast(tc.TabPages.Item(tc.SelectedIndex), TabPage)
            Dim T As Form = Nothing
            For i = 0 To Me.MdiChildren.Length - 1
                If Me.MdiChildren(i).Name = TabP.Name Then
                    T = Me.MdiChildren(i)
                    i = Me.MdiChildren.Length - 1
                End If
            Next
            If Not (T Is Nothing) Then
                T.Close()
            End If
            tc.TabPages.Remove(TabP)
        End If
    End Sub
 
 Private Sub TabOpenForms_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TabOpenForms.MouseMove
        Dim tc As TabControl = CType(sender, TabControl)
        Dim p As Point = e.Location
        Dim _tabWidth As Integer
        _tabWidth = Me.TabOpenForms.GetTabRect(tc.SelectedIndex).Width - (_imgHitArea.X)
        Dim r As Rectangle = Me.TabOpenForms.GetTabRect(tc.SelectedIndex)
        r.Offset(_tabWidth + 10, _imgHitArea.Y)
        r.Width = 16
        r.Height = 16
        If r.Contains(p) Then
            Dim TabP As TabPage = DirectCast(tc.TabPages.Item(tc.SelectedIndex), TabPage)
            tc.Cursor = Cursors.Hand
            If ActiveClose = False Then
                ActiveClose = True
                tc.Refresh()
            End If
        Else
            tc.Cursor = Cursors.Arrow
            If ActiveClose = True Then
                ActiveClose = False
                tc.Refresh()
            End If
        End If
    End Sub
могу скинуть исходник
0
1485 / 580 / 106
Регистрация: 26.03.2012
Сообщений: 1,028
07.08.2012, 11:26 3
Упрощенный код без бубна
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Public Class Form1
 
    Private Sub TabControl1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles TabControl1.SelectedIndexChanged
        Call AddPage()
    End Sub
 
    Private Sub AddPage()
        Dim Page As TabPage
        If TabControl1.SelectedIndex = TabControl1.TabPages.Count - 1 Then
            Page = TabControl1.TabPages(TabControl1.TabPages.Count - 1)
            TabControl1.TabPages(TabControl1.TabPages.Count - 1).Text = "ТавPage" & TabControl1.SelectedIndex
            TabControl1.TabPages.Add(New TabPage)
            TabControl1.TabPages(TabControl1.TabPages.Count - 1).Text = "Еще…"
        End If
    End Sub
 
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Call AddPage()
    End Sub
 
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim I As Integer = TabControl1.SelectedIndex
        TabControl1.TabPages.RemoveAt(I)
        If I > 0 Then
            TabControl1.SelectedIndex = I - 1
        End If
    End Sub
 
End Class
Вложения
Тип файла: zip WindowsApplication1.zip (79.5 Кб, 119 просмотров)
1
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 3
07.08.2012, 11:34 4
ну в твоем варианте просто управление вкладками, а в моем можно вставить любой рисунок на вкладку, типо кнопочки закрытия, и обрабатывается имено ее нажатие
Миниатюры
Кнопка закрытия вкладки TabControl   Кнопка закрытия вкладки TabControl  
0
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 3
07.08.2012, 11:36 5
и он же явно спрашивает кнопка закрытия вкладке как у браузера, а не просто кнопка закрытия вкладок
0
1 / 1 / 0
Регистрация: 21.08.2012
Сообщений: 18
21.08.2012, 12:18 6
DJhohol
как то не очень понятен приведёный вами код , можете пояснить его коментариями или выложить пример вашего кода в виде исходника ?
1
0 / 0 / 0
Регистрация: 27.12.2016
Сообщений: 10
27.01.2017, 19:29 7
DJhohol,
Простите, что отвлекаю. Но, приложение аналогичное Вашему, я разрабатываю на VB.net 2015 для работы. Много вкладок различного назначения и содержания. Но, к сожалению, с графикой в вкладках TabControl ничего не получается. Все, что нашел на других языках. По возможности прошу Вас сбросить пример кода на "мыло". Заранее благодарен snachinov@ukr.net
0
1504 / 1052 / 146
Регистрация: 01.10.2009
Сообщений: 3,537
Записей в блоге: 1
27.01.2017, 20:09 8
nachinov, а Вы дату темы видели? И с правилами форму ознакомились?
0
0 / 0 / 0
Регистрация: 27.12.2016
Сообщений: 10
29.01.2017, 12:02 9
XIST,
Простите, если Вас что-то в запросе обидело. А вы можете что-то конкретное сказать или дать ссылку на примеры размещения кнопки закрыть вкладку и изменения внешнего вида панелей TabControl на языке VB.net 2015. Спасибо
0
29.01.2017, 12:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2017, 12:02
Помогаю со студенческими работами здесь

Расположить Panel строго по центру вкладки tabcontrol
Всем привет! Задача такая. На форме есть tabcontrol со свойством Anchor (Top, Bottom, Left,...

Активность кнопки в зависимости от выбранной вкладки в TabControl
возникло такие 2 вопроса: 1-е - на форме есть клавиша и табконтрол (с двумя вкладками), нужно...

Как вернуть компоненты с удаленной вкладки TabControl?
Друзья, случилась небольшая беда у меня, прошу помощи. Как вернуть компоненты (textbox и combobox)...

Содержимое TabControl не обновляется пока не перебраны все вкладки
Здравствуйте! Программирую на Visual Basic .Net Дело в следующем: Есть форма, на ней кнопка и...

Как программно скрыть или отобразить вкладки в TabControl
добавил TabControl, на нем пару вкладок, на первой вкладке ПрогрессБар, при запуске программы...

Как программно скрыть или отобразить вкладки в TabControl
Друзья, появилась еще одна задачка! Как в visual basic скрыть отобразить одну из вкладок...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru