PDA

View Full Version : سوال: محدودیت گذاشتن روی TextBox



booysusa
دوشنبه 26 فروردین 1398, 17:19 عصر
درود

برای TextBox میخوام یکسری محدودیت ایجاد کنم مانند:
1. کاربر فقط امکان وارد کردن شماره داشته باشد
2. کاربر فقط بتواند 12 عدد وارد کند (اگر بیش از 12 عدد وارد کند یک پیغام خطا مواجه شود که شما نمی توانید بیش از 12 کاراکتر وارد کنید)


و اینکه هربار که روی تب کلیک میکنم، وقتی میره TextBox بعدی همه متن موجود در TextBox بعدی رو سکلکت کنه.

در یک پست دیدم یکی از مهندسان عزیز لطف کردن و یک کامپوننت گذاشته بود، ولی من بدون کامپوننت میخوام این کارو کنم اگر بشه(البته کدنویسی نداشته باشه خوبه:قلب:)


راستی نظرتون در مورد این کامپوننت چی هست؟

لینک کامپوننت (https://persianit.net/csharp-txtpro-component/#frm_Login)

سپاس

MMR_1234
دوشنبه 26 فروردین 1398, 20:40 عصر
روشی که به نظر میرسه کنترل کد اسکی وارد شده هست
هر بار که اطلاعات وارد میشه در TextChange کنترل بشه که در محدوده اعدا باشه و اون رو به تکست باکس اضافه کنه

davidrobert
دوشنبه 26 فروردین 1398, 22:26 عصر
بابت موضوع شما بگم بنده داخل این فایل http://barnamenevis.org/showthread.php?554595-%D8%AF%D9%81%D8%AA%D8%B1-%D8%AA%D9%84%D9%81%D9%86-%D8%A8%D8%A7-%D8%A7%D9%85%DA%A9%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1%DB%8C-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%D9%88-%D9%87%D9%85%DA%86%D9%86%DB%8C%D9%86-%D8%A7%D9%85%DA%A9%D8%A7%D9%86-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D9%BE%DB%8C%D8%A7%D9%85%DA%A9-%D9%88-%DA%A9%D8%A7%D9%87%D8%B4-%D8%B4%D8%AF%DB%8C%D8%AF-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C که این تاپیک بنده هستش کامپوننت درسته گفتید نباشه ولی متوانید اون دستور عددی جدا کنید ولی استفاده از کامپوننت کار راحتر میکنه شما از کامپوننت عددی استفاده میکنید ولی برای محدود کردن طول عدد با یک دستور ساده شرطی جلوش میگیرید و بیشتر از 12 عدد نده بایک شرط if
به طور مثال بنده برای تلفن نوشتم

string peshtel = Txt_R_Tel.Text;
if (Txt_R_Tel.Text.Length < 11|| !peshtel.StartsWith("0"))
{
messages.Append(msg.Tel("تلفن"));
isValid = false;
}

اگه تلفن کاربر تعدادش کمتز از 11 و همین طور با صفر شروع نشه پیغام به میده شماره تلفن اشتباه هستش

booysusa
سه شنبه 27 فروردین 1398, 10:31 صبح
روشی که به نظر میرسه کنترل کد اسکی وارد شده هست
هر بار که اطلاعات وارد میشه در TextChange کنترل بشه که در محدوده اعدا باشه و اون رو به تکست باکس اضافه کنه

با این اوصاف باد کدنویسی کنم و در پروپرتی ویژگی در این مورد نیست

booysusa
سه شنبه 27 فروردین 1398, 10:36 صبح
بابت موضوع شما بگم بنده داخل این فایل http://barnamenevis.org/showthread.php?554595-%D8%AF%D9%81%D8%AA%D8%B1-%D8%AA%D9%84%D9%81%D9%86-%D8%A8%D8%A7-%D8%A7%D9%85%DA%A9%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1%DB%8C-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%D9%88-%D9%87%D9%85%DA%86%D9%86%DB%8C%D9%86-%D8%A7%D9%85%DA%A9%D8%A7%D9%86-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D9%BE%DB%8C%D8%A7%D9%85%DA%A9-%D9%88-%DA%A9%D8%A7%D9%87%D8%B4-%D8%B4%D8%AF%DB%8C%D8%AF-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C که این تاپیک بنده هستش کامپوننت درسته گفتید نباشه ولی متوانید اون دستور عددی جدا کنید ولی استفاده از کامپوننت کار راحتر میکنه شما از کامپوننت عددی استفاده میکنید ولی برای محدود کردن طول عدد با یک دستور ساده شرطی جلوش میگیرید و بیشتر از 12 عدد نده بایک شرط if
به طور مثال بنده برای تلفن نوشتم

string peshtel = Txt_R_Tel.Text;
if (Txt_R_Tel.Text.Length < 11|| !peshtel.StartsWith("0"))
{
messages.Append(msg.Tel("تلفن"));
isValid = false;
}

اگه تلفن کاربر تعدادش کمتز از 11 و همین طور با صفر شروع نشه پیغام به میده شماره تلفن اشتباه هستش


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

davidrobert
سه شنبه 27 فروردین 1398, 11:30 صبح
با این اوضاف باد کدنویسی کنم و در پروپرتی ویژگی در این مورد نیست

برای عدد نویسی رویداد KeyPress هستش و اینم بگم نه کامپوننت نویسی سرعت کند نمیکنه بلکه کار و سرعت کدنویسی هم بیشتر میکنه چرا از ابزار ها و یا دستورات اشتباه به کار ببرید باعث افت شدید سرعت میشه به طور مثال بنده قبلا از شماره ردیف استفاده میکردم داخل DataGridview روی ستون که وقتی اطلاعات لود میشود روی ستون سمت راست شماره ردیف مینداخت ولی 100 تا رکورد 3 ثانیه و هر چقدر بیشتر میشود بیشتر زمان میبرد ولی الان ردیف از داخل دیتاگرید ویو برداشتم و از دیتابیس ردیف میاره به ترتیب و کلی اطلاعات یک ثانیه و زیر 1 ثانیه میاره برای نمایش چون لود اطلاعات باعث میشود 100 تا رکورد بیفته داخل حلقه for چون داخل حلقه میفتاد و هرچقدر اطلاعات بیشتر میشود سرعت لود هم بیشتر میشود ولی با کدنویسی استاندارد خیالت راحت هم کدنویسی کمتری دارید و هم سرعت خوبی تو برنامه به قول استادم از کامپوننت های ساخت خودت استفاده کن ولی از کامپوننت های اماده نه که ازار اذیت زیاد دارن.

mandagarana
سه شنبه 27 فروردین 1398, 12:05 عصر
با این اوضاف باد کدنویسی کنم و در پروپرتی ویژگی در این مورد نیست

با سلام
من یه چیزی شبیه اونچه شما میخاید نوشتم.شاید یه دردتون بخوره.

http://barnamenevis.org/showthread.php?554444-Textbox-%D8%B3%D9%81%D8%A7%D8%B1%D8%B4%DB%8C

booysusa
چهارشنبه 28 فروردین 1398, 08:04 صبح
با سلام
من یه چیزی شبیه اونچه شما میخاید نوشتم.شاید یه دردتون بخوره.

http://barnamenevis.org/showthread.php?554444-Textbox-%D8%B3%D9%81%D8%A7%D8%B1%D8%B4%DB%8C

سپاس بررسی کردم، خوب بود ولی کدهای بسیار زیادی دارد ، برای من که در هر فرم بیش از 10 Textbox دارم استفاده از این حجم کد کمی زیاد هست، ولی با اجازه دانلود کردم، میدانم روزی به کارم خواهد آمد:قلب:

booysusa
چهارشنبه 28 فروردین 1398, 08:06 صبح
برای عدد نویسی رویداد KeyPress هستش و اینم بگم نه کامپوننت نویسی سرعت کند نمیکنه بلکه کار و سرعت کدنویسی هم بیشتر میکنه چرا از ابزار ها و یا دستورات اشتباه به کار ببرید باعث افت شدید سرعت میشه به طور مثال بنده قبلا از شماره ردیف استفاده میکردم داخل DataGridview روی ستون که وقتی اطلاعات لود میشود روی ستون سمت راست شماره ردیف مینداخت ولی 100 تا رکورد 3 ثانیه و هر چقدر بیشتر میشود بیشتر زمان میبرد ولی الان ردیف از داخل دیتاگرید ویو برداشتم و از دیتابیس ردیف میاره به ترتیب و کلی اطلاعات یک ثانیه و زیر 1 ثانیه میاره برای نمایش چون لود اطلاعات باعث میشود 100 تا رکورد بیفته داخل حلقه for چون داخل حلقه میفتاد و هرچقدر اطلاعات بیشتر میشود سرعت لود هم بیشتر میشود ولی با کدنویسی استاندارد خیالت راحت هم کدنویسی کمتری دارید و هم سرعت خوبی تو برنامه به قول استادم از کامپوننت های ساخت خودت استفاده کن ولی از کامپوننت های اماده نه که ازار اذیت زیاد دارن.

سپاسگزارم، استفاده میکنم از این نکته

Mahmoud Zaad
چهارشنبه 28 فروردین 1398, 09:54 صبح
سپاس بررسی کردم، خوب بود ولی کدهای بسیار زیادی دارد ، برای من که در هر فرم بیش از 10 Textbox دارم استفاده از این حجم کد کمی زیاد هست، ولی با اجازه دانلود کردم، میدانم روزی به کارم خواهد آمد:قلب:
سلام
شما باید یک تکست باکس سفارشی برای خودتون بسازید، یعنی کدها رو در یک کلاس بنویسید که این کلاس از TextBox ارث بری میکنه. بعد از Build پروژه، این کلاس تبدیل به یک کنترل مخصوص شما می شه و در تولباکس اضافه می شه. بعد مثل تکست باکس معمولی شما این کنترل رو میکشید و روی فرم قرار میدید. دیگه نیاز به کد نویسی اضافه در هر فرم هم نداره، فقط یکبار نوشته میشه. بعدا هم اگه نیاز به تغییر بود فقط همین کلاس رو تغییر بدید در کل فرم ها تغییرات اعمال میشه.
مثال:
public class CustomTextBox : TextBox
{
protected override void OnEnter(EventArgs e)
{
this.SelectAll();

this.BackColor = Color.Yellow;
}
protected override void OnLeave(EventArgs e)
{
base.BackColor = Color.White;
}

}
در اینجا یک کنترل به اسم CustomTextBox به تولباکس اضافه میشه. یک ویژگیش اینه که با ورود به تکست باکس کل متن انتخاب میشه. دوم با ورود به تکست باکس رنگ پس زمینه اش زرد میشه و با خروج رنگ پس زمینه اش سفید میشه. حالا شما پراپرتی های مختلف و عملیات دیگه رو هم می تونید بهش اضافه کنید.

mandagarana
چهارشنبه 28 فروردین 1398, 11:23 صبح
سلام
اره کدهاش زیاده چون هم تقریبا کامله هم خیلی روش وقت گذاشتم.
از طرفی من دوتا دونا جدا کردم.مال شما کمتر از این میشه.
بیشتر شدن کدهای بیشتر به خاطر del , backspace هستش.نوشتن چندان دردسر نداره، پاک کردن ولی خیلی.
بازم خوشحال میشم اگه به دردتون بخوره

davidrobert
چهارشنبه 28 فروردین 1398, 13:34 عصر
سلام
شما باید یک تکست باکس سفارشی برای خودتون بسازید، یعنی کدها رو در یک کلاس بنویسید که این کلاس از TextBox ارث بری میکنه. بعد از Build پروژه، این کلاس تبدیل به یک کنترل مخصوص شما می شه و در تولباکس اضافه می شه. بعد مثل تکست باکس معمولی شما این کنترل رو میکشید و روی فرم قرار میدید. دیگه نیاز به کد نویسی اضافه در هر فرم هم نداره، فقط یکبار نوشته میشه. بعدا هم اگه نیاز به تغییر بود فقط همین کلاس رو تغییر بدید در کل فرم ها تغییرات اعمال میشه.
مثال:
public class CustomTextBox : TextBox
{
protected override void OnEnter(EventArgs e)
{
this.SelectAll();

this.BackColor = Color.Yellow;
}
protected override void OnLeave(EventArgs e)
{
base.BackColor = Color.White;
}

}
در اینجا یک کنترل به اسم CustomTextBox به تولباکس اضافه میشه. یک ویژگیش اینه که با ورود به تکست باکس کل متن انتخاب میشه. دوم با ورود به تکست باکس رنگ پس زمینه اش زرد میشه و با خروج رنگ پس زمینه اش سفید میشه. حالا شما پراپرتی های مختلف و عملیات دیگه رو هم می تونید بهش اضافه کنید.

در قبال حرف دوست بزرگوار میتوانم بگم کلاس نویسی بهترین راه هستش برای ساخت ابزار پر کاربرد و تکراری مثل کادر متن که اگه میخواهید زیاد کدنویسی نکنید میتوانید از کلاس استفاده کنید یک مثال ساده میزنم.
حساب کنید یه پروژه عملی دارید و باید به استادتون تحویل بدید برای نمره که نزدیک به 1000 تا صفحه داره که رنگش زرد هستش برای اینکه استاد بدون خوب یاد گرفتید میگه این هزار صفحه باید الان بیشن سبز تو یک ثانیه اگه شما اشتباه کرده باشید یعنی اینکه برداشته باشید دونه به دونه همه رو زرد داده باشید تو یک ثانیه که هیچ تو یک ساعت به جواب نمیرسید حتی ممکن یادتون بره کدام ها رو تغییر رنگ داده باشید و نمره صفر شامل میشه این حرف بنده به صورت مثال و قصد جسارت نیست ولی اگه طراح کار خوبی باشه طرف میاد از Css استفاده میکنه برای ارث بری داخل همه 1000 تا صفحه یک کلاس صدا میکنه و استاد میگه رنگ هزار تاش باید بشه سبز میگی مشکلی نیست میری سراغ CSS اونجا رو میکنی سبز و تمام هزار تا فایل تو یک ثانیه میشه سبز از زرد. حالا این ویژگی CSS رو درون کلاس به کار میشه برد شما یک کادر متن میسازی و درون هزار تا فرم خودتون استفاده میکنید اگه یک تغییر جزی بخواهید بدید روی هزار تا ایجاد نمیکنید میرید سراغ فایل اصلی اون اصلی درست کنید باقی شون سریع درست میشه در کمترین زمان بیشترین کار انجام دادید بخاطر همین سعی کنید کامپوننت سازی زیاد هم نه کمی یاد بگیرید که بنده هم برای یاد گیری از دوستان کمک گرفتم و یک سری درست کردم که زیاد باهاش کار میکنم به ابزار هام دادم و داخل اون دفترچه تلفن که به شما گفتم قرار دادم که شما به این صورت کدنویسی کمتری انجام میدید و به کار شما میاد.

nadia92
پنج شنبه 29 فروردین 1398, 10:00 صبح
بدون کد نویسی این کارا بنظرتون انجام میشه؟:لبخند:
آدرسی که یکی از دوستان دادن خوبه
از اون استفاده کن لینک
(https://persianit.net/csharp-txtpro-component/#frm_Login)
و در مورد اینکه استفاده از کامپوننت سرعت برنامه شمارو بیاره پایین, این اصلا ربطی به کامپوننت نداره.
اگر کدهای داخل کامپوننت اصولی نباشن بله حق باشماست ولی خب یه کامپوننت تکست باکس چیه که بخواد سرعت برنامه رم بیاره پایین.

اگر خیلی حرفه ای کار میکنید با کامپوننت های Dev Express کار کنید و یک تکست باکس حرفه ای برای خود بنویسید.
موفق باشید

davidrobert
جمعه 30 فروردین 1398, 02:44 صبح
بدون کد نویسی این کارا بنظرتون انجام میشه؟:لبخند:
آدرسی که یکی از دوستان دادن خوبه
از اون استفاده کن لینک
(https://persianit.net/csharp-txtpro-component/#frm_Login)
و در مورد اینکه استفاده از کامپوننت سرعت برنامه شمارو بیاره پایین, این اصلا ربطی به کامپوننت نداره.
اگر کدهای داخل کامپوننت اصولی نباشن بله حق باشماست ولی خب یه کامپوننت تکست باکس چیه که بخواد سرعت برنامه رم بیاره پایین.

اگر خیلی حرفه ای کار میکنید با کامپوننت های Dev Express کار کنید و یک تکست باکس حرفه ای برای خود بنویسید.
موفق باشید

راستیتش از کامپوننت های بنده از کامپوننت های آماده مثل Dev Express هم استفاده کردم همیشه جالب نیستن و بیشتر موقع آسیب رسون به پروژه هستن به همین خاطر دیگه از هیچ کامپوننتی جز استناندارد های خود ویژال استفاده نمیکنم اگه استفاده کنم کامپوننت سفارشی خودم درست میکنم و از اون استفاده میکنم. آسیب زدن به برنامه کمتر یا نداره و میدونم چی نوشتم که ازش کم یا اضافه کنم.