2014-02-13 2 views
3

Я хотел добавить кнопку X для каждой вкладки. DrawMode - OwnerDrawFixed. он отлично работает, если он оставлен вправо. Как только я разрешу RightToLeftLayout = true и RightToLeft = true, это выглядит не очень хорошо, потому что он все еще добавляет строку слева направо, а эта вкладка добавляется справа налево.tabcontrol OwnerDrawFixed справа налево в C#

Как сделать так, чтобы строка также была справа налево?

enter image description here

enter image description here

private void addCloseButton(object sender, DrawItemEventArgs e) 
{ 
    //This code will render a "x" mark at the end of the Tab caption. 
    e.Graphics.DrawString("x", e.Font, Brushes.Black, e.Bounds.Right - 15 , e.Bounds.Top +4); 
    e.Graphics.DrawString(this.tabControl1.TabPages[e.Index].Text, e.Font, Brushes.Black, e.Bounds.Left+4, e.Bounds.Top+4); 
    e.DrawFocusRectangle(); 

} 

private void actionClose(object sender, MouseEventArgs e) 
{ 
    //Looping through the controls. 
    for (int i = 0; i < this.tabControl1.TabPages.Count; i++) 
    { 
     Rectangle r = tabControl1.GetTabRect(i); 
     //Getting the position of the "x" mark. 
     Rectangle closeButton = new Rectangle(r.Right - 15, r.Top + 4, 12, 10); 
     if (closeButton.Contains(e.Location)) 
     { 
      if (MessageBox.Show("?האם אתה רוצה לסגור טאב זה", "אישור", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) 
      { 
       this.tabControl1.TabPages.RemoveAt(i); 
       break; 
      } 
     } 
    } 

} 
+4

Взгляните на этот ответ [Закрыть кнопку TabBage с свойством RightToLeft] (http://stackoverflow.com/a/34509304/4340666) – user4340666

ответ

0

Pass StringFormat с FormatFlags флагом, установленным в StringFormatFlags.DirectionRightToLeft к DrawString():

StringFormat drawFormat = new StringFormat(StringFormatFlags.DirectionRightToLeft); 

var bounds = new RectangleF(.. set actual bound rectangle for text...)  

e.Graphics.DrawString(this.tabControl1.TabPages[e.Index].Text, e.Font, Brushes.Black, bounds, drawFormat); 
+0

Я не знаю, что положить в var bounds = new RectangleF(). Если я поставил точку (0,0845,592), что 845 592 - это размер элемента управления tabcontrol, поэтому он сначала выходит из строя, и после этого он топчет на него. – user3305653

+0

попытайтесь передать e.Bounds сначала (границы заголовка вкладки), затем скорректируйте его, чтобы избежать совпадения текста с [X] – PashaPash

+0

. Я не могу добавить после заголовка e.Bounds, у меня есть Top или Right или Left и т. Д. У меня есть 4 поля, которые мне нужно добавить в новый RectangleF(), и я буду вовлечен. if i put: var bounds = new RectangleF (0, 0, e.Bounds.Top, e.Bounds.Right + 30); он не показывает мне строку. – user3305653

Смежные вопросы