30/09/2018, 17:55

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!?

vũ xuân quân viết 19:58 ngày 30/09/2018

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

hacked viết 19:57 ngày 30/09/2018

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.

Khiem Nguyen viết 20:07 ngày 30/09/2018

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

hacked viết 19:57 ngày 30/09/2018

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

vũ xuân quân viết 20:11 ngày 30/09/2018

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

Phạm Hoàng Tuấn viết 20:03 ngày 30/09/2018

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

hacked viết 20:10 ngày 30/09/2018

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

vũ xuân quân viết 20:11 ngày 30/09/2018

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

hacked viết 20:03 ngày 30/09/2018

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

Tuyendothanh viết 20:07 ngày 30/09/2018

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.

hacked viết 20:08 ngày 30/09/2018

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

Hai Doan viết 20:04 ngày 30/09/2018

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

hacked viết 20:05 ngày 30/09/2018

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á!

Hai Doan viết 19:58 ngày 30/09/2018

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);
    }
hacked viết 19:56 ngày 30/09/2018

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?

Hai Doan viết 19:57 ngày 30/09/2018

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);
            }
        }
    }
hacked viết 20:09 ngày 30/09/2018

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

hacked viết 19:59 ngày 30/09/2018

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

Hai Doan viết 20:10 ngày 30/09/2018

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

Bài liên quan
0