Làm sao tạo được TabControl như trình duyệt Web (C#)?

Mình muốn tạo TabControl như các trình duyệt Web:

Có nút để thêm Tab mới và có nút để đóng Tab!?

1 Like

chưa hiểu ý em. Muốn làm trên web hay là trên application

1 Like

Dạ em muốn làm ứng dụng WinForm C#, nó có các tab tương tự như Trình duyệt Web (Chrome, FireFox…) tức là có nút để mở tab mới, và có nút để close tab.

ban thử tham khảo link sau

http://www.dotnetperls.com/tabcontrol

ngoài ra để đẹp hơn bạn có thể sử dụng Telerik hoặc DevExpress

1 Like

Cám ơn bạn! Mình muốn có thêm Close Tab và Add New Tab thì làm thế nào ạ?

cái này thì WinForm không làm được.

1 Like

Add tab và remove tab bạn xem link này thử xem :
Muốn remove tab, bạn thử cần thêm 1 button vào mỗi tab, bắt sự kiện click rồi xóa tab đang chưa button đó.
https://msdn.microsoft.com/en-us/library/aa984280(v=vs.71).aspx

2 Likes

Thế nếu làm trên WPF thì làm thế nào anh?

anh không có làm bên .net. Nên không giúp gì được cho em hết

2 Likes

Không sao, cám ơn anh!

1 Like

Bạn phải custom tab control để cài đặt lại các hàm draw sau đó dùng đối tượng graph vẽ theo ý mình.

1 Like

Vẽ ak?? Sao khó thế? Vẽ thế nào anh?

Close và add tab, bạn phải làm trong code behind thay vì xaml.

1 Like

Cám ơn bạn nhiều nha, cơ mà mình chưa hiểu lắm, bạn hướng dẫn mình luôn nhá! :heart_eyes:

Vidu , bạn click button để add tabitem, click chuột phải để đóng tab đang mở. Nếu muốn linh hoạt hơn thì bind ItemsSource của TabControl cho 1 ObservableCollection nhé!
Xaml :

 <Grid x:Name="MediaGrid">
        <TabControl Name="MyTabControl" Height="600" Width="900" Background="Tomato"/>
        <Button Height="60" Width="100" Name="Addtabbt" Content="Add tab" Click="Addtabbt_Click" VerticalAlignment="Top" HorizontalAlignment="Left" Background="Green"/>
<Grid>

Code Behind

 private void Addtabbt_Click(object sender, RoutedEventArgs e)
        {
            var tabitem  = new TabItem();
            tabitem.Header = "hello";
            tabitem.MouseRightButtonDown += tabitem_MouseRightButtonDown;
            this.MyTabControl.Items.Add(tabitem);
        }

    void tabitem_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        var tabItemClose = sender as TabItem;
        this.MyTabControl.Items.Remove(tabItemClose);
    }
1 Like

Cám ơn anh nhiều nha… Anh có cách nào làm cho nút Close hiện ở trên tab Title không? :joy:

note : Click vào dấu + để thêm tab nhé.
In Xaml :

<Grid x:Name="MediaGrid">
       <TabControl Name="MyTabControl" Height="600" Width="900" Background="Tomato">
            <TabItem Header="+" FontSize="20" FontWeight="Bold" Name="AddTab" PreviewMouseDown="AddTab_PreviewMouseDown"/>
        </TabControl>
</Grid>

In Code Behind :

  int _tabIndex = 0;

        private void AddTab_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            _tabIndex++;
            var tabitem = new TabItem();
            // tabitem.TabIndex = _tabIndex;
            Grid ItemContainer = new Grid();
            ItemContainer.Height = 20;
            ItemContainer.Width = 60;
            ItemContainer.Name = "Tab" + _tabIndex.ToString();
            var tabLable = new TextBlock();
            tabLable.Height = 20;
            tabLable.Width = 40;
            tabLable.Text = "Tab" + _tabIndex.ToString();
            tabLable.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
            ItemContainer.Children.Add(tabLable);

            var closebt = new Button();
            closebt.Height = 20;
            closebt.Width = 20;
            closebt.Content = "X";
            closebt.Background = Brushes.Green;
            closebt.HorizontalAlignment = System.Windows.HorizontalAlignment.Right;
            closebt.PreviewMouseDown += closebt_PreviewMouseDown;
            ItemContainer.Children.Add(closebt);

            tabitem.Header = ItemContainer;

            this.MyTabControl.Items.Add(tabitem);
        }
      

        void closebt_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            var selectedTab = FindParentUserControl.FindTabItem(sender as Button) as TabItem;
            this.MyTabControl.Items.Remove(selectedTab);
        } 

E tạo 1 class moi như sau :

 // To find Parent control of a selected control.
    public static class FindParentUserControl
    {
        public static TabItem FindTabItem(DependencyObject child)
        {
            DependencyObject parent = VisualTreeHelper.GetParent(child);

            //CHeck if this is the end of the tree
            if (parent == null) return null;

            TabItem parentWindow = parent as TabItem;

            if (parentWindow != null)
            {
                return parentWindow;
            }
            else
            {
                return FindTabItem(parent);
            }
        }
    }
1 Like

Cám ơn anh nhiều nha. Khổ tâm mãi… :blush:

Thế làm trên WinForm C# có được không anh?

WinForm chắc chắn là đc, a ko làm Winform nên ko rỏ cách làm thế nào.
Ebook C# và WPF cho bạn nào học WPF.
C# WPF Ebook : Tiếng việt
C# + C# WPF : Tiếng Anh

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?