PDA

View Full Version : مشکل در UC



na3er-faraji
شنبه 03 مهر 1389, 12:05 عصر
سلام. یه یوزرکنترل ساختم که توش سه تا تکست قرار داره. رو فرمم از این یوزر کنترل به تعداد مورد نیاز میسازم. حالا میخام موقعی که روی یکی از این تکست ها کلیک شد متن داخلش رو تشخیص بدم. من هر کدوم از تکست ها رو به صورت یک پراپرتی تعریف کردم. اما مشکل اینه که وقتی تعداد کنترل ها زیاد میشه دیگه نمیدونم کدوم uc انتخاب شده؟؟؟ چجوری باید تشخیص بدم؟؟؟

Reza_Yarahmadi
شنبه 03 مهر 1389, 13:49 عصر
اول از همه منظورتون از تكست چيه؟
نميدونم درست متوجه منظورتون شدم يا نه! نمونه برنامه زير رو نگاه كنيد.

na3er-faraji
شنبه 03 مهر 1389, 15:33 عصر
دوست عزیز من مشکلم با رویداد حل شد ولی یک مشکل دیگه که دارم اینه که من مثلا سه تا تکست باکس دارم بغل هم حالا یک رویداد نوشتم که وقتی این سه تا تکست باکس پر باشه اجرا میشه. و یک uc دیگه میسازه. من میخام وقتی آخرین uc که ساختم سه تا تکستش پر شد یک uc دیگه بسازم. اما مشکل اینه اگه تو همون uc اول دوباره یک چیزی تایپ کنم باز یه uc جدید میسازم. چون من شرطم رو بر این اساس نوشتم که وقتی هر سه تا نکست باکس پر بود بیاد اینکار رو بکنه و چون شرطم بازم true میشه یک uc جدید میسازه.


private void CheckRowCompleted()
{
if (StuffName != "" && Total != "" & PriceSell != "")
RowCompleted(this, new EventArgs());
}


void buyFactor_RowCompleted(object sender, EventArgs e)
{
AddControl();
}

تابع AddControl میاد یک uc جدید به صفحه اضافه میکنه.

Reza_Yarahmadi
شنبه 03 مهر 1389, 15:43 عصر
راههاي زيادي براي حل اين مشكل هست
يك راه ساده اينه كه يه پراپرتي تعريف كنيد كه در حالت عادي false باشه و وقتي هر 3 تكست باكس كامل ميشه اول چك كنه مقدار اين فيلد false هست يا نه ، اگه بود اونو true كنه و يه كنترل اضافه كنه.
و يا اينكه يه EventArgs خصوصي بنويسيد و توي برنامه اصلي با توجه به مقدار اين EventArgs تصميم بگيريد كه كنترل اضافه بشه يا نه.

na3er-faraji
شنبه 03 مهر 1389, 15:50 عصر
راههاي زيادي براي حل اين مشكل هست
يك راه ساده اينه كه يه پراپرتي تعريف كنيد كه در حالت عادي false باشه و وقتي هر 3 تكست باكس كامل ميشه اول چك كنه مقدار اين فيلد false هست يا نه ، اگه بود اونو true كنه و يه كنترل اضافه كنه.
و يا اينكه يه خصوصي بنويسيد و توي برنامه اصلي با توجه به مقدار اين EventArgs تصميم بگيريد كه كنترل اضافه بشه يا نه.

خوب دوست عزیز من خودمم همین کارو کردم اما مشکل اینه که اگه کاربر باز بیاد رو همون uc اول و فقط یک حرف وارد کنه چون هر سه تا تکست پره دوباره شرط true میشه و یک uc جدید. من باید بفهم آیا اون تکست باکس هایی که داره پر میشه نکست باکس های آخرین uc یا نه؟ چجوزی میتونم اینو بفهمم؟؟؟ متاسفانه قادر به نوشتن EventArgs هم نیستم . کسی راهی به ذهنش میرسه؟؟؟

Reza_Yarahmadi
شنبه 03 مهر 1389, 16:02 عصر
اگر توي يوزر كنترل به اين صورت عمل كنيد نبايد مشكلي پيش بياد

bool IsRowCompleted = false;


private void CheckRowCompleted()
{
if (!IsRowCompleted && StuffName != "" && Total != "" & PriceSell != "")
{
RowCompleted(this, new EventArgs());
IsRowCompleted = true;
}
}
تاسفانه قادر به نوشتن EventArgs هم نیستمEventArgs يك كلاس مثل بقيه كلاسهاست!!!

na3er-faraji
شنبه 03 مهر 1389, 17:43 عصر
اگر توي يوزر كنترل به اين صورت عمل كنيد نبايد مشكلي پيش بياد

متاسفانه جواب نمیده چونکه یک بار که فیلد true میشه ما اگه بازم برگردیم رو همون user control و شرط چک بشه دوباره یک uc جدید ساخته میشه؟؟؟ دوستان کمک کنید که خیلی گیرم.

na3er-faraji
شنبه 03 مهر 1389, 17:55 عصر
يك راه ساده اينه كه يه پراپرتي تعريف كنيد كه در حالت عادي false باشه و وقتي هر 3 تكست باكس كامل ميشه اول چك كنه مقدار اين فيلد false هست يا نه ، اگه بود اونو true كنه و يه كنترل اضافه كنه.

ممنون درست شد. از همین روش استفاده کردم .