PDA

View Full Version : حرفه ای: گسترش دادن یک کامپوننت و ایجاد کامپوننت جدید



alimooghashang
یک شنبه 18 تیر 1391, 11:09 صبح
با سلام
من یه کامپوننت کومبو تقویم دارم که میخوام گسترشش بدم
چطوری باید یه کامپوننت با خواص کامپوننت قبلیم بسازم و یه سری تغییرات داخلش اعمال کنم؟
میخوام تاریخش که میلادیه رو تغیر بدم به هجری
ممنون

alimooghashang
سه شنبه 20 تیر 1391, 17:14 عصر
قدیما این فروم خیلی فعال تر بود!
جدیدا هرچی من میذارم کسی جواب نمیده!

the king
سه شنبه 20 تیر 1391, 17:53 عصر
با سلام
من یه کامپوننت کومبو تقویم دارم که میخوام گسترشش بدم
چطوری باید یه کامپوننت با خواص کامپوننت قبلیم بسازم و یه سری تغییرات داخلش اعمال کنم؟
میخوام تاریخش که میلادیه رو تغیر بدم به هجری
ممنون

اگه تغییرات بنیادی لازم نداشته باشه و بقدر کافی قابلیت override کردن داره، صرفا ازش ارث بری کنید و کد هایش رو تغییر دهید.
فرضا این گسترش TextBox است به نحوی که فقط میشه توش اعداد هگزادسیمال تایپ کرد :

public class TextBoxExt : System.Windows.Forms.TextBox
{
private string validChars = "0123456789ABCDEFabcdef";
private string prevText = "";
private bool freeze = false;

public TextBoxExt()
{
base.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
}

protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
{
if (char.IsControl(e.KeyChar) == false)
{
if (validChars.IndexOf(e.KeyChar) == -1)
{
e.Handled = true;
}
}
base.OnKeyPress(e);
}

protected override void OnTextChanged(EventArgs e)
{
if (freeze == false)
{
StringBuilder newText = new StringBuilder();
bool changed = false;
foreach (char c in this.Text)
{
if (validChars.IndexOf(c) >= 0)
{
newText.Append(c);
}
else
{
changed = true;
}
}
if (changed)
{
freeze = true;
int selStart = this.SelectionStart;
this.Text = newText.ToString();
this.SelectionStart = selStart;
freeze = false;
}
if (prevText != this.Text)
{
prevText = this.Text;
base.OnTextChanged(e);
}
}
}
}


وگرنه باید کدش رو با ابزاری مثل Red Gate .NET Reflector بدست بیاورید و تغییر دهید.

alimooghashang
چهارشنبه 21 تیر 1391, 14:21 عصر
ممنون
راسیاتش من میخوام کامپوننت calendercombo از مجموعه janus رو تغییر بدم و تاریخش رو هجری کنم
به نظر شما میشه این کار رو کرد یا نه؟
با تشکر

the king
چهارشنبه 21 تیر 1391, 16:11 عصر
ممنون
راسیاتش من میخوام کامپوننت calendercombo از مجموعه janus رو تغییر بدم و تاریخش رو هجری کنم
به نظر شما میشه این کار رو کرد یا نه؟
با تشکر

شاید، ابزار Red Gate .NET Reflector رو از اینترنت پیدا کرده و دانلود کنید. اجرایش کنید و کمپوننت مورد نظر رو باهاش به کد #C برگردانید.

alimooghashang
چهارشنبه 21 تیر 1391, 16:59 عصر
کامپوننت مال سی شارپ هست مشکلی نداره
من میخوام فقط تاریخ کامپوننت رو هجری کنم

alimooghashang
چهارشنبه 21 تیر 1391, 17:21 عصر
من نسخه ی 30 روزه رو از سایت خودش گرفتم
میشه بگید نحوه استفاده و کارش چطوریه؟
دقیقا باید چیکار کنم؟
ممنون

the king
چهارشنبه 21 تیر 1391, 17:30 عصر
من نسخه ی 30 روزه رو از سایت خودش گرفتم
میشه بگید نحوه استفاده و کارش چطوریه؟
دقیقا باید چیکار کنم؟
ممنون

