PDA

View Full Version : سوال: Nomeric TextBox یعنی چه؟



voice.of.silence
جمعه 21 مهر 1391, 09:39 صبح
سلام دوستان:
من درمورد ساخت یک کلاس برای تکستباکس می گشتم و با کلاس از نوع Nomeric TextBox برخوردم اما کاربرد آن را نفهمیدم .
من کدهای مربوطه را در این تاپیک قرار میدم و از شما دوستان می خوام اگر ممکن هست کمی در مورد آن توضیح دهید.

public class NumericTextBox : TextBox
{
bool allowSpace = false;

// Restricts the entry of characters to digits (including hex), the negative sign,
// the decimal point, and editing keystrokes (backspace).
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);

NumberFormatInfo numberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.Nu mberFormat;
string decimalSeparator = numberFormatInfo.NumberDecimalSeparator;
string groupSeparator = numberFormatInfo.NumberGroupSeparator;
string negativeSign = numberFormatInfo.NegativeSign;

string keyInput = e.KeyChar.ToString();

if (Char.IsDigit(e.KeyChar))
{
// Digits are OK
}
else if (keyInput.Equals(decimalSeparator) || keyInput.Equals(groupSeparator) ||
keyInput.Equals(negativeSign))
{
// Decimal separator is OK
}
else if (e.KeyChar == '\b')
{
// Backspace key is OK
}
// else if ((ModifierKeys & (Keys.Control | Keys.Alt)) != 0)
// {
// // Let the edit control handle control and alt key combinations
// }
else if (this.allowSpace && e.KeyChar == ' ')
{

}
else
{
// Swallow this invalid key and beep
e.Handled = true;
// MessageBeep();
}
}

public int IntValue
{
get
{
return Int32.Parse(this.Text);
}
}

public decimal DecimalValue
{
get
{
return Decimal.Parse(this.Text);
}
}

public bool AllowSpace
{
set
{
this.allowSpace = value;
}

get
{
return this.allowSpace;
}
}
}

Code to use this Class in the form:


// Create an instance of NumericTextBox.
NumericTextBox numericTextBox1 = new NumericTextBox();
numericTextBox1.Parent = this;

//Draw the bounds of the NumericTextBox.
numericTextBox1.Bounds = new Rectangle(5, 5, 150, 100);

Add an InputPanel component to your form for user input into the NumericTextBox. For a Smartphone application, you can specify a numeric InputMode.


با سپاس.
Voice of Silence

مسعود اقدسی فام
جمعه 21 مهر 1391, 10:35 صبح
این نوع TextBox فقط ارقام عددی و جداکننده‌های عددی (مثل نقطه برای ممیز، یا کاما برای جدا کردن سه تا سه تای ارقام) رو دریافت می‌کنه. یعنی هر کلید دیگه‌ای فشار بدید کنترل از اون صرف نظر می‌کنه و نشون نمی‌ده.

Nima_kyan
جمعه 21 مهر 1391, 10:42 صبح
سلام
این کلاس باعث ایجاد یه تکست باکس میشه که فقط عدد رو از ورودی میگیره.(کاراکترهای مجازش میشن اعداد، "."(نقطه اعشار) ، کلید backspace ، "-"(منفی)، " "(فاصله))

voice.of.silence
جمعه 21 مهر 1391, 11:09 صبح
من این کلاس را ایجاد کردم اما پس چطور باید از آن استفاده کرد زیرا من یک تکسباکس گذاشتم و در هنگام اجرا ی برنامه مال من همه نوع کلید را قبل می کنه و صرفا به اعداد حساس نیست و حروف را نیز قبول می کنه .
ممنون می شم اگه مرا در مورد چگونه استفاده کردن این کلاس راهنمایی کنید.
من کد این کلاس را از MSDN گرفتم و به همین دلیل از آن درست استفاده نتونستم.
با سپاس.

مسعود اقدسی فام
جمعه 21 مهر 1391, 11:31 صبح
من این کلاس را ایجاد کردم اما پس چطور باید از آن استفاده کرد زیرا من یک تکسباکس گذاشتم و در هنگام اجرا ی برنامه مال من همه نوع کلید را قبل می کنه و صرفا به اعداد حساس نیست و حروف را نیز قبول می کنه .
ممنون می شم اگه مرا در مورد چگونه استفاده کردن این کلاس راهنمایی کنید.
من کد این کلاس را از MSDN گرفتم و به همین دلیل از آن درست استفاده نتونستم.
با سپاس.

