我有UserControl
,它有TreeView
和TabControl
。這個用戶控件是以正常形式託管的。在UserControl中未觸發KeyDown事件
如果用戶從樹視圖中選擇了一些東西,自定義圖片框將被添加到tabcontrol的tabpage中。現在我想在這個圖片框上處理鍵值,但是我在custompicturebox中創建的事件沒有被調用。我想要的是處理箭頭鍵,但焦點停留在樹形視圖上,所以箭頭鍵只發生在樹形視圖中。
當用戶單擊它時,我提供了代碼將焦點放在圖片框上,但它並不能幫助從樹視圖中移除焦點。這裏是我的custompicturebox控制代碼的一部分:
更新 似乎只有像箭頭鍵特殊鍵不工作,我的猜測是因爲方向鍵正在由樹狀registred。如果我將圖片盒中的KeyDown
事件更改爲使用字符鍵,則它可以工作!
private void IcPackageViewBox_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Right)
{
OnPinClicked(_pinMap[_pinRectIndex].Pin);
if (_pinRectIndex < _pinMap.Count)
_pinRectIndex++;
else
_pinRectIndex = 0;
}
}
//Mouse Down Event
private void PackageViewBox_MouseDown(object sender, MouseEventArgs e)
{
Focus();
BringToFront(); //bring to front works! maybe it means focus should work also?
}
在承載該用戶控件的形式,我有KeyPreview
設置爲True
但我也有其他事件onthis形式。也許這就是爲什麼我不能在自定義控件中獲得按鍵?
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control)
{
projectBrowser.ControlKeyIsDown = true;
e.Handled = true;
}
}
private void MainForm_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.LControlKey || e.KeyCode == Keys.RControlKey || e.KeyCode == Keys.ControlKey || e.KeyCode == Keys.Control)
{
projectBrowser.ControlKeyIsDown = false;
e.Handled = true;
}
}
這裏是程序的樣子: