Witam wszystkich.
Przeglądałem to forum ( i nie tylko ) i rozwiązania nie znalazłem.
Problem pojawił się taki, że chciałem ustawić sobie tab control w poziomie z przyciskami po lewej stronie, które miały by być
w poziomie. Z tym ostatnim sprawa wydała się najbardziej skomplikowana, bo okazała się że trzeba napisać własną metodę, obsługującą zdarzenie DrawItem, bo przyciski można "ustawić" jako "poziome" manipulując ich rozmiarami, ale sam tekst wyświetla się pionowo zamiast poziomo...
grzebałem pytałem wujka google i oto co znalazłem:
czyli, żeby ustawić:
Alignment na left
SizeMode na fixed
jeśli dobrze zrozumiałem punkt czwarty, to że za pomocą wielkości przycisków mogę je ustawić "poziomo"
DrawMode na OwnerDrawFixed i
gotowy kod na obsługę zdarzenia i.... nie działa... oto fragment moich wypcin
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
//...
//...
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
label4.Text = nazwa_roboczej_bazy;
}
//.......
//.......
//.......
// przyciski, okna i moje funkcje i wklejona żywcem metoda z msdna ( link macie wyżej ):
//.......
//.......
private void tabControl1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
{
Graphics g = e.Graphics;
Brush _textBrush;
// Get the item from the collection.
TabPage _tabPage = tabControl1.TabPages[e.Index];
// Get the real bounds for the tab rectangle.
Rectangle _tabBounds = tabControl1.GetTabRect(e.Index);
if (e.State == DrawItemState.Selected)
{
// Draw a different background color, and don't paint a focus rectangle.
_textBrush = new SolidBrush(Color.Red);
g.FillRectangle(Brushes.Gray, e.Bounds);
}
else
{
_textBrush = new System.Drawing.SolidBrush(e.ForeColor);
e.DrawBackground();
}
// Use our own font.
Font _tabFont = new Font("Arial", (float)10.0, FontStyle.Bold, GraphicsUnit.Pixel);
// Draw string. Center the text.
StringFormat _stringFlags = new StringFormat();
_stringFlags.Alignment = StringAlignment.Center;
_stringFlags.LineAlignment = StringAlignment.Center;
g.DrawString(_tabPage.Text, _tabFont, _textBrush, _tabBounds, new StringFormat(_stringFlags));
MessageBox.Show("dlaczego nie ");
e.DrawBackground();
}
}
}
no i nie działa... sprawdzałem w tabControl1 wartość name się zgadza ( bo mam dwie tabcontrol ).
Dla pewności założyłem inny projekt i znów ze stron msdna chciałem wrzucić gotowe przykłady "przerabianych" kontrolek i nic.
Wiem, że kod metody tabControl1_DrawItem też nie stanowi problemu, bo w momencie kiedy cały ustawiłem jako komentarz i wstawiłem message boxa z komunikatem i pojawiał się mój tabcontrol żaden komunikat się nie pojawiał.... czyli o ile dobrze rozumiem metoda tabControl1_DrawItem po prostu nie została ani razu wywołana ... czego tam nie wpisze i tak program po nią nie sięga...
Nie czytałem na ten temat, ale po nazwie wnioskuje że zdarzenie DrawItem ma miejsce kiedy tabcontrol jest rysowana...
Na koniec przepraszam za niefachowy język, mam niewielkie amatorskie doświadczenie z programowaniem. Liczę na wyrozumiałość i pomoc.