カーソルキーを無視し、マウスでのみ制御できる ac# 分割コンテナーが必要です。これどうやってするの?これは、分割を同時に移動することなく、サイド パネルの 1 つでキーボード入力を使用できるようにするためです。
質問する
1177 次
2 に答える
1
e.Handled = true または e.SuppressKeyPress = true を使用して、キーがスプリッターのサイズを変更しないようにすることはできませんでした。
KeyDown で IsSplitterFixed = true を設定し、MouseDown/MouseMove で IsSplitterFixed = false を設定することでそれを行うことができました (マウスによるサイズ変更を許可するため)。
例えば
public Form1()
{
InitializeComponent();
splitContainer1.MouseMove += splitContainer1_MouseMove;
splitContainer1.KeyDown += splitContainer1_KeyDown;
splitContainer1.MouseDown += splitContainer1_MouseDown;
}
void splitContainer1_MouseDown(object sender, MouseEventArgs e)
{
splitContainer1.IsSplitterFixed = false;
}
void splitContainer1_MouseMove(object sender, MouseEventArgs e)
{
splitContainer1.IsSplitterFixed = false;
}
void splitContainer1_KeyDown(object sender, KeyEventArgs e)
{
splitContainer1.IsSplitterFixed = true;
}
于 2013-10-24T16:40:40.320 に答える
0
KeyDown
コントロールのイベントを処理するキーボード入力を無効にすることができ、必要に応じて、入力が特定のキーに一致する場合にイベントを処理することができます。
例
splitContainer1.KeyDown += new KeyEventHandler(splitContainer1_KeyDown); //Link the KeyDown event of splitContainer1 to splitContainer1_KeyDown
private void splitContainer1_KeyDown(object sender, KeyEventArgs e)
{
// if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right) //Continue if one of the arrow keys was pressed
// {
e.Handled = true; //Handle the event
// }
}
さらに、そのイベントから収集されたに従ってコントロールのSplitterMoving
イベントをキャンセルすることにより、スプリッターの動きを停止することができますSplitContainer
KeyCode
KeyDown
例
Keys KeyCode; //This is the variable we will use to store the KeyCode gathered from the KeyDown event into. Then, check if it matches any of the arrow keys under SplitterMoving event canceling the movement if the result was true
splitContainer1.KeyDown += new KeyEventHandler(splitContainer1_KeyDown); //Link the KeyDown event of splitContainer1 to splitContainer1_KeyDown
splitContainer1.SplitterMoving += new SplitterCancelEventHandler(splitContainer1_SplitterMoving); //Link the SplitterMoving event of splitContainer1 to splitContainer1_SplitterMoving
private void splitContainer1_SplitterMoving(object sender, SplitterCancelEventArgs e)
{
if (KeyCode == Keys.Up || KeyCode == Keys.Down || KeyCode == Keys.Left || KeyCode == Keys.Right) //Continue if one of the arrow keys was pressed
{
KeyCode = Keys.A; //Reset the KeyCode
e.Cancel = true; //Cancel the splitter movement
}
}
private void splitContainer1_KeyDown(object sender, KeyEventArgs e)
{
KeyCode = e.KeyCode; //Set KeyCode to the KeyCode of the event
// e.Handled = true; //Handle the event
}
ありがとう、
これがお役に立てば幸いです:)
于 2012-12-22T05:54:20.783 に答える