PDA

View Full Version : حرفه ای: ساخت کامپوننت و دادن زیبایی به کامپوننت و امکانات زیاد به کامپوننت



davidrobert
پنج شنبه 15 مرداد 1394, 17:19 عصر
سلام به دوستان امید وارد این تاپیک مثل تاپیک قبلی من از هم جدا نشه و پخش پلا نشه توسط مدیران سایت.
دوستان علتی که این تاپیک ایجاد کردم این هستش که ما همگی داریم از کامپوننت های شرکت های دیگه استفاده میکنیم. یکی از بچه های انجمن " حرفی زد و گفت این کامپوننت ها ک رک هستش و امکانش هستش از کار بیفتد و خود کامپوننت های دات نت بهتر هستش و سرعت بهتر استش ولی از کامپوننت های مثل دیو کامپوننت استفاده کنیم یا تلریک و امثال اینها باعث افت سرعت شده در کار با برنامه دوستانی که تونایی کامپوننت نویسی دارن بیان ابزاری های textbox متن، DataGridview ، Combo Box ، Label و امثال این رو درست کنیم و خودمون ویژگی و زیبای بدیم اگه کسی موافق هستش سورس یک کامپوننت رو قرار بدیم و بگیم چه امکاناتی قرار دادیم جدید تا دیگر دوستان هم از ش استفاده کنن تا سرعت کار بیشتر بشه.

davidrobert
پنج شنبه 15 مرداد 1394, 17:41 عصر
این کادر متن با امکانات که در تنظیمات خود داره. این رو هم بگم که این کادر متن توسط بچه های انجمن ساخته شده نه بنده فقط دست من رسیده ازش استفاده میکنم.
کادر متن معمولی
این کادر متن عددی نباشه یعنی رشته بگیره
این کادر متن عددی باشه یعنی عدد بگیره
این کادر متن رشته باشه یا همون پولی که سه واحد اعشار جدا کنه
و واتر مارک داره
امکانت دیگه شامل جلو دادن رنگ دل خواه با گرفتن رویداد رنگ کادر متن که عملیات نوشتن انجام میشه رنگش سبز میشه و دوم قابلیت امکان اینتر زدن روی کادر متن و رفتن به کادر متن بعدی.
133982
این هم سورس کامپوننت . دوستن اگه کسی نظری داره و میتونه تغییر روی این کد ایجاد کنه و بگه چه امکانی روی این کامپوننت انجام شده تا بتونیم ابزار های خودمان رو توسعه بدیم و از ابزار های مثل تلریک و اینها استفاده نکنیم. و خودمون کامپوننتی که میخواهیم بسازید که سرعت کار خودمون بالا بره و همین طور برنامه.
این هم سورس ساخت کامپوننت
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;

namespace TxtMulti
{
public class TxtMulti : TextBox
{
private Color bk;
private Color bkfocus;
private type typetextbox;
private IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (this.components != null))
{
this.components.Dispose();
}
base.Dispose(disposing);
}

private void InitializeComponent()
{
this.components = new Container();
}

protected override void OnCreateControl()
{
this.OnLeave(null);
}
public string Watermark { get; set; }
protected override void OnLeave(EventArgs e)
{
if (string.IsNullOrEmpty(this.Text))
{
this.Text = this.Watermark;
this.ForeColor = Color.DarkGray;
this.Font = new Font("tahoma", 9f, FontStyle.Italic);
}
}

public TxtMulti()
{
this.bk = base.BackColor;
base.TextChanged += new EventHandler(this.ExtdTextBox_TextChanged);
base.KeyPress += new KeyPressEventHandler(this.ExtdTextBox_KeyPress);
base.LostFocus += new EventHandler(this.ExtdTextBox_LostFocus);
base.Enter += new EventHandler(this.ExtendTextBox_Enter);
base.KeyDown += new KeyEventHandler(this.TextBoxReza_KeyDown);
this.bkfocus = Color.FromArgb(0xcc, 0xff, 0xbd);
//strCrncySymbol = "ریال";
//strCrncyGrpSep = ",";
base.RightToLeft = RightToLeft.Yes;
}

private void changelanguge(string lname)
{
foreach (InputLanguage language in InputLanguage.InstalledInputLanguages)
{
if (language.Culture.TwoLetterISOLanguageName == lname)
{
Application.CurrentCulture = language.Culture;
Application.CurrentInputLanguage = language;
}
}
}

private void ExtdTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (this.typetextbox == type.floating)
{
if ((!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar)) && (e.KeyChar != '.'))
{
e.Handled = true;
}
if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
{
e.Handled = true;
}
}
else if (this.typetextbox == type.numeric)
{
if (!(char.IsControl(e.KeyChar) || char.IsDigit(e.KeyChar)))
{
e.Handled = true;
}
}
else if (this.typetextbox == type.money)
{
if (!(char.IsControl(e.KeyChar) || char.IsDigit(e.KeyChar)))
{
e.Handled = true;
}
}
else if (((this.typetextbox != type.general) && (this.typetextbox == type.nonumeric)) && (char.IsDigit(e.KeyChar) || (e.KeyChar == '.')))
{
e.Handled = true;
}
}

