PDA

View Full Version : متن عمودی درLable؟؟



Mahbadgroup
سه شنبه 23 مرداد 1386, 16:49 عصر
با سلام
می خواستم بدونم چطوری می توانم یک متن را به صورت عمودی در یک Label تایپ کنم
یعنی متن من در کنار فرم به صورت عمودی گذاشته شود؟؟؟؟

PC2st
سه شنبه 23 مرداد 1386, 17:38 عصر
میشه رویداد Paint از کنترل Label رو خودتون پیاده سازی کنید و توسط شیئ e.Graphic متن رو بصورت عمودی ترسیم کنید.

Mahbadgroup
سه شنبه 23 مرداد 1386, 18:14 عصر
کسی این کار رو انجام داده؟؟ لطفا اگه انجام دادید بیشتر راهنمایی کنید..

PC2st
سه شنبه 23 مرداد 1386, 19:49 عصر
کسی این کار رو انجام داده؟؟ لطفا اگه انجام دادید بیشتر راهنمایی کنید..

یک کلاس بنام VerticalLabel از کنترل Label به ارث رساندم:



class VerticalLabel : Label
{
public VerticalLabel()
{
this.SetStyle(ControlStyles.UserPaint, true);
base.AutoSize = false;
this._AutoSize = true;
}

bool _AutoSize;
[System.ComponentModel.DefaultValue(true)]
public new bool AutoSize
{
get
{
return this._AutoSize;
}
set
{
this._AutoSize = value;
}
}

protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
SizeF misize = g.MeasureString(this.Text, this.Font);
g.RotateTransform(-90);
using (SolidBrush brush = new SolidBrush(this.ForeColor))
g.DrawString(this.Text, this.Font, brush, -misize.Width, 0);
g.ResetTransform();
}

protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
this.DoAutoSize();
}

protected override void OnFontChanged(EventArgs e)
{
base.OnFontChanged(e);
this.DoAutoSize();
}

protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
this.DoAutoSize();
}

private void DoAutoSize()
{
if (this.AutoSize)
{
SizeF misize = this.CreateGraphics().MeasureString(this.Text, this.Font);
this.Width = (int)misize.Height;
this.Height = (int)misize.Width;
}
}
}

نکته حائز اهمیت اینه که عملیات AutoSize کردن (همون متد DoAutoSize) رو درون متد OnPaint ننوشتم، و ممکنه دوستان ایراد بگیرند که چرا صدا زدن یک متد رو سه بار تکرار کردم، ولی فقط بخاطر این اینکار رو انجام دادم که دستورات داخل متد OnPaint کمتر باشه تا عملیات ترسیم متن، سریعتر صورت بگیره.

برای استفاده از کلاس فوق، کافیه که اون رو درون کدهات اضافه کنی و یکبار برنامه ات رو با کلید F5 بسازی و دفعه بعد این کنترل خودش در قسمت Toolbox قرار میگیره و از اونجا، این کنترل رو به فرمت اضافه کن.

تعریف نباشه، کنترل خوبی از آب در اومده!... :لبخند: :متفکر: :لبخندساده:

vaheeed
دوشنبه 04 دی 1391, 14:50 عصر
کسی میدونه این کد رو دقیقا باید کجا گذاشت اخه من که هر جا گذاشتم و برنامه رو اجرا کردم خبری نشد تو تول باکسم!!!!!