کدی که اینجا نوشته می‌شه بعد از اجرا تبدیل می‌شه به یه کمپونتت. البته بسته به اینکه نوع پروژه چی باشه dll یا داخل exe می‌افته.

اون کمپوننت رو مثل سایر کنترل‌های ToolBox به اون قسمت اضافه کنید و هر جا احتیاج داشتید بندازید روی فرمتون.

Nima_kyan
جمعه 21 مهر 1391, 11:34 صبح
دوست عزیز نحوه استفاده از این کلاس که درون خودش توضیح داده شده

// Create an instance of NumericTextBox.
NumericTextBox numericTextBox1 = new NumericTextBox();
numericTextBox1.Parent = this;

//Draw the bounds of the NumericTextBox.
numericTextBox1.Bounds = new Rectangle(5, 5, 150, 100);

شما دیگه نیاز نیست به صورت دستی تکست باکس ایجاد کنید. واسه ایجادش از کد بالا استفاده کن.

voice.of.silence
جمعه 21 مهر 1391, 12:35 عصر
دوستان منظورم اینه که در هنگام اجرا ی برنامه تکسباکس روی فرم ایجاد می شه اما مشکل در اینجاست که حروف را هم قبول می کنه .
همانطور که شما گفتید این تکسباکس برای اعداد طراحی شده .

Nima_kyan
جمعه 21 مهر 1391, 12:49 عصر
ببینید شما به این شکل از این کد استفاده کنید.
اول باید کلاس NumericTextBox رو ایجاد کنیم. یه کلاس جدید Add کن و کد بالا رو به این شکل استفاده کن.(با تغییرات جزیی در Usingها)



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;

namespace WindowsFormsApplication1
{
class NumericTextBox : TextBox
{
bool allowSpace = false;

// Restricts the entry of characters to digits (including hex), the negative sign,
// the decimal point, and editing keystrokes (backspace).
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);

NumberFormatInfo numberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.Nu mberFormat;
string decimalSeparator = numberFormatInfo.NumberDecimalSeparator;
string groupSeparator = numberFormatInfo.NumberGroupSeparator;
string negativeSign = numberFormatInfo.NegativeSign;

string keyInput = e.KeyChar.ToString();

if (Char.IsDigit(e.KeyChar))
{
// Digits are OK
}
else if (keyInput.Equals(decimalSeparator) || keyInput.Equals(groupSeparator) ||
keyInput.Equals(negativeSign))
{
// Decimal separator is OK
}
else if (e.KeyChar == '\b')
{
// Backspace key is OK
}
// else if ((ModifierKeys & (Keys.Control | Keys.Alt)) != 0)
// {
// // Let the edit control handle control and alt key combinations
// }
else if (this.allowSpace && e.KeyChar == ' ')
{

}
else
{
// Swallow this invalid key and beep
e.Handled = true;
// MessageBeep();
}
}

public int IntValue
{
get
{
return Int32.Parse(this.Text);
}
}

public decimal DecimalValue
{
get
{
return Decimal.Parse(this.Text);
}
}

public bool AllowSpace
{
set
{
this.allowSpace = value;
}

get
{
return this.allowSpace;
}
}
}
}

حالا تو Form_Load فرمی که میخوای از این تکست باکس استفاده کنی به این شکل کد رو بنویس


private void Form1_Load(object sender, EventArgs e)
{
NumericTextBox NumericTextBox1 = new NumericTextBox();

NumericTextBox1.Parent = this;
NumericTextBox1.Bounds = new Rectangle(5, 5, 150, 100);
}

موفق باشی

مسعود اقدسی فام
جمعه 21 مهر 1391, 12:58 عصر
دوستان منظورم اینه که در هنگام اجرا ی برنامه تکسباکس روی فرم ایجاد می شه اما مشکل در اینجاست که حروف را هم قبول می کنه .
همانطور که شما گفتید این تکسباکس برای اعداد طراحی شده .

امتحان کردم. خیلی خوب کار کرد. ضمیمه رو ببینید و بهمون بگید چی رو اشتباه زده بودید. قرار نیست هیچی به فرم اضافه کنید. خود کدها همه‌ی کارها رو می‌کنن.

