PDA

View Full Version : مشکل در Focus کنترل



harani
یک شنبه 23 مهر 1391, 10:30 صبح
سلام دوستان زمانیکه یه تکست باکس دارم که توش مثلاً نوشتم Hello وقتیکه کاربر تو تکست باکس کلید میکنه اون خالی میشه حالا میخوام کاربر زمانیکه رو هر جایی جزء تکست باکس مربوطه کلیک کرد در صورت خالیی بودن تکست باکس متن قبلی (Hello) برگشته بشه اینکار چجوری امکان داره ؟؟؟؟


با تشکر از همه

Mahmoud Zaad
یک شنبه 23 مهر 1391, 11:19 صبح
سلام
بهش میگن خاصیت WaterMark.
مثلا می تونید از رویدادهای Enter و Leave تکست باکس برای اینکار استفاده کنید. من برای رنگش هم نوشتم فقط در لود فرم یا موقع طراحی خاصیت ForColor تکست باکس رو برابر Gray یا رنگ دلخواه قرار بدید و کلمه Hello یا کلمه مورد نظر دیگه رو در خاصیت تکست بنویسید.
private void textBox1_Enter(object sender, EventArgs e)
{
if (textBox1.Text == "Hello")
{
textBox1.Text = "";
textBox1.ForeColor = Color.Black;
}
}

private void textBox1_Leave(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
textBox1.Text = "Hello";
textBox1.ForeColor = Color.Gray;
}
}

morteza271
یک شنبه 23 مهر 1391, 11:24 صبح
سلام دوستان زمانیکه یه تکست باکس دارم که توش مثلاً نوشتم Hello وقتیکه کاربر تو تکست باکس کلید میکنه اون خالی میشه حالا میخوام کاربر زمانیکه رو هر جایی جزء تکست باکس مربوطه کلیک کرد در صورت خالیی بودن تکست باکس متن قبلی (Hello) برگشته بشه اینکار چجوری امکان داره ؟؟؟؟


با تشکر از همه


اگه از تکست باکس های دات نت بار استفاده می کنید خودشون این خاصیت رو دارن و نیازی به کدنویسی نیست!
یه پراپرتی دارن فکر کنم با نام watermark که میتونی یه متن بهش بدی و خودش این کار رو واست میکنه!تازه میتونی تنظیماتش رو مثلا رنگ و ... عوض کنی.

Mahmoud Zaad
یک شنبه 23 مهر 1391, 11:41 صبح
اگه از تکست باکس های دات نت بار استفاده می کنید خودشون این خاصیت رو دارن و نیازی به کدنویسی نیست!
یه پراپرتی دارن فکر کنم با نام watermark که میتونی یه متن بهش بدی و خودش این کار رو واست میکنه!تازه میتونی تنظیماتش رو مثلا رنگ و ... عوض کنی.
البته نظر شما محترم ولی به نظر من این کار شبیه مصراع "آنچه خود داشت ز بیگانه تمنا می کرد" هست. وقتی ما با چند خط کد می تونیم همچین کاری رو انجام بدیم چه نیازی هست که از محصولات دیگران استفاده کنیم؟ مثلا اگه ایشون فقط برای همین کار بخوان از اون محصول استفاده کنند، به خاطر چند خط کد باید چند مگابایت به حجم برنامشون اضافه کنند. البته یه مواقعی نیاز به استفاده از کامپوننتی که توسط دیگران نوشته شده، هست ولی در اینجور کارای کوچیک به نظرم ضروری نیست.

RIG000
یک شنبه 23 مهر 1391, 11:46 صبح
یه سوال کنم . اگه ما بخایم رو یه تکست باکس که پسوردچرش تورو باشه که دیگه نمیشه این امکان رو براش فراهم کرد درسته؟

morteza271
یک شنبه 23 مهر 1391, 11:49 صبح
البته نظر شما محترم ولی به نظر من این کار شبیه مصراع "آنچه خود داشت ز بیگانه تمنا می کرد" هست. وقتی ما با چند خط کد می تونیم همچین کاری رو انجام بدیم چه نیازی هست که از محصولات دیگران استفاده کنیم؟ مثلا اگه ایشون فقط برای همین کار بخوان از اون محصول استفاده کنند، به خاطر چند خط کد باید چند مگابایت به حجم برنامشون اضافه کنند. البته یه مواقعی نیاز به استفاده از کامپوننتی که توسط دیگران نوشته شده، هست ولی در اینجور کارای کوچیک به نظرم ضروری نیست.

