PDA

View Full Version : سوال: نحوه گذاشتن کلیک راست بر روی دیتاگرید



aftabeshargh
یک شنبه 20 فروردین 1391, 00:43 صبح
سلام
چطور میشه با کلیک راست ردیف مورد نظر در دیتاگرید رو انتخاب کرد (context menu ظاهر بشه ) و در اون گزینه مورد نظر رو انتخاب کرد " ویرایش و حذف و ...؟

moory1364
یک شنبه 20 فروردین 1391, 00:47 صبح
DataGridView (http://barnamenevis.org/showthread.php?335072-DataGridView&highlight=%DA%A9%D9%84%DB%8C%DA%A9+%D8%B1%D8%A7%D8 %B3%D8%AA)

aftabeshargh
یک شنبه 20 فروردین 1391, 00:57 صبح
وقتی context menu به فرم اضافه کردیم و براش منو نوشتیم " بعدش چطور باید بگیم که برا کدوم دیتا گرید هستش ؟

hakim22
یک شنبه 20 فروردین 1391, 09:35 صبح
از میان Properties های DataGridView گزینه ی ContextMenuStrip رو روی منویی که ساختی تنظیم کن !

hakim22
یک شنبه 20 فروردین 1391, 09:38 صبح
برای نمایش هم :


ContextMenuStrip1.Show(New Point(x,y:=))

aftabeshargh
یک شنبه 20 فروردین 1391, 09:53 صبح
سلام
چطور باید contex menu رو فقط روی ردیف های دیتاگرید نشون بدیم ؟ در پایین دیتاگرید هم که ردیفی نیست وقتی کلیک راست میکنم نشون داده میشه !

aftabeshargh
یک شنبه 20 فروردین 1391, 10:15 صبح
دوستان کمک فوری میخوام

tstsst
یک شنبه 20 فروردین 1391, 13:41 عصر
سلام
قبلا برای این کارو کردم ولی الان درست یادم نیست !!!!
از همین کد برای پاک کردن و ... هم استفاده کن :
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs, ByVal e2 As MouseEventArgs) Handles DataGridView1.CellContentClick
Dim point1 As Point = DataGridView1.CurrentCellAddress
If e2.Button = Windows.Forms.MouseButtons.Right Then
ContextMenuStrip1.Show(e2.Location)
If ContextMenuStrip1.Items(1).Selected Then
DataGridView1.BeginEdit(True)
DataGridView1.Item(e.ColumnIndex, e.RowIndex).Value = textbox1.text
End If
End If
End Sub

aftabeshargh
یک شنبه 20 فروردین 1391, 13:45 عصر
سلام
اینایی که گفتید برای چیه ؟

از همین کد برای پاک کردن و ... هم استفاده کن
میشه بیشتر توضیح بدید ؟ تنها مشکلم اینه که نمیخوام در ناحیه خالی در دیتاگرید (پایین دیتاگرید که ردیف وجود نداره) کلیک راست انجام بشه

tstsst
یک شنبه 20 فروردین 1391, 13:57 عصر
اینایی که گفتید برای چیه ؟ ویرایش..

میشه بیشتر توضیح بدید ؟ تنها مشکلم اینه که نمیخوام در ناحیه خالی در دیتاگرید (پایین دیتاگرید که ردیف وجود نداره) کلیک راست انجام بشه
اون پوینت که نوشتم واسه همین بود !
شرط زیرو :

If e2.Button = Windows.Forms.MouseButtons.Right Then
اینجوری بنویس :


If e2.Button = Windows.Forms.MouseButtons.Right And point1.X = e.columnIndex And point1.Y=e.RowIndex Then

aftabeshargh
یک شنبه 20 فروردین 1391, 14:20 عصر
سلام
وقتی اینجوری مینویسم ردیف مورد نظر با کلیک راست انتخاب میشه و context menu هم ظاهر میشه :

If e.Button = Windows.Forms.MouseButtons.Right Then


dgv.Rows(e.RowIndex).Selected = True
End If

ولی خب جایی که ردیف نیست هم کلیک راست میشه !

کد شما رو باهاش ترکیب کردم " دیگه ردیف مورد نظر با کلیک راست انتخاب نمیشه و ایراد بالا رو داره :
Dim point1 As Point = dgv.CurrentCellAddress
If e.Button = Windows.Forms.MouseButtons.Right And point1.X = e.ColumnIndex And point1.Y = e.RowIndex ThenThen
dgv.Rows(e.RowIndex).Selected = True
End If