private void ExtdTextBox_LostFocus(object sender, EventArgs e)
{
this.BackColor = this.bk;
//base.Width -= 6;
//base.Left += 3;
}

private void ExtdTextBox_TextChanged(object sender, EventArgs e)
{
if ((this.typetextbox == type.money) && (this.Text != ""))
{
this.Text = Convert.ToDecimal(this.Text).ToString("#,#", CultureInfo.InvariantCulture);
}
base.Select(this.Text.Length, 0);
}

private void ExtendTextBox_Enter(object sender, EventArgs e)
{
this.changelanguge("fa");
this.bk = base.BackColor;
this.BackColor = this.bkfocus;
if (this.Text.Trim().Equals(this.Watermark))
{
this.Text = null;
this.ForeColor = Color.Black;
this.Font = new Font("tahoma", 9f, FontStyle.Regular);
}
//base.Width += 6;
//base.Left -= 3;
//base.Select(0, this.Text.Length);
}

private void TextBoxReza_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
SendKeys.Send("{tab}");
}
}

[DisplayName("Type"), Category("Extended Properties"), Description("sets type TextBox"), Browsable(true)]
public type typetxt
{
get
{
return this.typetextbox;
}
set
{
this.typetextbox = value;
}
}

[Browsable(true), Category("Extended Properties"), Description("set Backcolor Focuse"), DisplayName("BackColorFocus")]
public Color WaterMarkBackColor
{
get
{
return this.bkfocus;
}
set
{
this.bkfocus = value;
base.OnTextChanged(new EventArgs());
}
}

public enum type
{
general,
nonumeric,
numeric,
money,
floating
}
}
}

Mahmoud.Afrad
پنج شنبه 15 مرداد 1394, 17:44 عصر
یک تاپیک هرگز نمیتونه از پس این موضوع بر بیاد و با گذشت زمان به تاپیکی با انواع کد برای انواع کامپوننت تبدیل میشه که بزرگترین مشکلش اینه که جستجو در اینچنین تاپیکی ناموفق خواهد بود. (تاپیکهای قبل شما هم به همین دلیل به چند تاپیک مجزا تبدیل شدند)
اگر قصد آموزش دارید بایست یک تاپیک برای یک کامپوننت ایجاد و در پست اول همون تاپیک آموزش اولیه ای رو قرار بدید. منظورم از آموزش اینه که عملی که کد شما انجام میده رو بایست شرح بدید و فقط قرار دادن کد کافی نخواهد بود. در اینصورت اشخاص مختلف میتونن اونو گسترش بدن و در همون تاپیک منتشر کنن.

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

davidrobert
پنج شنبه 15 مرداد 1394, 19:11 عصر
یک تاپیک هرگز نمیتونه از پس این موضوع بر بیاد و با گذشت زمان به تاپیکی با انواع کد برای انواع کامپوننت تبدیل میشه که بزرگترین مشکلش اینه که جستجو در اینچنین تاپیکی ناموفق خواهد بود. (تاپیکهای قبل شما هم به همین دلیل به چند تاپیک مجزا تبدیل شدند)
اگر قصد آموزش دارید بایست یک تاپیک برای یک کامپوننت ایجاد و در پست اول همون تاپیک آموزش اولیه ای رو قرار بدید. منظورم از آموزش اینه که عملی که کد شما انجام میده رو بایست شرح بدید و فقط قرار دادن کد کافی نخواهد بود. در اینصورت اشخاص مختلف میتونن اونو گسترش بدن و در همون تاپیک منتشر کنن.

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

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

Mahmoud.Afrad
پنج شنبه 15 مرداد 1394, 19:19 عصر
من مخالف این کار(هدف شما) نیستم بلکه حتی اگر بتونم کمک هم میکنم.
اما یکی از قوانین سایت اینه که هر تاپیک یک موضع(البته نه موضوع کلی) باید داشته باشه. مثلا همین تکست باکس. میتونه یک تاپیک مجزا باشه .
در مورد دسترسی به صورت یکجا(فهرست) میتونم لینک رو به تاپیکهای اعلان (هزار و یک نکته یا ...) اضافه کنم.

davidrobert
پنج شنبه 15 مرداد 1394, 19:45 عصر
من مخالف این کار(هدف شما) نیستم بلکه حتی اگر بتونم کمک هم میکنم.
اما یکی از قوانین سایت اینه که هر تاپیک یک موضع(البته نه موضوع کلی) باید داشته باشه. مثلا همین تکست باکس. میتونه یک تاپیک مجزا باشه .
در مورد دسترسی به صورت یکجا(فهرست) میتونم لینک رو به تاپیکهای اعلان (هزار و یک نکته یا ...) اضافه کنم.

دوست عزیز این تایک رو عنوانش رو فقط برای تکس باکس ویژه قرار دادم