PDA

View Full Version : کنترل روی محتویات سلول DataGridView با زدن کلید Tab,Enter و یا کلید دیگر



saghez
یک شنبه 29 دی 1387, 07:42 صبح
با سلام
من برنامه ای نوشته ام که حاوی یک دیتاگرید است. میخواهم هنگامی که کاربر کلید اینتر و یا tab یا هر کلید دیگری را میزند بتوانم روی محتویات خانه ای که روی ان کار میکند کنترل داشته باشم.
با این وجود در کمال تعجب میبینم که متدهای keypress,keyup,keydown برای دیتاگرید اصلا کار نمیکند و یا گاهی کار میکند.
برای اطلاع دوستان در فرم مقدار keypreview-=true است و در دیتاگرید هم مقدار editmode=editonEnter میباشد.

اگر برای رفع مشکل من راهنمایی فرمایید ممنون شما خواهم بود. در ضمن مباحث دیگری که در همین سایت هست را هم دنبال کرده ام اما به نتیجه ای نرسیده ام

ACorvinus
یک شنبه 29 دی 1387, 10:46 صبح
من یه کمی راهنماییت می کنم، بقیش با خودت .

این دستور رو در نظر بگیر :


X_Key = DataGridView1.Rows.Item(DataGridView1.CurrentRow.I ndex).Cells(0).Value.ToString


توضیحات:

X_Key یه متغیر هست از نوع String که اطلاعات یه Cell ( سلول ) توش ذخیره میشه.
DataGridView1.CurrentRow.Index شماره سطر رو بر میگردونه.
Cells(0).Value مقدار سلول اول رو بر میگردونه.

حالا خودت به جای صفر یه دستوری بنویس که وقتی کاربر روی سلولی کلیک کرد شماره اون رو برگردونه تا شما بتونین هر بلایی به سر مقدار داخل سلولی که در X_Key ذخیره میشه، بیارین !!!

saghez
یک شنبه 29 دی 1387, 14:23 عصر
با تشکر از دوست عزیزی که راهنمایی کرده بودند
ببینید مشکل من دسترسی به تک تک سلولها نیست
مشکل من ان است که حس کنم کی عددی وارد شده یا نه
مثلا فرض کن دیتا گریدی داریم که میخواهیم در هر ردیف ان یک عدد منفی و یک عدد مثبت و یک عدد صفر باشد
هنگامی که کاربر از سلولی به سلول دیگر در یک ردیف میرود اینکار را با tab یا کلیدهای جهت دار انجام میدهد. خب من میخواهم اگر قبلا در یک ردیف عدد منفی وارد کرده و برای سلول دیگر در همان ردیف باز عدد منفی وارد کرده و میخواهد به سلول سوم در همان ردیف برود به او تذکر بدهم که دو سلول منفی قابل قبول نیست

در کل من با رویداد keypress در دیتا گرید مشکل دارم میخواهم بدانم چرا این رویداد برای تمام کلیدهای صفحه کلید که فشرده میشود فراخوانی نمیشود و چه باید کرد که بمحض فشار یک کلید صفحه کلید این رویداد فراخوانی شود

ACorvinus
یک شنبه 29 دی 1387, 15:59 عصر
من جوابتو با توجه به این قسمت میگم، بازم میگم من فقط راهنمایی می کنم، اصل کار با خودت.

با توجه به این مطلبی که گفتی :
(در کل من با رویداد keypress در دیتا گرید مشکل دارم میخواهم بدانم چرا این رویداد برای تمام کلیدهای صفحه کلید که فشرده میشود فراخوانی نمیشود و چه باید کرد که بمحض فشار یک کلید صفحه کلید این رویداد فراخوانی شود)

راست میگی، رویداد Keypress برای همه کلید ها اتفاق نمی افته که کلید های جهت دار هم از جمله این کلید ها هستند.

من در VB6 این کار رو کردم که مطمئن باش اگه کمی وقت بزاری در VB2008 هم این کارو میتونی انجام بدی .

راهنمایی: اگه میخوای وقتی یکی از کلید های جهت دار رو فشار میدی قطعه کدی اجرا بشه، کد رو در بخش رویداد KeyDown مربوط به کنترل مد نظرت بنویس.
KeyCode مربوط به کلید سمت بالا = 38
KeyCode مربوط به کلید سمت چپ = 37
KeyCode مربوط به کلید سمت پایین = 40
KeyCode مربوط به کلید سمت راست = 39

saghez
دوشنبه 30 دی 1387, 21:52 عصر
دوست عزیز این رویداد حتی برای حروف و اعداد نیز فعال نمیشود(اصلا نمیدانم چرا باید اینطوری باشد)