حرف شما کاملا متین ولی غیر منطقی!!!
من بر این اساس به ایشون این پیشنهاد رو دادم چراکه در یکی از تایپیک های قبلی شون گفتن که از دات نت بار استفاده میکنن!!! (حالا متوجه شدین چرا اینو بهشون گفتم!!)
اینم آدرس تایپیکشون : http://barnamenevis.org/showthread.php?364773-Hide-%D8%B4%D8%AF%D9%86-%D9%86%D8%A7%DA%AF%D9%87%D8%A7%D9%86%DB%8C-%DA%A9%D9%86%D8%AA%D8%B1%D9%84
پس دومشون!

بعدشم به نظرم استفاده از دات نت بار خیلی میتونه به زیبای برنامتون کمک کنه چرا که خیلی سبک و کم حجمه و سرعتش هم نسبت به کامپوننت های مشابه زیاده و همچنین کار باهاش خیلی راحته! وخیلی از حجم کدتون رو کم میکنه چرا که بیشتر این چیزهایی که باید واسشون از رویدادهای مختلف استفاده کنی تا بتونی به هدفت بررسی در این مجموعه از کامپوننت ها به صورت پیش فرض موجود هست و با ست کردن یک پراپرتی به هدفتون می رسید.
موفق باشید

morteza271
یک شنبه 23 مهر 1391, 11:55 صبح
یه سوال کنم . اگه ما بخایم رو یه تکست باکس که پسوردچرش تورو باشه که دیگه نمیشه این امکان رو براش فراهم کرد درسته؟

اگه از کامپوننت های دات نت بار استفاده می کنید که مشکلی نداره و میتویند!
اما اگه از تکست باکس معمولی استفاده می کنید کد زیر رو بنویسید :
private void textBox1_Enter(object sender, EventArgs e)
{
if (textBox1.Text == "Hello")
{
textBox1.Text = "";
textBox1.ForeColor = Color.Black;
textBox1.UseSystemPasswordChar = true;
}
}

private void textBox1_Leave(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
textBox1.UseSystemPasswordChar = false;
textBox1.Text = "Hello";
textBox1.ForeColor = Color.Gray;
}
}

harani
یک شنبه 23 مهر 1391, 11:58 صبح
ممنون از شما .

Mahmoud Zaad
یک شنبه 23 مهر 1391, 12:04 عصر
حرف شما کاملا متین ولی غیر منطقی!!!
من بر این اساس به ایشون این پیشنهاد رو دادم چراکه در یکی از تایپیک های قبلی شون گفتن که از دات نت بار استفاده میکنن!!! (حالا متوجه شدین چرا اینو بهشون گفتم!!)
اینم آدرس تایپیکشون : http://barnamenevis.org/showthread.php?364773-Hide-%D8%B4%D8%AF%D9%86-%D9%86%D8%A7%DA%AF%D9%87%D8%A7%D9%86%DB%8C-%DA%A9%D9%86%D8%AA%D8%B1%D9%84
پس دومشون!

بعدشم به نظرم استفاده از دات نت بار خیلی میتونه به زیبای برنامتون کمک کنه چرا که خیلی سبک و کم حجمه و سرعتش هم نسبت به کامپوننت های مشابه زیاده و همچنین کار باهاش خیلی راحته! وخیلی از حجم کدتون رو کم میکنه چرا که بیشتر این چیزهایی که باید واسشون از رویدادهای مختلف استفاده کنی تا بتونی به هدفت بررسی در این مجموعه از کامپوننت ها به صورت پیش فرض موجود هست و با ست کردن یک پراپرتی به هدفتون می رسید.
موفق باشید
کلاً قانع شدم از منطق شما!
در مورد قسمت آخر فرمایشتتون هم بگم ما اینا رو بوسیدیم گذاشتیم کنار!!

RIG000
یک شنبه 23 مهر 1391, 12:05 عصر
اگه از کامپوننت های دات نت بار استفاده می کنید که مشکلی نداره و میتویند!
اما اگه از تکست باکس معمولی استفاده می کنید کد زیر رو بنویسید :
private void textBox1_Enter(object sender, EventArgs e)
{
if (textBox1.Text == "Hello")
{
textBox1.Text = "";
textBox1.ForeColor = Color.Black;
textBox1.UseSystemPasswordChar = true;
}
}

