首页 > 解决方案 > TabControl Drawitem 不关闭图像

问题描述

我的表单中有一个选项卡控件,我的选项卡上也有关闭按钮(图像)。但是当我改变语言时,它会停止绘制关闭按钮图像。

private void arabicToolStripMenuItem_Click(object sender, EventArgs e)
    {
        switch(Thread.CurrentThread.CurrentUICulture.IetfLanguageTag)
        {
            case "ar-AE": Thread.CurrentThread.CurrentUICulture =
                    new System.Globalization.CultureInfo("en-US");
                break;

            case "en-US": Thread.CurrentThread.CurrentUICulture =
                    new System.Globalization.CultureInfo("ar-AE");
                break;

            //default: Thread.CurrentThread.CurrentUICulture =
            //    new System.Globalization.CultureInfo("ar-AE");
            //    break;
        }

        this.Controls.Clear();
        InitializeComponent();
    }

上面的代码用于更改语言。

private void MyTasheelMain_Load(object sender, EventArgs e)
    {
        this.tabControl1.Padding = new Point(12, 4);
        this.tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;

        this.tabControl1.DrawItem += tabControl1_DrawItem;
        this.tabControl1.MouseDown += tabControl1_MouseDown;
        this.tabControl1.Selecting += tabControl1_Selecting;
        // this.tabControl1.HandleCreated += tabControl1_HandleCreated;   
    }
private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
    {
        var CloseImage = Properties.Resources.Close;
        var tabRect = this.tabControl1.GetTabRect(e.Index);
        tabRect.Inflate(-2, -2);
        var imageRect = new Rectangle(tabRect.Right - CloseImage.Width,
                                 tabRect.Top + (tabRect.Height - CloseImage.Height) / 2,
                                 CloseImage.Width,
                                 CloseImage.Height);

        var sf = new StringFormat(StringFormat.GenericDefault);
        if (this.tabControl1.RightToLeft == System.Windows.Forms.RightToLeft.Yes &&
            this.tabControl1.RightToLeftLayout == true)
        {
            tabRect = GetRTLCoordinates(this.tabControl1.ClientRectangle, tabRect);
            imageRect = GetRTLCoordinates(this.tabControl1.ClientRectangle, imageRect);
            sf.FormatFlags |= StringFormatFlags.DirectionRightToLeft;
        }

        e.Graphics.DrawString(this.tabControl1.TabPages[e.Index].Text,
                              this.Font, Brushes.Black, tabRect, sf);
        e.Graphics.DrawImage(CloseImage, imageRect.Location);
    }

private void tabControl1_MouseDown(object sender, MouseEventArgs e)
    {
        for (var i = 0; i < this.tabControl1.TabPages.Count; i++)
        {
            var tabRect = this.tabControl1.GetTabRect(i);
            tabRect.Inflate(-2, -2);
            var closeImage = Properties.Resources.Close;
            var imageRect = new Rectangle(
                (tabRect.Right - closeImage.Width),
                tabRect.Top + (tabRect.Height - closeImage.Height) / 2,
                closeImage.Width,
                closeImage.Height);
            if (imageRect.Contains(e.Location))
            {
                this.tabControl1.TabPages.RemoveAt(i);
                break;
            }
        }
    }

public static Rectangle GetRTLCoordinates(Rectangle container, Rectangle drawRectangle)
    {
        return new Rectangle(
            container.Width - drawRectangle.Width - drawRectangle.X,
            drawRectangle.Y,
            drawRectangle.Width,
            drawRectangle.Height);
    }

第一次绘制关闭按钮,但是当我更改语言时它不显示。我所知道的是,每次更改语言时我都需要调用此 Drawitem 事件,因为更改语言时会清除控件然后再次对其进行初始化,但 tabcontrol 保持不变。

任何帮助将非常感激。谢谢

标签: c#winformstabcontrolmultilingualclose-button

解决方案


推荐阅读