PDA

View Full Version : خطا در ايجاد منو



sh2007
دوشنبه 07 دی 1388, 10:54 صبح
دوستان سلام
من اين كد رو براي ايجاد منو نوشتم اما خطا مي دهد


Dim T_I As New ToolStripMenuItem

Dim I As Short = 0

For I = 0 To (DataGridView1.ColumnCount - 1)

T_I.Checked = True
T_I.Name = DataGridView1.Columns(I).DataPropertyName
T_I.Text = DataGridView1.Columns(I).HeaderText
ContextMenuStrip.Items.Add(T_I)

Next I
DataGridView1.ContextMenuStrip = ContextMenuStrip





خطاتوي اين خطه
ContextMenuStrip.Items.Add(T_I)
كه متن خطا اينه
Object reference not set to an instance of an object.

حامد مصافی
دوشنبه 07 دی 1388, 11:05 صبح
Dim I As Short = 0

For I = 0 To (DataGridView1.ColumnCount - 1)
Dim T_I As New ToolStripMenuItem

T_I.Checked = True
T_I.Name = DataGridView1.Columns(I).DataPropertyName
T_I.Text = DataGridView1.Columns(I).HeaderText
ContextMenuStrip.Items.Add(T_I)

Next I
DataGridView1.ContextMenuStrip = ContextMenuStrip

sh2007
دوشنبه 07 دی 1388, 11:52 صبح
دوست من با سلام
اين كار رو انجام دادم طبق كد شما با زهم
Object reference not set to an instance of an object.
توي
ContextMenuStrip.Items.Add(T_I)

مي دهد لطفا راهنمائي كنيد
ممنون

حامد مصافی
دوشنبه 07 دی 1388, 11:55 صبح
آيا ContextMenuStrip نام يك شي است؟
با توجه به اينكه اين نام يك كلاس است نمي تواند همزمان نام يك شي نيز باشد، پس احتمالاً شماچيزي به نام ContextMenuStrip قبلاً تعريف نكرده ايد!
يك ContextMenuStrip روي فرم قرار دهيد و به نام آن را به جاي توكن ContextMenuStrip در كد فوق بنويسيد.

نكته : در ابتداي كد ابتدا تمام آيتم ها را از كلكسيون آيتم هاي ContextMenuStrip مزبور حذف كنيد.

sh2007
دوشنبه 07 دی 1388, 13:06 عصر
دوست من سلام
با تشكر از كمك شما
همينكار رو كردم يه ContextMenuStrip به پروژه اضافه كردم مشكل درست شد اما يه چيز ديگه توي كد قبلي من T_I.Checked = True داشتم اما توي ContextMenuStrip جديد هرچي گشتم چكد رو پيدا نكردم

حامد مصافی
دوشنبه 07 دی 1388, 13:22 عصر
خصوصيت Checked متعلق به ToolStripMenuItem است، پس مي توانيد اين خط را بدون تغيير حفظ كنيد

sh2007
دوشنبه 07 دی 1388, 13:36 عصر
آقا حامد دستت درد نكنه درست شد
الان كد من اينه نظر شما چيه



Dim I As Short = 0

For I = 0 To (DataGridView1.ColumnCount - 1)
Dim T_I As New ToolStripMenuItem

T_I.Checked = True
T_I.Name = DataGridView1.Columns(I).DataPropertyName
T_I.Text = DataGridView1.Columns(I).HeaderText
ContextMenuStrip1.Items.Add(T_I)


Next I

DataGridView1.ContextMenuStrip = ContextMenuStrip1

sh2007
دوشنبه 07 دی 1388, 13:38 عصر
اين ContextMenuStrip1 منويي است كه به فرم اضافه كردم

حامد مصافی
دوشنبه 07 دی 1388, 14:00 عصر
همه چيز به نظر درسته به جز اينكه با كليك آيتم ها هيچ اتفاقي نمي افتد!
براي اين كار با استفاده از AddHandler رويداد كليك را به يك تابع نسبت دهيد.
در مورد AddHandler در همين فاروم جستجو كنيد.

sh2007
سه شنبه 08 دی 1388, 11:19 صبح
دوست من با عرض معذرت من
اين كد رو من براي مخفي كردن ستونهاي كريد نوشتم بازهم اين خطا رو مي دهد


Private Sub ContextMenuStrip1_ItemClicked(ByVal sender As System.Object, ByVal e As ToolStripItemClickedEventArgs) Handles ContextMenuStrip1.ItemClicked
Dim T_I As ToolStripMenuItem = e.ClickedItem

If T_I.Checked = True Then
T_I.Checked = False
DataGridView1.Columns(T_I.Name).Visible = False

Else
T_I.Checked = True
DataGridView1.Columns(T_I.Name).Visible = True
End If
End Sub



مضمون خطا ايبنه
Object reference not set to an instance of an object
ضمنا من ديتاگريد رو اضافه كردم خطا توي مخفي كدن ستونهاست
ممنون

حامد مصافی
سه شنبه 08 دی 1388, 11:26 صبح
شما DataPropertyName را به خصوصيت Name منو نسبت مي دهيد و سعي داريد از آن به عنوان index استفاده كنيد كه اين ممكن نيست!

كد شما را به اين صورت اصلاح كردم اما تست نكردم!


Dim I As Short = 0

For I = 0 To (DataGridView1.ColumnCount - 1)
Dim T_I As New ToolStripMenuItem

T_I.Tag = DataGridView1.Columns(I).Name
T_I.CkeckOnClick = True
T_I.Checked = True
T_I.Name = DataGridView1.Columns(I).DataPropertyName
T_I.Text = DataGridView1.Columns(I).HeaderText
ContextMenuStrip1.Items.Add(T_I)


Next I

DataGridView1.ContextMenuStrip = ContextMenuStrip1



'-----------------------------------------------------------------


Private Sub ContextMenuStrip1_ItemClicked(ByVal sender As System.Object, ByVal e As ToolStripItemClickedEventArgs) Handles ContextMenuStrip1.ItemClicked
Dim T_I As ToolStripMenuItem = e.ClickedItem

DataGridView1.Columns( T_I.Tag.ToString() ).Visible = T_I.Checked
End Sub

sh2007
سه شنبه 08 دی 1388, 11:45 صبح
با سلام
آقا حامد متاسفانه من خيلي بلد نيستم اما خطا باز هم توي همين خطه
DataGridView1.Columns(T_I.Name).Visible = False
من چطوري لونو رفع كنم
درسته بجاي T_I.Name بايد انديس باشه اما توي ليست پروپرتي هاي اون يعنيT_I نتونستم انديسي پيدا كنم كه بتونم به ستونهاي گريد اختصاص بدم چه راهي هست
ممنون از همكاريتون

حامد مصافی
سه شنبه 08 دی 1388, 12:15 عصر
كدي كه من نوشتم چنين خطي نداشت!
به هر حال... يك مثال برات نوشتم