PDA

View Full Version : ابجاد WindowsFormsControlLibrary و اضافه کردن خاصیت به propertis کنترل



saeedhushmand
جمعه 05 خرداد 1391, 16:53 عصر
من یک WindowsFormsControlLibrary1 ایجاد کردم
یک textbox در فرمم قرار دادم
حالا می خوام یک خاصیت به propertis اضافه کنم که وقتی کاربر روی textbox رفت رنگ داخل textbox عوض بشه و برنامه نویس بتونه این رنگ در propertis انتخاب کنه

فرید نجفلو
جمعه 05 خرداد 1391, 18:02 عصر
سلام

اینا رو به WindowsFormsControlLibrary1 اضافه کنید
(البته یادتون نره اون دو تا رویداد مربوط به تکست باکس رو هم تنظیم کنید)

private Color focusedBackColor = Color.Lime;
private Color lastBackColor;
public Color FocusedBackColor
{
get { return focusedBackColor; }
set { focusedBackColor = value; }
}
private void textBox1_Enter(object sender, EventArgs e)
{
lastBackColor = ((TextBox)sender).BackColor;
((TextBox)sender).BackColor = FocusedBackColor;
}
private void textBox1_Leave(object sender, EventArgs e)
{
((TextBox)sender).BackColor = lastBackColor;
}

Mahmoud.Afrad
جمعه 05 خرداد 1391, 18:15 عصر
class setBackColorOnEnter_TextBox : TextBox
{
private System.Drawing.Color oldColor = new System.Drawing.Color();
public System.Drawing.Color setBackColorOnEnter { get; set; }

protected override void OnEnter(EventArgs e)
{
oldColor = base.BackColor;
base.BackColor = setBackColorOnEnter;
}

protected override void OnLeave(EventArgs e)
{
base.BackColor = oldColor;
}
}

saeedhushmand
جمعه 05 خرداد 1391, 20:21 عصر
دوستان با تشکر از جوابتون یک سوال دیگه هم دارم
من می خوام توی propertis این textbox یک خاصیت ایجاد کنم (یک کمبوباکس در propertis که دو مقدار yes و no داشته باشه) اگه yes انتخاب شد تابع زیر در مورد اون textbox اجرا بشه اگه no انتخاب شد تابع اجرا نشه

تابع هم به صورت زیر می باشد



privatevoid ResolationControls(Control A)
{
Screen scrn = Screen.FromControl(this);
if (scrn == null)
{
scrn = Screen.PrimaryScreen;
}
int deskHeight = scrn.Bounds.Height;
int deskWidth = scrn.Bounds.Width;
int Width = deskWidth;
int Heigth = deskHeight;
int FormHeight = this.Size.Height;
int FormWidth = this.Size.Width;
int WidthFormNew = (FormWidth * deskWidth) / 1366;
int HeightFormNew = (FormHeight * deskHeight) / 768;
int WidthButton = A.Size.Width;
int HeightButton = A.Size.Height;
A.Size = newSize(WidthFormNew * WidthButton / FormWidth, HeightFormNew * HeightButton / FormHeight);
}

فرید نجفلو
جمعه 05 خرداد 1391, 20:34 عصر
دوست عزیز این مورد هم مثل مورد قبلی فقط باید نوع رو به جای Color از bool تعریف کنید
public bool CorrectResolation { get; set; }
حالا شما خصوصیت رو دارید ولی کجا یا با چه رویدی می خواین اون متد اجرا بشه دیگه من اطلاعی ندارم (به احتمال قریب یقین که در زمان طراحی نیست!)

if(CorrectResolation)
{
ResolationControls(TextBox1);
}

Mahmoud.Afrad
جمعه 05 خرداد 1391, 22:46 عصر
این تابع نمیتونه مفید باشه چون برای رزولوشن های بالاتر باعث افزایش سایز میشه و ممکنه باعث بشه کنترل ها روی هم قرار بگیرند مگر اینکه لوکیشن رو هم کنترل کنید. در ضمن این تابع فقط برای همین رزولوشن 1366*768 میتونه مفید باشه
اما چرا برای کنترل اندازه کنترلها از tablelayoutpanel استفاده نمیکنید. مثالش رو در همون تاپیکی که برای همین تابع زده بودید قبلا گذاشتم.

saeedhushmand
جمعه 05 خرداد 1391, 22:55 عصر
دوست عزیز ممنون از دقتی که کردی

ادامه تابع رو یادم رفته بود بذارم فکر اونم کرده بودم اینم ادامش

int LocationButtonX = A.Location.X;
int LocationButtonY = A.Location.Y;
A.Location = new Point(WidthFormNew * LocationButtonX / FormWidth, HeightFormNew * LocationButtonY / FormHeight);

saeedhushmand
جمعه 05 خرداد 1391, 23:06 عصر
دوست عزیز من تاپیک تو ندیدم الان رفتم دیدم ، همچین چیزی رو نمی دونستم با این کار دیگه نیازی به کدی برای تغییر سایز کنترل ها نداریم و فقط کد تغییر اندازه فرم کافی
مرسی از نظر مفیدت...