معمولا نیازی به نصب کردن نداره، صرفا فایل اجرایی ابزار رو اجرا می کنید، صبر می کنید تا صفحه اش نشون داده بشه و
تنظیماتی که ازتون می خواهد رو مطابق تمایل تون مشخص کنید.
در منوی File اش گزینه Open Assembly داره، فایل exe یا dll هر کمپوننت یا برنامه ای که با Net. نوشته شده و می خواهید کد
برنامه اش رو بینید مشخص کنید تا باز اش کنه. در بخش چپ صفحه اون مورد اضافه میشه، شاخه اش رو باز کنید و داخلش
رو ببینید. در سمت راست کد اش رو نشون میده، آخر کد ممکنه Expand Methods را ببینید. رویش کلیک کنید تا کد بصورت کامل
نشون داده بشه.

alimooghashang
چهارشنبه 21 تیر 1391, 18:04 عصر
خب آیا میشه داخل این کد ها رو تغییر داد؟ یا فقط کد رو نمایش میده؟ من الان چطوری باید این کامپوننت رو از میلادی به هجری بکنم؟

the king
چهارشنبه 21 تیر 1391, 19:26 عصر
خب آیا میشه داخل این کد ها رو تغییر داد؟ یا فقط کد رو نمایش میده؟ من الان چطوری باید این کامپوننت رو از میلادی به هجری بکنم؟

اون که فقط کد ها رو نشون میده، کامپایلر که نیست. شما باید بر اساس اون کد ها یک پروژه جدید برای خودتان بسازید و بخشی که تمایل دارید تغییر دهید.
باید دنبال بخشی بگردید که با DateTime کار می کنه.

alimooghashang
چهارشنبه 21 تیر 1391, 20:45 عصر
یا پیغمبر
این که خیلی کاره
من یه تغییر کوچیک میخوام فقط

حالا یه سوال
بعضی جاها اینطوری تعریف شده


private bool a(string);
private bool a(int, int);
private void a(object, ColorSchemeChangedEventArgs);
private void a(object, EventArgs);
private void a(object, KeyEventArgs);
private void a(object, KeyPressEventArgs);
private void a(object, MouseEventArgs);
private void a(Graphics, Rectangle, Pen);
private void a(Graphics, Rectangle, int);
private JNSI A();

اینا دیگه چه مدلیه؟
منم باید ازینا استفاده کنم؟

alimooghashang
چهارشنبه 21 تیر 1391, 20:54 عصر
خب حالا یه سوال دیگه
آیا میشه با همین برنامه یا برنامه ی دیگه، کل یه Namespace رو اکسپرت کنیم؟

the king
چهارشنبه 21 تیر 1391, 22:51 عصر
استفاده کردن از اون لینک Expand Methods انتهای کد ها رو فراموش نکنید وگرنه صرفا Prototype رو نشون میده.
برای NET Reflector. انواع مختلفی از پلاگین (Add-In) هست که می توانید داونلود کرده و به ابزار اضافه کنید تا
قابلیت هاشو بیشتر کنه، فرضا کار تبدیل یکجای یک مجموعه به کد رو ساده می کنه.

alimooghashang
چهارشنبه 21 تیر 1391, 23:55 عصر
دوست عزیز من یک کلاس رو میخوام دوباره بسازمش
ولی ظاهرا اشتباه در کارش هست
اینطوریه



private BorderStyle a = BorderStyle.SunkenLight3D;
private Calendar a;
private CalendarLicenseProvider.a a;
private ControlStyle a;
private DateFormat a = DateFormat.Short;
private EditStyle a;
private HoverMode a = HoverMode.None;



این همه متغیر a؟
به همش هم ارر میده که تکراریه
خب این مشخصه که یه جای کار لنگ میزنه
یا من اشتباه میکنم
یا این dll کد شده اس

alimooghashang
پنج شنبه 22 تیر 1391, 15:30 عصر
و خیلی جاها توابع به این صورته که ارر میده


private void d(object, EventArgs)

آیا قلق خاصی داره که من رعایت نمیکنم یا باید اینا رو دستی خودم تغییر بدم؟

the king
پنج شنبه 22 تیر 1391, 20:45 عصر
احتمال اینکه با یک ابزار Obfuscator از کد کمپوننت شون حفاظت کرده باشند هست.

alimooghashang
جمعه 23 تیر 1391, 10:38 صبح
احتمال اینکه با یک ابزار Obfuscator از کد کمپوننت شون حفاظت کرده باشند هست.

ممنون
خب حالا باید چیکار کرد؟
امیدی هست به این کار؟