PDA

View Full Version : سوال: مشکل یک تکه کد!!!



ameysams
یک شنبه 28 شهریور 1389, 21:58 عصر
با سلام خدمت دوستان مشکل این تکه کد کجاست دیگه ما رو کلافه کرده .
توضیح:با یکبار کلیک روی menuitem بعضی از menuitem های دیگر visibille آنها false و با کلیک مجدد visibile آنها true با ید بشود ولی نمی شود.:متفکر:
این هم از کد:


Private Sub HideToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HideToolStripMenuItem.Click
ToolStripMenuItem9.Visible = Not ToolStripMenuItem9.Visible
ToolStripMenuItem8.Visible = Not ToolStripMenuItem8.Visible

If HideToolStripMenuItem.Text = "show" Then
HideToolStripMenuItem.Text = "hide"
Else
HideToolStripMenuItem.Text = "show"
End If
ToolStripMenuItem8.Visible = Not ToolStripMenuItem8.Visible
End Sub

پروژه را هم ضمیمه کردم.

modirmasool
دوشنبه 29 شهریور 1389, 06:59 صبح
من خوب متوجه منظورتون نشدم. ببینین با استفاده از کدهای زیر وقتی گزینه ی hide کلیک بشه،4 تا از گزینه ها حذف میشن و وقتی show کلیک بشه دوباره نمایان میشن.


Private Sub HideToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HideToolStripMenuItem.Click



If HideToolStripMenuItem.Text = "show" Then
HideToolStripMenuItem.Text = "hide"
ToolStripMenuItem2.Visible = True
ToolStripMenuItem3.Visible = True
ToolStripMenuItem4.Visible = True
ToolStripMenuItem5.Visible = True
Else
HideToolStripMenuItem.Text = "show"
ToolStripMenuItem2.Visible = False
ToolStripMenuItem3.Visible = False
ToolStripMenuItem4.Visible = False
ToolStripMenuItem5.Visible = False
End If

End Sub

اگه هم منظورتون این است که به صورت رندم این کار انجام بشه(یعنی هر بار بعضی از گزینه های مختلف حذف بشن، بازم کار خاصی نداره که خودتون با تابع رندم میتونین بنویسینش.

Shahram_Shobeiri
دوشنبه 29 شهریور 1389, 07:56 صبح
ایجوری درست میشه.


Public Class Form1
Private vis_state As Boolean = True
Private Sub HideToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HideToolStripMenuItem.Click
vis_state = Not vis_state
ToolStripMenuItem9.Visible = vis_state
ToolStripMenuItem8.Visible = vis_state
If HideToolStripMenuItem.Text = "show" Then
HideToolStripMenuItem.Text = "hide"
Else
HideToolStripMenuItem.Text = "show"
End If
End Sub
End Class

اما چرا کد شما کار نمیکنه؟؟؟ این سئوال اصلیه!

ameysams
دوشنبه 29 شهریور 1389, 08:39 صبح
[/code]اما چرا کد شما کار نمیکنه؟؟؟ این سئوال اصلیه![/quote]
سوال اصی هم همینه ؟چرا کد من نباید کار کنه؟؟

Shahram_Shobeiri
دوشنبه 29 شهریور 1389, 09:14 صبح
دلیلش اینه(خیلی باحاله)! اگه نفهمیدی بگو تا توضیح بدم

Unfortunately, this is a bit confusing. When you get Visible, it refers to whether the object is really visible, as opposed to whether it _can_ be visible. When you _set_ Visible, it affects whether it _can_ be visible.

Maybe this will make a little more sense if we look at the Form/Control case, which works similarly. Say you have a button on a form:
form1.Controls.Add(button1);
button1.Visible = true;

You see the form, you see the button. You check button1.Visible, and it's true. Everything looks great. Now you set form1.Visible to false. You check button1.Visible, and it's false, even though you set it to true.

The ToolStripMenuItem is behaving similarly: by the time your handler fires, the MenuStrip has rolled back up so that the only item that's visible is the one you can click to drop down the rest.

ToolStripItem has an Available property that reflects the other half of this, the one you're interested in ("_Could_ this be Visible?") Checking this property will give you the values you're looking for.
Scott
.NET Client Team

hero4000
دوشنبه 29 شهریور 1389, 09:35 صبح
فکرم مي کنم علت کار نکردن کد ايشون اينه که ( به خاطر اينکه موقعي که فرمان اجرا ميشه چون منوي اصلي ديده نميشه پس زير منوها هم ديده نميشه ) خاصيت Visible منوها موقع کليک روي منو مربوطه هميشه False هستش و هر دفعه که ميگه Not Visible جواب True هستش
واسه اينکه موضوع رو کامل درک کنيد همين دستورات رو توي رويداد MouseHover همون منو بنويسيد تا نتيجه رو ببينيد ( فقط موس رو روي منوي Hide نگه داريد)

modirmasool
دوشنبه 29 شهریور 1389, 09:39 صبح
آره دلیلش خیلی ساده و یه جورایی خنده دار هستش:

برای راحتی دوستان این کد رو میذارم:


If ToolStripMenuItem9.Visible = False Then
ToolStripMenuItem9.Visible = True
Else
ToolStripMenuItem9.Visible = False
End If

If HideToolStripMenuItem.Text = "show" Then
HideToolStripMenuItem.Text = "hide"
Else
HideToolStripMenuItem.Text = "show"
End If

ببینین این کد در ویبی6 کاملا درست کار میکنه!:گیج:
اما در .نت قضیه فرق میکنه. یعنی وقتی شما دکمه ی hide رو کلیک می کنین، همزمان با اون به خاطر بسته شدن منو، گزینه مورد نظر ما هم visible اش false میشه که خوب ما توی کدمون (چه این کدی که گذاشتم و چه کدهای دوستان که در پست های قبلی هست) میایم در همون لحظه برعکسش میکنیم که طبیعتا میشه true.
حالا دوستان بیاین بحث کنیم که توی این زمینه ویبی 6 بهتره یا .نت؟

Shahram_Shobeiri
دوشنبه 29 شهریور 1389, 09:41 صبح
فکرم مي کنم علت کار نکردن کد ايشون اينه که ( البته نميدونم چرا) خاصيت Visible منوها هميشه False هستش ( حتي اگر در حال نمايش باشند) و هر دفعه که ميگه Not Visible جواب True هستش
این که از اول معلوم بود. سئوال اینه که چرا همیشه فالسه؟ و جواب هم تو پست شماره 5 آورده شده!
--------------------


حالا دوستان بیاین بحث کنیم که توی این زمینه ویبی 6 بهتره یا .نت؟
درسته که این قضیه کمی گیج کننده است اما کاملاً منطقیه.

modirmasool
دوشنبه 29 شهریور 1389, 09:51 صبح
درسته که این قضیه کمی گیج کننده است اما کاملاً منطقیه.

منطقی که هست. یعنی منظورم اینه که هر دوتا زبون منطقشون درسته. ولی توی این مورد از لحاظ کاربرد به نظرم ویبی6 بهتره.
اینجا یه جورایی داره زیادی ،گزینه های منو از خود منو ارث میبرن.

Shahram_Shobeiri
دوشنبه 29 شهریور 1389, 10:03 صبح
مثلاً کاملاً شی گرائه ها! باید ارث ببره.
شما فکر کن من مرد نامرئیم!!! :لبخند: خودم مخفی باشم ولی دستام مخفی نباشن در حالی که دیده نمی شن!!!:گیج: این قضیه اصلاً منطقی نیست. چیزی که دیده نمیشه، دیده نمیشه! پس باید visible اون چیز false باشه. این غیر منطقیه که یه چیزی دیده نشه ولی visible اون true باشه.

modirmasool
دوشنبه 29 شهریور 1389, 10:18 صبح
مثلاً کاملاً شی گرائه ها! باید ارث ببره.
شما فکر کن من مرد نامرئیم!!! :لبخند: خودم مخفی باشم ولی دستام مخفی نباشن در حالی که دیده نمی شن!!!:گیج: این قضیه اصلاً منطقی نیست. چیزی که دیده نمیشه، دیده نمیشه! پس باید visible اون چیز false باشه. این غیر منطقیه که یه چیزی دیده نشه ولی visible اون true باشه.

آخه اینطوری لا اقل باید یه خاصیت دیگه هم به غیر از visible بهش اضافه کنن.
ببینین فرض کنین میخوایم تو برنامه مون موقعی که منوها باز نیستند چک کنیم که visible یکی از گزینه ها چیه؟ اونوقت به نظر شما باید چیکار کنیم؟ ما که نمیتونیم منتظر وایسیم تا بعد از باز شدن منو این مسئله رو بررسی کنیم. الان تو .نت اگه بخوایم به صورتی که گفتم بررسی کنیم جواب false برامون فرستاده میشه در حالی که توی ویبی6 بسته به شرایط میتونه هر کدوم از حالت های false یا true برامون فرستاده بشه.

Shahram_Shobeiri
دوشنبه 29 شهریور 1389, 10:32 صبح
وقتی یه منو بسته است، visible همه زیر منو های اون (چون دیده نمی شوند) false است. اصلاً چه لزومی به چک کردن داره؟
شاید منظور شما وضعیت های مختلف منو باشه. یعنی مثلاً در وضعیت یک زیر منوی a و b و در وضعیت دو زیر منوی c و d قابل رویت شوند.
برای این کار باید خودتون مدیریت این داستان رو (با یه سری متغیر یا هر چیز دیگه) به دست بگیرید. این موضوع رو نباید به این که در حال حاضر شما یه زیر منو رو می بینید یا نه ربط بدید.
شاید همنطور که قبلاً گفتم کمی کار رو سخت تر و پیچیده تر کنه. اما این کاملاً منطقیه و شما نمی تونید منطق شی گرایی رو برای سهولت کار زیر سئوال ببرید.

modirmasool
دوشنبه 29 شهریور 1389, 11:59 صبح
وقتی یه منو بسته است، visible همه زیر منو های اون (چون دیده نمی شوند) false است. اصلاً چه لزومی به چک کردن داره؟
شاید منظور شما وضعیت های مختلف منو باشه. یعنی مثلاً در وضعیت یک زیر منوی a و b و در وضعیت دو زیر منوی c و d قابل رویت شوند.
برای این کار باید خودتون مدیریت این داستان رو (با یه سری متغیر یا هر چیز دیگه) به دست بگیرید. این موضوع رو نباید به این که در حال حاضر شما یه زیر منو رو می بینید یا نه ربط بدید.
شاید همنطور که قبلاً گفتم کمی کار رو سخت تر و پیچیده تر کنه. اما این کاملاً منطقیه و شما نمی تونید منطق شی گرایی رو برای سهولت کار زیر سئوال ببرید.

آقا ما تسلیمیم.http://www.tuningtalk.com/forum/images/smilies/kap.gif
به هر حال کاریه که شده و نمیشه تغییرش داد.:لبخند:(امان از دست این microsoft)

Shahram_Shobeiri
دوشنبه 29 شهریور 1389, 12:40 عصر
اینم منبع اون چیزی که گفتم
http://connect.microsoft.com/VisualStudio/feedback/details/90955/toolstripmenuitem-visible-always-return-false

modirmasool
دوشنبه 29 شهریور 1389, 12:47 عصر
خودش هم توی سایت گفته که Bug هستش.

Shahram_Shobeiri
دوشنبه 29 شهریور 1389, 13:03 عصر
نه. یه کاربر(مثل من و شما) فکر کرده که باگه و گزارش داده. اما در ادامه کارشناس مایکروسافت توضیح داده که باگ نیست و ... .

modirmasool
دوشنبه 29 شهریور 1389, 13:54 عصر
نه. یه کاربر(مثل من و شما) فکر کرده که باگه و گزارش داده. اما در ادامه کارشناس مایکروسافت توضیح داده که باگ نیست و ... .

بله درسته.:لبخندساده: