PDA

View Full Version : حرفه ای: خطا در خواندن صفات Attribute های یک اسمبلی



beh_develop
پنج شنبه 24 تیر 1389, 07:03 صبح
سلام دوستان ،

من یه مشکل پیدا کردم که چند ماهی هست که بیخیالش بودم ، گفتم این تاپیک رو ایجاد کنم شاید کسی پیدا شه بتونه کمکم کنه. آخه از هرکی پرسیدم اصلا منظورم رو متوجه نشده تا بخواد مشکملو جواب بده.

من یه Attribute نوشتم که اونو می خوام به فرم هایی بدم که حالت Lookup دارن (جداول پایه پایگاه داده ) ، و یه کومبو باکس نوشتم که می خوام سطر اولش عبارت افزودن رکود جدید همیشه باشه . و کاربر مثلا هنگامی که می خواد کالایی رو از کمبو انتخاب کنه ، اگه کالا نباشه می تونه رو اولین سطر کلیک کنه و فرم مربوطه رو باز کنه و کالا رو تعریف و بعد از بستن فرم به صورت خودکار اطلاعات کالای جدید رو به کومبو اضافه و انتخاب کنه.

تا ایجا مقدمه ، حالا مشکلمو خوب گوش کنین :

من یه Property به کومبو باکس اضافه کردم که تو اون مسیر یک فایل DLL یا EXE رو بهش می تونین بدین ، و در این فایل تمامی object هایی که اون صفتی که من بهشون دادم رو لیست می کنه، این کار تو حالت runtime درست کار می کنه و به صورت دستی ( به صورت کد و نه با استفاده از proprties ) درست کار می کنه و تو حالت Design وقتی خوام مسیر خود این پروژه رو بدم که فرم توش هست ، نمی تونه لیست object ها رو پیدا کنه.

کدمربوط به پیدا کردن اشیایی که صفت مورد نظر رو دارن :

using (OpenFileDialog openFileDlg = new OpenFileDialog())
{
openFileDlg.Filter = "Assemblies (*.dll;*.exe)|*.dll;*.exe";
if (openFileDlg.ShowDialog() == DialogResult.OK)
{
txtAssemblyPath.Text = openFileDlg.FileName;

Assembly asm = Assembly.LoadFrom(openFileDlg.FileName);
DataTable dt = new DataTable();

dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("TypeName", typeof(string));

foreach (Type t in asm.GetTypes())
{
object[] obj = t.GetCustomAttributes(false);
foreach (object o in obj)
{
if (o is LookupFormAttribute)
{
LookupFormAttribute addnewRecFormAtt = o as LookupFormAttribute;
dt.Rows.Add(new object[] { t.ToString() + "\t[ " + addnewRecFormAtt.FormName + " ]", t.ToString() });
}
}
}
cbForms.DataSource = dt;
cbForms.DisplayMember = "Name";
cbForms.ValueMember = "TypeName";
cbForms.SelectedIndex = -1;


asm = null;

}
}اینم کد صفتی که نوشتم :

public class LookupFormAttribute : Attribute
{
public LookupFormAttribute(string formName, string keys)
{
this.FormName = formName;
this.Keys = keys;
}

public string FormName { get; set; }
public string Keys { get; set; }

}و مثال مربوط به استفاده صفت در فرم :

[DBI.Utility.Controls.LookupForm("اطلاعات پرسنل","employeeID")]
public partial class Form2 : RadForm
{
public Form2()
{
InitializeComponent();

}
}علت اینکه من میخوام این کنترل رو بنویسم ، فقط برای اینه که برنامه نویسای دیگه بتونن خیلی راحت به کومبو یه فرم رو ربط بدن و بتونه از همون کومبو یه رکورد اضافه کنه و دیگه نیازی به نوشتن کد های طولانی نباشده.

حالا کسی هست که بتونه بهم کمک کنه ؟

beh_develop
پنج شنبه 24 تیر 1389, 13:19 عصر
واقعاً کسی نیست که بتونه کمکم کنه؟

beh_develop
جمعه 25 تیر 1389, 11:09 صبح
دوستان ، اساتید و مدیران محترم تاپیک، کسی نیست کمکم کنه؟