FastCode
جمعه 21 مهر 1391, 15:20 عصر
واقعاً جالبه که چقدر برای کسی که برای تاپیکش حتی یک جست و جو ساده هم نکرده وقت میزارید.

اگر یک بار در گوگل سرچ میکرد میفهمید که Numeric رو اینطوری نمینویسن.

مسعود اقدسی فام
جمعه 21 مهر 1391, 16:12 عصر
واقعاً جالبه که چقدر برای کسی که برای تاپیکش حتی یک جست و جو ساده هم نکرده وقت میزارید.

اگر یک بار در گوگل سرچ میکرد میفهمید که Numeric رو اینطوری نمینویسن.

نیت کمک بود. وگرنه گوگل هم لازم نبود. کد کلاسی که کپی کردن همون عبارت رو داره! چون منصفانه گفتن کد رو از MSDN کپی کردم سعی کردم کمکشون کنم. :)

voice.of.silence
جمعه 21 مهر 1391, 19:26 عصر
امتحان کردم. خیلی خوب کار کرد. ضمیمه رو ببینید و بهمون بگید چی رو اشتباه زده بودید. قرار نیست هیچی به فرم اضافه کنید. خود کدها همه‌ی کارها رو می‌کنن.

ممنون دوست من اشکال من این بود که دو بار برای کلاس نام تعریف کرده بودم و زمانی که یکی از آنها را حذف کردم برنامه به خوبی کار کرد. با تشکر مجدد.
Voice of Silence

مهرداد صفا
جمعه 21 مهر 1391, 20:02 عصر
واقعاً جالبه که چقدر برای کسی که برای تاپیکش حتی یک جست و جو ساده هم نکرده وقت میزارید.

اگر یک بار در گوگل سرچ میکرد میفهمید که Numeric رو اینطوری نمینویسن.
سلام
ببخشید اینجا سایت برنامه نویس است یا کلاس املای زبان انگلیسی؟
اشتباهات املایی در زمان تایپ هم ممکنه رخ بده. شما از کامپایلر C#‎‎ هم حساسترید:متعجب:.
پس منه مبتدی که قصد دارم شروع به برنامه نویسی کنم و زبان هم نمیدانم کجا برم؟ اگر کسی به مشکل و سوال بر نمیخورد یا همه از سایتهای خارجی استفاده میکردند وجود این سایت چه ضرورتی داشت؟ هر کسی در هر سطحی ممکنه به مشکل بر بخوره و اینجا جای سوال و جوابه.

من این کلاس را ایجاد کردم اما پس چطور باید از آن استفاده کرد زیرا من یک تکسباکس گذاشتم و در هنگام اجرا ی برنامه مال من همه نوع کلید را قبل می کنه و صرفا به اعداد حساس نیست و حروف را نیز قبول می کنه
دقت داشته باشید که تا زمانی که کلاس را به صورت کامپوننت به پروژه اضافه نکردید آن را در ToolBox ندارید و باید به روشی که Nima_kyan گفتند استفاده کنید.
اگر باز هم مشکلتون حل نشد بگید تا یک نمونه کامل از همین کلاس با طریقه استفاده براتون قرار بدم:قلب:.

FastCode
جمعه 21 مهر 1391, 22:21 عصر
جالبتر هم شد.

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

http://stackoverflow.com/questions/463299/
http://barnamenevis.org/archive/index.php/t-350234.html
http://barnamenevis.org/archive/index.php/t-17293.html
http://barnamenevis.org/archive/index.php/t-155683.html
http://barnamenevis.org/archive/index.php/t-8691.html

توی این یکی استاد sinpin دعوا کرده:)
http://barnamenevis.org/archive/index.php/t-92852.html

voice.of.silence
شنبه 22 مهر 1391, 09:36 صبح
ممنونم از حسن نظرتان. دوست من این پست شما باعث شد که برایم این سوال ایجاد شود که چرا من نمی تونم این تکستباکس را در تولباکس نی بینم و فقط می توان از آن به صورت داینامیک استفاده کرد؟

FastCode
شنبه 22 مهر 1391, 10:14 صبح
اگر به شکل UserControl به شکل تکی در یک فایل ایجاد کنید باید در Toolbox نمایش داده بشه.
pubilc class MyControl: UserControl{}