tstsst
یک شنبه 20 فروردین 1391, 14:58 عصر
سلام
یک چیزایی داره یا دم میاد


Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles DataGridView1.MouseDown
Dim e2 As DataGridView.HitTestInfo
e2 = DataGridView1.HitTest(e.X, e.Y)
Dim point1 As Point = DataGridView1.CurrentCellAddress
If e.Button = Windows.Forms.MouseButtons.Right And Not point1.X = e2.ColumnX And Not point1.Y = e2.RowY Then
DataGridView1.Rows(e2.RowIndex).Selected = True
End If
End Sub

aftabeshargh
یک شنبه 20 فروردین 1391, 15:12 عصر
سلام

وقتی دستورات بالا رو در CellContentClick میزارم از e.x , e.y , e.buton ایراد میگیره و وقتی هم در cellmouseclick میزارم کار خاصی رو انجام نمیدن!

tstsst
یک شنبه 20 فروردین 1391, 15:15 عصر
سلام


وقتی دستورات بالا رو در CellContentClick میزارم از e.x , e.y , e.buton ایراد میگیره و وقتی هم در cellmouseclick میزارم کار خاصی رو انجام نمیدن! آخرین کدی که گذاشتم رو دقیق ندیدی چون CellContentClick نیست MouseDown !
در کل برای ویرایش :
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles DataGridView1.MouseDown
Dim e2 As DataGridView.HitTestInfo
e2 = DataGridView1.HitTest(e.X, e.Y)
Dim point1 As Point = DataGridView1.CurrentCellAddress
If e.Button = Windows.Forms.MouseButtons.Right And Not point1.X = e2.ColumnX And Not point1.Y = e2.RowY Then
DataGridView1.CurrentCell = DataGridView1.Item(e2.ColumnIndex, e2.RowIndex)
DataGridView1.BeginEdit(True)
End If
End Sub
برای حذف :
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles DataGridView1.MouseDown
Dim e2 As DataGridView.HitTestInfo
e2 = DataGridView1.HitTest(e.X, e.Y)
Dim point1 As Point = DataGridView1.CurrentCellAddress
If e.Button = Windows.Forms.MouseButtons.Right And Not point1.X = e2.ColumnX And Not point1.Y = e2.RowY Then
DataGridView1.Item(e2.ColumnIndex, e2.RowIndex).Value = ""
End If
End Sub

aftabeshargh
یک شنبه 20 فروردین 1391, 15:43 عصر
دوست عزیز
من یه contex menu دارم که سه تا گزینه داره که هر کدام از دکمه هاش یه فرمی رو صدا میزنه " همین !
منظورتون از ویرایش و حذف چیه ؟ ممنونم از کمکتون " اما مشکلم حل نشد " میخوام که 1- وقتی جدولم خالیه دیگه context menu نیاد 2- در پایین جدول که ردیفی وجود نداره دیگه context menu ظاهر نشه " که متاسفانه دستورات شما اینکارا رو انجام نداد

tstsst
یک شنبه 20 فروردین 1391, 16:05 عصر
خیلی عذر می خوام الان فهمیدم اینو به شرط اضافه کن
And e2.Type = DataGridViewHitTestType.Cell

در کل :
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As MouseEventArgs) Handles DataGridView1.MouseDown
Dim e2 As DataGridView.HitTestInfo
e2 = DataGridView1.HitTest(e.X, e.Y)
If e.Button = Windows.Forms.MouseButtons.Right And e2.Type = DataGridViewHitTestType.Cell Then
DataGridView1.CurrentCell = DataGridView1.Item(e2.ColumnIndex, e2.RowIndex)
ContextMenuStrip1.Show(e.X, e.Y)
End If
End Sub

و رو contex menu برای هر ایتمش کد مورد نظر رو بنویس :

Private Sub EditToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EditToolStripMenuItem.Click
DataGridView1.BeginEdit(True)
End Sub

Private Sub DeleteToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DeleteToolStripMenuItem.Click
DataGridView1.CurrentCell.Value = ""
End Sub

بازم عذر می خوام

aftabeshargh
یک شنبه 20 فروردین 1391, 16:17 عصر
سلام
نمیشه !
وقت داشتید یه برنامه کوچولو بزارید واقعا ممنون میشم
(طبق عکس های پست بالا سه تا منو داشته باشه که فقط با راست کلیک در روی هر ردیف از جدول ظاهر بشه و با انتخاب هر منو یه مسیج باکس ظاهر بشه )

