Windows XPとWindows 7では、タブコントロールの奇妙な動作に直面しています。タブ上に配置されたXPテキストは折り返され、7ではありません。タブで問題は何ですか? Windowsフォームのカスタムタブコントロール
PS。英語以外の文字は
UPDATEをラップしている:これはここでカスタムタブコントロール
コードです:
protected override void OnPaint(PaintEventArgs e)
{
DrawControl(e.Graphics);
}
internal void DrawControl(Graphics g)
{
if (!Visible)
return;
Brush br = new SolidBrush(clr_cl_area);
Brush brTab = new SolidBrush(clr_client);
Rectangle TabControlArea = ClientRectangle;
Rectangle TabArea = DisplayRectangle;
g.FillRectangle(br, TabControlArea);
g.FillRectangle(brTab, TabArea);
br.Dispose();
brTab.Dispose();
for (int i = 0; i < TabCount; i++)
DrawTab(g, TabPages[i], i, false);
if (_mouseTabIndex != null && _mouseTabIndex != _mouseTabIndexSave && _mouseTabIndex != SelectedIndex)
DrawTab(g, TabPages[(int)_mouseTabIndex], (int)_mouseTabIndex, true);
_mouseTabIndexSave = _mouseTabIndex;
}
internal void DrawTab(Graphics g, TabPage tabPage, int nIndex, bool mouseOverTab)
{
var recBounds = GetTabRect(nIndex);
SetBounds(ref recBounds);
var pt = SetPointsForTabFill(recBounds);
DrawTabBounds(g, recBounds);
FillTabl(g, recBounds, pt, false);
DrawTabSeparators(g, recBounds, nIndex, 0 /*y-bottom*/);
if (SelectedIndex == nIndex)
{
DrawTabGradient(g, recBounds, pt, nIndex,0/*width*/,1/*height*/);
DrawTabSeparators(g, recBounds, nIndex, 1 /*y-bottom*/);
}
if (mouseOverTab)
DrawTabGradient(g, recBounds, pt, nIndex, -2/*width*/, 0/*height*/);
DrawText(g, recBounds, tabPage.Text);
}
private void DrawText(Graphics g, Rectangle recBounds, string text)
{
var strFormat = new StringFormat();
strFormat.Alignment = strFormat.LineAlignment = StringAlignment.Center;
g.TextRenderingHint =
System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
//var fnt = new Font(MsFonts.familyPTSans, 8F, FontStyle.Regular, GraphicsUnit.Point, (byte)204);
var fnt = new Font("Arial", 8.25F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(204)));
RectangleF tabTextArea = recBounds;
var br = new SolidBrush(clr_txt);
g.DrawString(text, fnt, br, tabTextArea, FormatString());
br.Dispose();
strFormat.Dispose();
fnt.Dispose();
}
標準のWinForms TabControlですか?そうではありませんか?あなたの質問に「カスタムコントロール」というタグを付けましたが、カスタムコントロールについては何も教えてくれませんでした。 –
あなた自身のコントロールであれば、 'TextRenderer'を' TextFormatFlags'を使って 'DrawText'に使うことができます。つまり、指定されたフォントの幅がワイドであるかどうかをチェックし、' WordEllipsis'または 'WordBreak'フラグ...だからあなたは同じ一般的な振る舞いをしています。 – Cipi
標準のTabControlは折り返されません。 –