PDA

View Full Version : نحوه ساخت dll



amir_pro
جمعه 16 آذر 1386, 22:39 عصر
با سلام به دوستان
ببخشید که این موضوع را زدم ولی جستجو کردم و چیز مفیدی پیدا نکردم

از دوستان تقاضا دارم که تمام مراحل سوال را پاسخ دهند.با تشکر

1)می خوام فایل dll بسازم که داخل از کلاس Textbox ارث برده باشه و توی رویداد Onenter کدی را بنویسم که رنگ background مربوط به textbox را عوض کنه و توی رویداد onleave کدی را بنویسم که به حالت اولش برگردونه.

این تعریف کلاسم ولی رنگ را عوض نمیکنه.


using System;
using System.Windows;
using System.Windows.Forms;
using System.Drawing;

namespace ValidText
{
/// <summary>
/// Summary description for NumericTextBox.
/// </summary>
public class NumericTextBox:System.Windows.Forms.TextBox
{
public NumericTextBox():base()
{
this.KeyPress+=new KeyPressEventHandler(NumericTextBox_KeyPress);
this.Enter += new EventHandler(NumericTextBox_Enter);
this.Leave += new EventHandler(NumericTextBox_Leave);
}

void NumericTextBox_Leave(object sender, EventArgs e)
{
NumericTextBox num = new NumericTextBox();
num.BackColor = Color.White;
}

void NumericTextBox_Enter(object sender, EventArgs e)
{
NumericTextBox num = new NumericTextBox();
num.BackColor = Color.Red;
num.SelectAll();
}

private void NumericTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar)))
{
e.Handled= true;
}
}
}
}

sinpin
شنبه 17 آذر 1386, 08:14 صبح
با سلام به دوستان
ببخشید که این موضوع را زدم ولی جستجو کردم و چیز مفیدی پیدا نکردم

از دوستان تقاضا دارم که تمام مراحل سوال را پاسخ دهند.با تشکر

1)می خوام فایل dll بسازم که داخل از کلاس Textbox ارث برده باشه و توی رویداد Onenter کدی را بنویسم که رنگ background مربوط به textbox را عوض کنه و توی رویداد onleave کدی را بنویسم که به حالت اولش برگردونه.

این تعریف کلاسم ولی رنگ را عوض نمیکنه.


using System;
using System.Windows;
using System.Windows.Forms;
using System.Drawing;

namespace ValidText
{
/// <summary>
/// Summary description for NumericTextBox.
/// </summary>
public class NumericTextBox:System.Windows.Forms.TextBox
{
public NumericTextBox():base()
{
this.KeyPress+=new KeyPressEventHandler(NumericTextBox_KeyPress);
this.Enter += new EventHandler(NumericTextBox_Enter);
this.Leave += new EventHandler(NumericTextBox_Leave);
}

void NumericTextBox_Leave(object sender, EventArgs e)
{
NumericTextBox num = new NumericTextBox();
num.BackColor = Color.White;
}

void NumericTextBox_Enter(object sender, EventArgs e)
{
NumericTextBox num = new NumericTextBox();
num.BackColor = Color.Red;
num.SelectAll();
}

private void NumericTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar)))
{
e.Handled= true;
}
}
}
}


قسمتهای قرمز رنگ کد شما مشکل داره. شما دارید یک تکست باکس جدید میسازید و خواض اون رو تغییر میدید، در حالیکه باید همون تکست باکس رو تغییر بدید. از کلمه کلیدی this برای اشاره به current object استفاده کنید.
مثال زیر یک تکست باکس مشتق شده است که علاوه بر چیزی که شما خواسته بودید دکمه enter نیز کار دکمه tab رو انجام میده.


public partial class DerivedTextBox : TextBox
{
public DerivedTextBox()
{
InitializeComponent();
}

public DerivedTextBox(IContainer container)
{
container.Add(this);

InitializeComponent();
}

#region Trap Enter
private bool enterToTab;

public bool EnterToTab
{
get { return enterToTab; }
set { enterToTab = value; }
}

protected override bool ProcessDialogKey(Keys keyData)
{
if (EnterToTab == true && keyData == Keys.Return)
{
SendKeys.Send("{TAB}");
return true;
}
else
{
return base.ProcessDialogKey(keyData);
}
}
#endregion

#region Indicate selected textbox
private void DerivedTextBox_Leave(object sender, EventArgs e)
{
this.BackColor = Color.White;
}

private void DerivedTextBox_Enter(object sender, EventArgs e)
{
this.BackColor = Color.LightYellow;
}
#endregionسورس رو میتونید از اینجا (پست شماره 29) دانلود کنید : http://barnamenevis.org/forum/showthread.php?p=423211#post423211

amir_pro
شنبه 17 آذر 1386, 11:46 صبح
ممنون از جوابتون- ولی شما کلاس درست کردید اگه فقط output type را روی class library تنظیم کنیم کافیه که به dll تبدیل بشه یا باید کار دیگه ای هم کرد؟

sinpin
شنبه 17 آذر 1386, 14:03 عصر
ممنون از جوابتون- ولی شما کلاس درست کردید اگه فقط output type را روی class library تنظیم کنیم کافیه که به dll تبدیل بشه یا باید کار دیگه ای هم کرد؟

بله کافیه.