PDA

View Full Version : خاصیتی مشابه SelectedIndexChanging برای کمبو باکس



rezaei manesh
پنج شنبه 10 خرداد 1386, 09:42 صبح
سلام
من یک کمبو باکس در فرمم دارم که با تغییر آیتم اون باید اطلاعات فرم بعد از گرفتن مجوز از کاربر ذخیره بشه و اطلاعات آیتم بعدی پر بشه
یعنی وقتی SelectedIndex تغییر می کنه من باید چک کنم ببینم اگه مقادیر فرم تغییر کرد باید یک پیام به کاربر بدم که در صورت تایید اطلاعات ثبت و SelectedIndex تغییر کند
الان مشکل اصلی اینه که موقع نمایش پیام SelectedIndex تغییر پیدا کرده من می خوام قبل از تایید کاربر هیچ چیز تغییر نکنه
اگه کمبو event مربوط به SelectedIndexChanging رو داشت می شود این کار رو کرد اما نداره
SelectedIndexChanged هم که از اسمش مشخصه اگه هم من با کد نویسی دستی سلکت رو تغییر بدم می ره تو حلقه یا اصلا تغییر نمی کنه
چکار کنم؟؟؟

eyes_shut_number1
پنج شنبه 10 خرداد 1386, 11:21 صبح
نمیدونم همینو میخواستین یا نه.

امید وارم کمک کرده باشم



Public Class Form1 Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles

ComboBox1.SelectedIndexChanged If MessageBox.Show("Mikhay Avaz She?",

"Choose", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.No Then

ComboBox1.SelectedIndex = 0


End If
End Sub
End Class

rezaei manesh
پنج شنبه 10 خرداد 1386, 11:32 صبح
سلام
ممنون که جواب دادی اما نه این نیست اگه به این آسونی بود که من تاپیک نمی زدم
من هنگام تغییر ایتم باید اطلاعات قبلی رو در صورت تایید کاربر ثبت کنم و بعد به اتیم بعد برم و وقتی که دارم تاییده از کاربر می گیرم می خوام کاربر مقدار کمبو باکس رو همون مقدار قبلی رو ببینه نه مقدار جدید رو ...
الان دارم با یک لیبل مشکل رو حل می کنم اما اصلا از روشش خوشم نمی یاد یعنی راهی برای این کار نیست که من در هنگام تغییر آیتم کنترل داشته باشم حتما باید بعد از تغییر آیتم روالی باشه؟؟؟

eyes_shut_number1
پنج شنبه 10 خرداد 1386, 12:18 عصر
درسته اگه از کد زیر هم استفاده بشه مافته تو حلقه که تا Yes نزنیم در نمیاد
جالب شدا!
Private Sub ComboBox1_DropDown(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.DropDown

If MessageBox.Show("Mikhay Save She?", "Choose", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.No Then
ComboBox1.DroppedDown = True
End If

omid_Ahmadi
پنج شنبه 10 خرداد 1386, 13:07 عصر
قبلاً توی مورد دیگه ای با این مشکل برخورد کردم، اما وقت زیادی برای اینکه یه روش منطقی برای اون پیدا کنم نداشتم، به همین دلیل از یه روش ساده (اما نه زیاد منطقی) استفاده کردم. اگر دوستان روش بهتری داشتن اعلام کنن.

می تونی یه متغیر سراسری برای کمبو باکس مورد نظرت بگیری، که این متغیر ایندکس آیتمی که الان توی کمبو باکس انتخاب شده است رو داشته باشه.
هر بار که آیتم توی کمبو باکس تغییر کرد، اول عدد توی این متغیر که اندیس آیتم قبلی رو نشون می ده رو بررسی می کنی و هر پروسسی که می خواهی روی اون آیتم انجام می دی (مثلاً از کاربر سوال می پرسی) بعد از اینکه مطمئن شدی آیتم باید تغییر کنه، عددی که داخل متغیر نوشته شده رو آپدیت می کنی که ایندکس جدید رو نمایش بده.
در صورتی هم که کاربر نخواست آیتم تغییر کنه (و به هر دلیل دیگه ای آیتم نباید تغییر کنه) آیتم کمبو باکس رو برابر با همون عددی که در داخل متغیر هست قرار می دی.
البته این کار باعس میشه که یه بار دیگه رویداد فراخوانی بشه، برای اینکه این فراخوانی مجدد باعث ایجاد لوپ نشه، می تونی یه بررسی در اول متد انجام بدی که اگر آیتمی که انتخاب شده و با عدد داخل متغیر سراسری یکی بود، دستورات داخل متد هیچ کدوم اجرا نشن.

eyes_shut_number1
پنج شنبه 10 خرداد 1386, 13:20 عصر
من فکر کنم دوستمون میخواست قبل از این که کومبو باکس مقادیر رو نشون بده اجازه کاربر بیاد یعنی دقیقا قبل از رویداد در دروپ شدن کومبو. درسته؟ :متفکر:

rezaei manesh
پنج شنبه 10 خرداد 1386, 13:25 عصر
سلام
آقای احمدی من الان تغریبا همین کار رو کردم و بخاطر این که رویداد 2 بار اضافه فراخوانی نشه و...
من از یک لیبل کمک گرفتم و اطلاعاتی رو که می خوام موقع نمایش پیام موقتاً جای کمبو قرار بگیره رو در اون می زارم و اونو روی کمبو می ندازم و اینکس ایتم قبلی رو هم نگه می دارم تا اگه احیانا برگشت به عقبی در کار بود از اون استفاده کنمو...
اما کلا بعید می دونم که مایکروسافت عزیز همچین موردی رو در نظر نگرفته باشه و..
احتمالا سواد ما نمی کشه
دوستانی که سوادشون در این زمینه بیشتر می کشه ببینند می تونن راه حلی بدند

eyes_shut_number1 درسته موقع نمایش پیغام نمی خوام متن کمبو تغییر کنه و...

omid_Ahmadi
پنج شنبه 10 خرداد 1386, 14:04 عصر
اما کلا بعید می دونم که مایکروسافت عزیز همچین موردی رو در نظر نگرفته باشه و..
احتمالا سواد ما نمی کشه
دوستانی که سوادشون در این زمینه بیشتر می کشه ببینند می تونن راه حلی بدند


اغلب کنترلها، خاصیتهایی به صورت Changing، Changed و Closing، Closed و ... دارن. این کنترل هم باید قاعدتاً خاصیتی به نام Changing داشته باشه، که نداره. من مقداری هم زمانی که به این مشکل برخورد کردم، MSDN و اینترنت رو گشتم اما راه حلی ندیدم.
حالا ممکنه بعد از کلی گشتن، روشی (یا بهتر بگم کلکی) برای حل این مشکل پیدا بشه. اما این مورد به خاطر طراحی هست، نه به خاطر مورد دیگه ای. وگرنه هیچ دلیل منطقی برای اینکه این مورد، فقط دارای رویداد Changed باشه نیست.

eyes_shut_number1
پنج شنبه 10 خرداد 1386, 23:29 عصر
سلام
راستی
چرا خودت یه رویداد به رویداداش اضافه نمیکنی
API دیگه نه؟
من سوال کردم از اساتید مجتمع فنی
گفتن رویدادی برای این کار نداریم

rezaei manesh
شنبه 12 خرداد 1386, 08:52 صبح
سلام
نه راستی مثل اینکه راه حل منطقی ای نداره باید همون کلک زد
api که نه اما می شه یه رویداد بهش اضافه کرد اما مهم اینه که عملکرد اون رویداد رو چطور تنظیم کنیم که کار همچین آسونی نیست و..
من که با همون روشی که گفتم مشکل رو حل کردم