PDA

View Full Version : سوال: چطوری کد KeyPress را در یک کلاس قرار دهیم



docendo
سه شنبه 15 اسفند 1391, 13:23 عصر
چطوری کد زیر را که مربوط به KeyPress یک تکست باکس است جداگانه در یک کلاس قرار دهیم بجای اینکه زیر هر تکست باکس چند سطر کد بنویسیم با یک کلمه کدها را فراخوانی میکنیم





private void Digit(object sender, KeyPressEventArgs e)
{
if (char.IsDigit(e.KeyChar) | e.KeyChar == (char)Keys.Back)
e.Handled = false;
else
e.Handled = true;
}



private void textbox1_KeyPress(object sender, KeyPressEventArgs e)
{
Digit();
}

مهرداد صفا
سه شنبه 15 اسفند 1391, 13:47 عصر
با سلام.
می توانید به طور مستقیم تابع Digit را برای هندل کردن رویداد، به رویداد Textbox.Click متصل کنید:

Textbox1.click+=new KeyPressEventHandler(Digit);


البته منطقی تر این است که یک کلاس مجزا داشته باشید و از TextBox ارثبری کنید و کد لازم را در آن بنویسید و به جای TextBox استفاده کنید.

docendo
سه شنبه 15 اسفند 1391, 14:13 عصر
با سلام.
می توانید به طور مستقیم تابع Digit را برای هندل کردن رویداد، به رویداد Textbox.Click متصل کنید:

Textbox1.click+=new KeyPressEventHandler(Digit);


البته منطقی تر این است که یک کلاس مجزا داشته باشید و از TextBox ارثبری کنید و کد لازم را در آن بنویسید و به جای TextBox استفاده کنید.

تشکر از پاسختان

من هدفم اینکه کد نویسی را به حداقل برسانم در غیر این حالت همون زیر کفایت میکند


if (char.IsDigit(e.KeyChar) | e.KeyChar == (char)Keys.Back)
e.Handled = false;
else
e.Handled = true;

pedram.11
سه شنبه 15 اسفند 1391, 15:04 عصر
شما بجای اینکه واسه هر تکست باکس این متد رو بنویسید کافیه توی قسمت Events مربوط به هرتکست باکس این متد رو به رویداد KeyPress معرفی کنی و همه تکست باکس ها میتونن از همین یکی استفاده کنن

docendo
سه شنبه 15 اسفند 1391, 15:45 عصر
شما بجای اینکه واسه هر تکست باکس این متد رو بنویسید کافیه توی قسمت Events مربوط به هرتکست باکس این متد رو به رویداد KeyPress معرفی کنی و همه تکست باکس ها میتونن از همین یکی استفاده کنن

با درود

من نوشته ام که هدفم جلو گیری از تکرار است شما گویا پست اول منو نخوانده اید و مستقیم به پست آخری پاسخ نوشته اید من در اول نوشته ام که
چطوری کد KeyPress را در یک کلاس جداگانه قرار دهیم که بتوان این کلاس را تکست باکسهای دیگری هم استفاده کرد و الا کد مربوط به رویداد KeyPress را پیشتر نوشته ام


شما اگر ایده و فکری دارید با نوشتن چند سطر کد بیایید ممنون میشوم

pedram.11
سه شنبه 15 اسفند 1391, 15:59 عصر
دوست من من هم اینی که گفتم برای جلوگیری از تکرار هست، منو نزن بیشتر توضیح میدم شاید منظور بنده رو بهتر متوجه بشید
شما یک متد دارید به صورت:
private void Digit(object sender, KeyPressEventArgs e)
{
if (char.IsDigit(e.KeyChar) | e.KeyChar == (char)Keys.Back)
e.Handled = false;
else
e.Handled = true;
}
حالا فرض کنید شما 10تا تکستباکس دارید و میخواهید توی اینها فقط عدد تایپ بشه، برای اینکار همرو انتخاب کنید و توی قسمت Events توی رویداد KeyPress این کلمه رو تایپ کنید: Digit
اگه حالا باز هم اونی نیس که شما میخواهید(جلوگیری از تکرار) بیا منو بزن

docendo
سه شنبه 15 اسفند 1391, 16:27 عصر
دوست من من هم اینی که گفتم برای جلوگیری از تکرار هست، منو نزن بیشتر توضیح میدم شاید منظور بنده رو بهتر متوجه بشید
شما یک متد دارید به صورت:
private void Digit(object sender, KeyPressEventArgs e)
{
if (char.IsDigit(e.KeyChar) | e.KeyChar == (char)Keys.Back)
e.Handled = false;
else
e.Handled = true;
}
حالا فرض کنید شما 10تا تکستباکس دارید و میخواهید توی اینها فقط عدد تایپ بشه، برای اینکار همرو انتخاب کنید و توی قسمت Events توی رویداد KeyPress این کلمه رو تایپ کنید: Digit
اگه حالا باز هم اونی نیس که شما میخواهید(جلوگیری از تکرار) بیا منو بزن



با درود دوباره

شما به پست اول من توجه نکرده اید همنطوری مینویسید این کدی دادید را خودم پیشتر در پست اول نوشته ام خواهش میکنم تکرار مکرر نکنید به پست اول توجه کنید به اشتباه خود پی میبرید
(http://barnamenevis.org/showthread.php?387446-%DA%86%D8%B7%D9%88%D8%B1%DB%8C-%DA%A9%D8%AF-KeyPress-%D8%B1%D8%A7-%D8%AF%D8%B1-%DB%8C%DA%A9-%DA%A9%D9%84%D8%A7%D8%B3-%D9%82%D8%B1%D8%A7%D8%B1-%D8%AF%D9%87%DB%8C%D9%85&p=1715617&viewfull=1#post1715617)

pedram.11
سه شنبه 15 اسفند 1391, 16:52 عصر
بفرمائید سورس
100929

docendo
سه شنبه 15 اسفند 1391, 17:30 عصر
بفرمائید سورس
100929

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

pedram.11
سه شنبه 15 اسفند 1391, 17:37 عصر
اونی که هدف من بود نیست
پیشتر نوشته ام که از یک کلاس جداگانه استفاده کنم
کافیه یک کلاس تعریف کنید و آدرس کلاس رو بدید
نمونه سورس:
100941

docendo
سه شنبه 15 اسفند 1391, 18:07 عصر
لطف کردید بی نهایت از شما سپاسگذارم
دستتان درد نکند راه افتاد

مهرداد صفا
سه شنبه 15 اسفند 1391, 18:08 عصر
با سلام.
همانطور که گفتم می توانید یک کلاس از TextBox مشتق کنید و کد مورد نظر را در آن بنویسید:

//in the name of god
//صل الله علی محمد و آله

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public class NumericTextBox : TextBox
{
protected override void OnKeyPress(KeyPressEventArgs e)

{
if (char.IsDigit(e.KeyChar) | e.KeyChar == (char)Keys.Back)
base.OnKeyPress(e);
else
e.Handled = true;

}
}


public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
for (int i = 1; i <= 3; i++)
{
NumericTextBox text1 = new NumericTextBox();
text1.Top = i * 120;
this.Controls.Add(text1);
}
}
}
}