PDA

View Full Version : سوال: قرار گرفتن کرسر در TexBox



Masoome_das
چهارشنبه 06 مرداد 1389, 23:56 عصر
سلام
من می خوام یک TexBox داشته باشم که وقتی کرسر در آن وارد می شود رنگ زمینه آن عوض شود
ایونت های زیر را هم امتحان کرده ام اما در حالتی که با Tab وارد آن می شوم هیچ ایونتی اجرا نمی شود.
TexChanged
MouseClick
CursorChanged

jalalx
پنج شنبه 07 مرداد 1389, 00:15 صبح
تو رویداد GotFocus (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.gotfocus.aspx)یا یه چیزی مثل این بنویس!



(sender as TextBox).BackColor = Color.Red;


و برای بازگشت به حالت قبل تو رویداد Leave (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.leave.aspx)کد مورد نظرتو بنویس!

FastCode
پنج شنبه 07 مرداد 1389, 00:18 صبح
Enter
Leave

hamid.shekasteh
جمعه 08 مرداد 1389, 07:42 صبح
از Inheritance استفاده کنید چطور؟
یه کلاس جدید درست کنید و از TextBox اون رو مشتق کنید و دستورات رو اونجا بنویسید.حالا پروژه رو Compile کنید و به جای اینکه تکست باک رو به فرم بندازید از اون کلاس نوشته شده یه دونه به فرم بندازید.
این جوری هر تغییری در کد اصلی بدید تغییرات خود به خود ثبت نیشه.
اینم نمونه کدش که من واقعا باهاش زیاد کار کردم و راضیم.شما می تونید بعضی event هاش رو پاک کنید.



class txt:TextBox
{
bool _Number = false;
char[] _Chars;
bool _Seprator = false;
public char[] Chars
{
get
{
return _Chars;
}
set
{
_Chars = value;
}
}
public Boolean Number
{
get
{
return _Number;
}
set
{
_Number = value;
}
}
public bool Seprator
{
get
{
return _Seprator;
}
set
{
_Seprator = value;
}
}
protected override void OnTextChanged(EventArgs e)
{
string strHelper = Text;
try
{
if (Seprator && (!string.IsNullOrEmpty(strHelper)))
{
if (Convert.ToDecimal(strHelper) >= 0)
{
strHelper = string.Format("{0:N0}", Int64.Parse(strHelper.Replace(",", "")));
//Select(Text.Length, 0);
}
else//mines
{

strHelper = strHelper.Remove(0, 1);
strHelper = string.Format("{0:N0}", Int64.Parse(strHelper.Replace(",", "")));
strHelper = "-" + strHelper;
//Select(Text.Length, 0);
}
}
Text = strHelper;
Select(Text.Length, 0);
}
catch
{
}
finally
{
base.OnTextChanged(e);
}
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
// base.OnKeyPress(e);
Boolean handle= true;
if (e.KeyChar == (char)Keys.Return)
e.Handled = true;
else if (char.IsControl(e.KeyChar))
e.Handled = false;
else if (e.KeyChar == (char)Keys.Return)
e.Handled = true;
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;
}
}
}
}
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Enter)
{
SendKeys.Send("{TAB}");
}
return base.ProcessDialogKey(keyData);
}


protected override void OnGotFocus(EventArgs e)
{
this.BackColor = System.Drawing.SystemColors.InactiveCaptionText;
base.OnGotFocus(e);
}
protected override void OnLostFocus(EventArgs e)
{
if (this.ReadOnly)
this.BackColor = System.Drawing.SystemColors.ButtonFace;
else
this.BackColor = System.Drawing.Color.White;
base.OnLostFocus(e);
}
private void InitializeComponent()
{
this.SuspendLayout();
this.ResumeLayout(false);
}
}

javad_r_85
جمعه 08 مرداد 1389, 08:58 صبح
سلام
من می خوام یک TexBox داشته باشم که وقتی کرسر در آن وارد می شود رنگ زمینه آن عوض شود
ایونت های زیر را هم امتحان کرده ام اما در حالتی که با Tab وارد آن می شوم هیچ ایونتی اجرا نمی شود.
TexChanged
MouseClick
CursorChanged




این کد را بنویس.


private void textBox1_MouseHover(object sender, EventArgs e)
{
textBox1.BackColor = Color.Red;
}

private void textBox1_MouseLeave(object sender, EventArgs e)
{
textBox1.BackColor = Color.Blue;
}

FastCode
جمعه 08 مرداد 1389, 09:14 صبح
این کد را بنویس.


private void textBox1_MouseHover(object sender, EventArgs e)
{
textBox1.BackColor = Color.Red;
}

private void textBox1_MouseLeave(object sender, EventArgs e)
{
textBox1.BackColor = Color.Blue;
}

تا اونجایی که من میدونم انجام یک عمل فقط زمانی اشتباه نیست که به کاربر سود برسونه.
این کار شما چه خاصیتی داره؟
کاربر موس رو گم نمیکنه؟

Masoome_das
جمعه 08 مرداد 1389, 10:24 صبح
منون از همه دوستان با راهنمایی FastCode مشکلم حل شد.