بابت بی سوادیم عذر میخوام .
موفق باشید

tstsst
یک شنبه 20 فروردین 1391, 16:35 عصر
نمیشه !
برای من می شه ؟! درستم کار می کنه !


وقت داشتید یه برنامه کوچولو بزارید واقعا ممنون میشم
(طبق عکس های پست بالا سه تا منو داشته باشه که فقط با راست کلیک در روی هر ردیف از جدول ظاهر بشه و با انتخاب هر منو یه مسیج باکس ظاهر بشه )
ضمیمه شد !


بابت بی سوادیم عذر میخوام .
موفق باشید
نه من بی سوادترم ! که نمی تونم کلمات رو درست بیان کنم
پیروز باشید

aftabeshargh
یک شنبه 20 فروردین 1391, 16:49 عصر
سلام

از میان Properties های DataGridView گزینه ی ContextMenuStrip رو روی منویی که ساختی تنظیم کن اشکال کارم اینجا بوده که نقل قول بالایی رو انجام داده بودم !

اوکی شد " واقعا ممنون

aftabeshargh
یک شنبه 20 فروردین 1391, 16:59 عصر
سلام مجدد
یه جای روش شما مشکل داره و اون اینکه " وقتی ردیفی رو مثلا در وسط جدول انتخاب میکنم ، context menu چند سانت دورتر ظاهر میشه ! تو برنامه ضمیمه اگه تعداد ردیف های جدول رو زیاد کنید و تست کنید متوجه میشید .

tstsst
یک شنبه 20 فروردین 1391, 17:11 عصر
سلام
اگه این جوری بنویسید درست میشه !

ContextMenuStrip1.Show(Me.Location.X + e.X, Me.Location.Y + e.Y)

aftabeshargh
یک شنبه 20 فروردین 1391, 17:56 عصر
نه تغییری نکرد

tstsst
یک شنبه 20 فروردین 1391, 18:04 عصر
نه تغییری نکرد
بازم برای من درسته ؟!

این جوری بنویس ببین فرقی میکنه ؟!
ContextMenuStrip1.Show(Me.Location.X + DataGridView1.Location.X + e.X, Me.Location.Y + DataGridView1.Location.Y + e.Y)

بالاتره یا پایینتر ؟

aftabeshargh
یک شنبه 20 فروردین 1391, 18:11 عصر
بازم فرقی نکرد " بالاتر نشون میده

aftabeshargh
یک شنبه 20 فروردین 1391, 20:42 عصر
دوستان نظری ندارید؟

tstsst
یک شنبه 20 فروردین 1391, 22:39 عصر
سلام
yشو به یک اندازه زیاد کن برای مثال : (اگه xش درسته)

ContextMenuStrip1.Show(e.X,e.Y + 100)

sehm67
جمعه 25 فروردین 1391, 16:37 عصر
خاصیت MultiSelect از دیتاگرید برابر False


تو قسمت فرم لود برنامه بنویس :


DataGridView1.ContextMenuStrip = ContextMenuStrip1





Private Sub DataGridView1_CellMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArg s) Handles DataGridView1.CellMouseClick



If e.Button = Windows.Forms.MouseButtons.Right Then

DataGridView1.Rows(e.RowIndex).Selected =

True

ContextMenuStrip1.Show()



End If



End Sub

aftabeshargh
جمعه 25 فروردین 1391, 16:43 عصر
سلام
قبلا اینکارو انجام داده بودم " اما فایده ای نداشت " با اینکار تمام دستورات جناب tstsst (http://barnamenevis.org/member.php?161733-tstsst)
بی تاثیر میشه !

sehm67
جمعه 25 فروردین 1391, 16:46 عصر
سلام
قبلا اینکارو انجام داده بودم " اما فایده ای نداشت " با اینکار تمام دستورات جناب tstsst (http://barnamenevis.org/member.php?161733-tstsst)
بی تاثیر میشه !

دستور پست 28 ویرایش شد.

aftabeshargh
جمعه 25 فروردین 1391, 16:53 عصر
بازم اشکال کار اینجاست که در جای خالی دیتاگرید که ردیفی وجود نداره بازم کلیک راست میشه و کانتکس منو میاد!