private void textBox1_Leave(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
textBox1.UseSystemPasswordChar = false;
textBox1.Text = "Hello";
textBox1.ForeColor = Color.Gray;
}
}
troski جان شما رو کاملا تو سایت برنامه نویس میشناسم.
معمولا اوقاتی که من انلاین میشم تو این سایت شما رو میبینم و تو خاطرم هستی.
در ضمن بابت سوالم یکم فکر میکردم بهتر بود تا اینکه سوالو بپرسم.
مرسی

morteza271
یک شنبه 23 مهر 1391, 12:25 عصر
کلاً قانع شدم از منطق شما!
در مورد قسمت آخر فرمایشتتون هم بگم ما اینا رو بوسیدیم گذاشتیم کنار!!

موفق باشید قربان!من نگفتم که حتما ازش استفاده کنید من فقط دلیل اینکه از این مجموعه خوشم میاد رو گفتم!!!وگرنه منظور بدی نداشتم،شرمنده!!!
حتما منظورتون از اینکه بوسیدین گذاشتین کنار اینه که رفتین طرف wpf آره؟؟یا چیز دیگه ای؟؟


troski جان شما رو کاملا تو سایت برنامه نویس میشناسم.
معمولا اوقاتی که من انلاین میشم تو این سایت شما رو میبینم و تو خاطرم هستی.
خواهش میکنم دوست عزیز.من در حد توانم در خدمت دوستان هستم همونطور که اوایلی که برنامه نویس شده بودم دیگر دوستان به من کمک کردن!
موفق باشید

RIG000
یک شنبه 23 مهر 1391, 12:43 عصر
اگه از کامپوننت های دات نت بار استفاده می کنید که مشکلی نداره و میتویند!
اما اگه از تکست باکس معمولی استفاده می کنید کد زیر رو بنویسید :
private void textBox1_Enter(object sender, EventArgs e)
{
if (textBox1.Text == "Hello")
{
textBox1.Text = "";
textBox1.ForeColor = Color.Black;
textBox1.UseSystemPasswordChar = true;
}
}

private void textBox1_Leave(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
textBox1.UseSystemPasswordChar = false;
textBox1.Text = "Hello";
textBox1.ForeColor = Color.Gray;
}
}
راسش دقت کنید اگه این کد را بکارببریم فقط یکبار اعمال میشه اگه به فرض مابا تب حرکت کنیم یکبار خالی میشه تکست باکس 1 و لی اگه بعد دو کنترل بعدی دوباره نوبت به تکست باکس 1 شه دیگه این عمل نمیکنه ؟!!!!
دوم اینکه در دور مجدد برای passwordchr هم صدق میکنه یعنی فقط یکبار فعال میشه. !!!
چه جوریه این؟

morteza271
یک شنبه 23 مهر 1391, 12:55 عصر
راسش دقت کنید اگه این کد را بکارببریم فقط یکبار اعمال میشه اگه به فرض مابا تب حرکت کنیم یکبار خالی میشه تکست باکس 1 و لی اگه بعد دو کنترل بعدی دوباره نوبت به تکست باکس 1 شه دیگه این عمل نمیکنه ؟!!!!
دوم اینکه در دور مجدد برای passwordchr هم صدق میکنه یعنی فقط یکبار فعال میشه. !!!
چه جوریه این؟
آره جالبه این مشکل هست!!!
اگه با تب حرکت کنیم وقتی که به تکست باکس مورد نظر میرسه گیر میکنه و دیگه خارج نمیشه مگر اینکه با موس حرکت کنیم و نشانگر رو منتقل کنیم!
دوستانی که از این روش استفاده میکنن چطوری باید برطرف بشه؟؟

abcd_a
یک شنبه 23 مهر 1391, 14:02 عصر
سلام اگه از کامپوننت dotnet bar استفاده می کنید textbox این خصوصیت داره کافی فعالش کنی
خصوصت waterMarkBehavior را برابر با HideNonEmpty قرار بده
و مقدار waterMarkTextرا برار متن مورد نظر قرار بده

RIG000
یک شنبه 23 مهر 1391, 14:29 عصر
با کد چه جوری میشه؟

abcd_a
یک شنبه 23 مهر 1391, 14:50 عصر
با کد چه جوری میشه؟
textBoxX1.WatermarkBehavior = DevComponents.DotNetBar.eWatermarkBehavior.HideNon Empty;
textBoxX1.WatermarkText = "test";