PDA

View Full Version : یک TextBox سفارشی؟



mrsalam
یک شنبه 05 اردیبهشت 1389, 14:23 عصر
سلام بچه ها
من داشتم برای پروژه هام یک Text Box سفارشی با UserControl درست می کردم .
در این صورت پروپرتیهای TextBox را حتما باید بصورت Publicایجاد می کردم و کلی دردسر داشت تا اینکه دیدم یکی از دوستان (آقای عظام نژاد عزیز) برای کارشون یک TextBox سفارشی طراحی کردن که تمام پراپرتیهای TextBox اولیه را داشت ولی هرچی سعی کردم موفق نشدم که بدونم ایشون چطور درست کردن.
به نظر شما چطور میشه همچین کنترل های سفارشی استاندارد داشت که خاصیت های اصلی آنها هم حفظ بشه؟
اگر ممکنه مثال بزنید...

s.khoshfekran
یک شنبه 05 اردیبهشت 1389, 14:26 عصر
usercontrol ات باید از Textbox ارث بری کنه!!

mrsalam
یک شنبه 05 اردیبهشت 1389, 14:43 عصر
سپاس گذارم
مشکل من این بود که مستقیما برای تغییر خصوصیات کنترل از کد زیر استفاده می کردم:

TextBox1.BackColor=Color.Red;
که باید به صورت زیر می نوشتم:

This.BackColor=Color.Red;
با تشکر

mrsalam
یک شنبه 05 اردیبهشت 1389, 14:56 عصر
بچه ها مثل اینکه فقط میشه رنگ رو تغییر داد!
من خاصیت های دیگه رو تنظیم می کنم ولی هنکام load شدن ، تنظیمات پیشفرض visual Studio هستن مثل فونت یا چیزهای دیگه...

Marzieh_A
یک شنبه 05 اردیبهشت 1389, 17:19 عصر
بچه ها مثل اینکه فقط میشه رنگ رو تغییر داد!
من خاصیت های دیگه رو تنظیم می کنم ولی هنکام load شدن ، تنظیمات پیشفرض visual Studio هستن مثل فونت یا چیزهای دیگه...

اینجوری به property های کنترلهای داخل usercontrol دسترسی پیدا کن:



this.Controls["textBox1"].BackColor = Color.SeaGreen;
this.Controls["textBox1"].ForeColor = Color.Blue;
Font MyFont = new Font("Arial", 16);
this.Controls["textBox1"].Font = MyFont;

FastCode
یک شنبه 05 اردیبهشت 1389, 17:47 عصر
از OnHandleCreated استفاده کن.

mrsalam
دوشنبه 06 اردیبهشت 1389, 08:27 صبح
بسیار متشکرم از شما

از OnHandleCreated استفاده کن.

در صورت امکان مختصرا توضیح بفرمائید
راستی در مورد event های اون (TextChange)کنترول چطور؟

FastCode
دوشنبه 06 اردیبهشت 1389, 17:18 عصر
بسیار متشکرم از شما


در صورت امکان مختصرا توضیح بفرمائید
راستی در مورد event های اون (TextChange)کنترول چطور؟

مثال:

protected override void OnHandleCreated(System.EventArgs e)
{
base.OnHandleCreated(e);
Start();
}
private void Start()
{
if (!DesignMode)
{
if (options != null)
{
if (this.options.Font == null)
this.options.OwnerU_FontbyFont._Font = this.Font;
else
this.Font = options.OwnerU_FontbyFont._Font;
}
}
}

mrsalam
سه شنبه 07 اردیبهشت 1389, 12:59 عصر
FastCode عزیز سپاس
ولی Event ها رو چکار کنم؟
مثلا یک گرید ویو میخوام که همیشه در صورت کلیک ، کار خاصی انجام بشه . . .
بعدش تو تمام پروژه از اون گرید ویوی سفارشی استفاده کنم

wolf_majid
سه شنبه 07 اردیبهشت 1389, 13:42 عصر
دوست عزیز
اگر فقط از یک شی می خوای استفتده کنی پیشنهاد می کنم از component استفاده کن
بعدم از اون شی ای که می خوای ارث بری کن
برای تغییر در خصوصیاتش هم می تونی به صورت زیر عمل کنی :

protected override void OnEnter(EventArgs e)
{
base.OnEnter(e);
...
{

و برای تعریف یک خصوصیته جدید هم کافیه اونو به صورت public تعریف کنی

wolf_majid
سه شنبه 07 اردیبهشت 1389, 14:11 عصر
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
public partial class Component1 : DataGridView
{
public Component1()
{
InitializeComponent();
}

public Component1(IContainer container)
{
container.Add(this);

InitializeComponent();
}
protected override void OnClick(EventArgs e)
{
MessageBox.Show("Done");
base.OnClick(e);
}
}
}

hamid.shekasteh
چهارشنبه 05 خرداد 1389, 22:33 عصر
یه نمونه از یه تکست باکس سفارشی خوب که من ازش استفاده می کنم و با Focus روش رنگ ForeColor عوض میشه +Enter به جای Tab و امکان وارد کردن یه سری کاراکتر خاص(Chars) یا تنها عدد(Number):





class txt:TextBox


{
Boolean _Number = false;
char[] _Chars;
publicchar[] Chars
{
get
{
return _Chars;
}
set
{
_Chars = value;
}
}
publicBoolean Number
{
get
{
return _Number;
}
set
{
_Number = value;
}
}


protectedoverridevoid OnKeyPress(KeyPressEventArgs e)
{
Boolean handle= true;
if (char.IsControl(e.KeyChar))
e.Handled = false;
else
{
if (Number)
e.Handled = !(Char.IsDigit(e.KeyChar));
else
{
if (Chars != null)
{
foreach (char ch in Chars)
{
if (e.KeyChar == ch)
handle = false;
}
e.Handled = handle;
}
}
}
}
protectedoverridebool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Enter)
SendKeys.Send("{TAB}");
returnbase.ProcessDialogKey(keyData);
}
protectedoverridevoid OnGotFocus(EventArgs e)
{
this.BackColor = System.Drawing.SystemColors.InactiveCaptionText;
base.OnGotFocus(e);
}
protectedoverridevoid OnLostFocus(EventArgs e)
{
if (this.ReadOnly)
this.BackColor = System.Drawing.SystemColors.ButtonFace;
else
this.BackColor = System.Drawing.Color.White;
base.OnLostFocus(e);
}
privatevoid InitializeComponent()
{
this.SuspendLayout();
this.ResumeLayout(false);
}
}


موفق باشید.

علی فتحی
جمعه 05 تیر 1394, 14:19 عصر
میشه اموزش تصویری رو بگذارید خیلی تاپیک ایجاد کردم موفق نشدم

http://barnamenevis.org/showthread.php?473773-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B3%D8%A7%D8%AE%D8%AA-Component-%D8%AF%D8%B1-%D9%88%DB%8C%D8%B2%D9%88%D8%A7%D9%84-%D8%A7%D8%B3%D8%AA%D8%A7%D8%AF%DB%8C%D9%88-2010&highlight=Component1.cs