Một chút trễ, nhưng tôi đã tìm thấy giải pháp cho phần đầu tiên của câu hỏi của bạn. Bạn có thể tìm ra tab nào đã được nhấp chuột phải bằng cách nhấp chuột trái vào ứng dụng. Điều này chọn tab, vì vậy bây giờ bạn có thể sử dụng thuộc tính TabControl.SelectedTab để nhận được tab mà người dùng đã nhấp chuột phải vào.
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
private static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;
private static void SendLeftMouseClick()
{
int x = Cursor.Position.X;
int y = Cursor.Position.Y;
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, x, y, 0, 0);
}
public Form1()
{
InitializeComponent();
tabControl1.MouseDown += new MouseEventHandler(tabControl1_MouseDown);
tabControl1.MouseUp += new MouseEventHandler(tabControl1_MouseUp);
}
void tabControl1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
// Send a left mouse click to select the tab that the user clicked on.
SendLeftMouseClick();
}
}
void tabControl1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
// To show a context menu for only the tab button but not the content of the tab,
// we must show it in the tab control's mouse up event.
contextMenuStrip1.Show((Control)sender, e.Location);
}
}
Nguồn
2011-06-18 01:11:34
này sẽ không đáp ứng với phím bàn phím menu ngữ cảnh. – user1318499