c# - 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 保持不变。
任何帮助将非常感激。谢谢
解决方案
推荐阅读
- python - 如何使用 Pandas 编写分区 Parquet 文件
- junit - 如何使用powermock在测试方法中设置类的私有成员变量
- android - kotlin 中的“单例”模式方法最好的方法
- angular6 - Angular 6:未定义警报
- windows - Windows Batch:将文件路径存储到变量不起作用
- c - 当前节点未重置为其引用的头节点
- terraform - 用于多个实例的 Terraform 供应商
- repast-simphony - 在 Repast Simphony 中制作圆柱形空间?
- python - 使用 DataFrame.lookup 获取列名是字符串子集的行
- javascript - 我可以为 Mapbox 使用光栅 jpg、png 图像吗