Я работаю над проектом, который использует Infragistic controls. Он создает UserControl
который помещается в DockableControlPane
который затем помещается в DockAreaPane
который находится внутри UltraDockManager
который находится внутри Form
. Когда одна из этих DockableControlPane
отстыкована и имеет фокус, мне нужен способ захвата нажатия клавиши, что позволит мне закрыть это "окно". Проблема, с которой я сталкиваюсь, заключается в том, что, по-видимому, не наблюдается каких-либо событий клавиатуры, которые публикуются в Infragistic control. Я переопределяю OnKeyUp
в своей основной форме, и он захватывает нажатия клавиш, когда все дочерние окна состыкованы, но не с плавающей и сосредоточенной. Я попытался переопределить OnKeyUp
в элементе управления внутри DockableControlPane
, но это никогда не OnKeyUp
. Я полностью потеряю, где я могу последовательно записывать нажатия клавиш в этих плавающих окнах или некоторые параметры, которые позволят использовать комбинацию клавиш для их закрытия. На данный момент я не слишком придирчив к тому, что сочетание клавиш будет выполнять эту работу. И отказ от Intragistics не является жизнеспособным вариантом.
Вы можете переопределить ProcessCmdKey в классе формы:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
// open panel combination keys Ctrl + F
case (Keys.Control | Keys.F):
if (this.ultraDockManager1.ControlPanes["Your Pane Name"] != null)
if (this.ultraDockManager1.ControlPanes["Your Pane Name"].Pinned)
{
this.ultraDockManager1.ControlPanes["Your Pane Name"].Pinned = false;
}
else if (this.ultraDockManager1.ControlPanes["Your Pane Name"].IsInView)
{
this.ultraDockManager1.FlyIn(false);
}
else
{
// this.ultraDockManager1.ControlPanes["Your Pane Name"].Pin();
this.ultraDockManager1.ControlPanes["Your Pane Name"].Activate();
}
}
}
Может быть, для следующего: D
Я смог справиться с этим, добавив скрытую кнопку в UltraToolbarsManager
, что в моем случае было тем, что поглощало ввод на клавиатуре, и установил его ярлык на Ctrl-F4.