ورود

View Full Version : سوال: چطور براری منوی سفارشی کلید ALT را غیر فعال کنم؟!



ROSTAM2
شنبه 07 مهر 1403, 16:39 عصر
سلام من ی ToolStripMenuItem سفارشی ساختم برای فیلد های جستجوی دقیق که زمان تغییر زبان با کلید Alt + Shift DropDown از منوی اصلی بسته می شه! که من می خوام بسته نشه....پ

156132

من برای KeyDown در خود UserControl و همچنین ToolStripControlHost و جعبه متن کد نوشتم برای شناسایی کلید Alt ولی رویدادشون کارگر نبود:


Select Case e.KeyCode
Case Keys.Alt
MsgBox("alt")
End Select


خال سوال ایجاست که چطور می شه از بسته شدن DropDown در زمان استفاده از کلید Alt جلوگیری کرد؟!

Mahmoud.Afrad
شنبه 07 مهر 1403, 22:47 عصر
اینو تست کن
private bool altPressed;
private void ContextMenuStrip1_Closing(object? sender, ToolStripDropDownClosingEventArgs e)
{
if (e.CloseReason == ToolStripDropDownCloseReason.Keyboard && altPressed)
{
e.Cancel = true;
altPressed = false;
}
}

private void ContextMenuStrip1_PreviewKeyDown(object? sender, PreviewKeyDownEventArgs e)
{
if (e.Alt)
{
altPressed = true;
}
else
{
altPressed = false;
}
}
کد مشخصه، خودتون تبدیل کنید به vb

ROSTAM2
دوشنبه 09 مهر 1403, 12:09 عصر
اینو تست کن
private bool altPressed;
private void ContextMenuStrip1_Closing(object? sender, ToolStripDropDownClosingEventArgs e)
{
if (e.CloseReason == ToolStripDropDownCloseReason.Keyboard && altPressed)
{
e.Cancel = true;
altPressed = false;
}
}

private void ContextMenuStrip1_PreviewKeyDown(object? sender, PreviewKeyDownEventArgs e)
{
if (e.Alt)
{
altPressed = true;
}
else
{
altPressed = false;
}
}
کد مشخصه، خودتون تبدیل کنید به vb

سلام مجدد

این کدی که هست می شه برای DropDown از یک ToolStripDropDownButton به این شکل استفاده کرد که کار نرم افزار من رو راه انداخت:

ابتدا یک متغیر برای صدا زدن DropDown از آیتم ToolStripDropDownButton در بخش تعاریف یا Declaration از کلاس ساختم:


Protected Friend WithEvents FilterDropDown As ToolStripDropDown


و از بخش اشیاء اون رو انتخاب و رویدادهای موردنظر رو انتخاب و این کدها رو براشون نوشتم:


Private Sub FilterDropDown_Closing(sender As Object, e As System.Windows.Forms.ToolStripDropDownClosingEvent Args) Handles FilterDropDown.Closing
If e.CloseReason = ToolStripDropDownCloseReason.Keyboard AndAlso UserClose = False Then
e.Cancel = True
End If
End Sub


Private Sub FilterDropDown_Opened(sender As Object, e As System.EventArgs) Handles FilterDropDown.Opened
Me.UserClose = False
End Sub


و برای UserControl یک کلید Close اضافه کردم که بصوزت مدیریت شده بسته بشه برای اینکه کلید Escape رو هم از کار میندازه (چرا نمی دونم!!!!)

156139

برای UserControl رویداد Close ساختم:

Event Close()


از رویداد Click از کلید Close استفاده کردن برای Raise کردن رویداد مدنظر:

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
RaiseEvent Close()
End Sub


در نهایت آیتم سفاذشی که وراثت از ToolStripControlHost داره رو هم بهش رویداد اضافه کردم:

Public Class FilterBox
Inherits ToolStripControlHost
Event SearchButtonClicked(P As PersonInfo)
Event Close()
Sub New()


MyBase.New(New NameValueControl)
Me.BoxValue = Me.Control
End Sub
Private WithEvents BoxValue As NameValueControl
Public ReadOnly Property Box() As NameValueControl
Get
Return Me.BoxValue
End Get
End Property


Private Sub BoxValue_Close() Handles BoxValue.Close
RaiseEvent Close()
End Sub

Private Sub BoxValue_SearchButtonClicked(P As PersonInfo) Handles BoxValue.SearchButtonClicked
RaiseEvent SearchButtonClicked(P)
End Sub


End Class


و در کلاس فرم اصلی به این شکل به ToolStripDropDownButton اضافه کردم:

Dim WithEvents FilterBox As New FilterBox
Sub CreateFilterBoxes()


With Me.FilterDropDownButton.DropDownItems
.Insert(0, FilterBox)


End With
End Sub



Private Sub MainForm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
'Me.SelectedPage = ApplicationPages.StartPage
CreateFilterBoxes()


و رویداد Close زو صدا زدم و این کد رو براش نوشتم :

Private Sub FilterBox_Close() Handles FilterBox.Close
UserClose = True
Me.FilterDropDownButton.DropDown.Close()


End Sub


با تشکر....