は、Focus
が本当にうまくありません。
この小さなヘルパー関数は、すべてのTextBoxes
のPageUp
とPageDown
キーをキャッチし、それらを外側Panel
をスクロールします:
void hookUpTextBoxesIn(Control ctl, ScrollableControl sCtl)
{
foreach(Control c in ctl.Controls)
{
if (c.Controls.Count > 0) hookUpTextBoxesIn(c, sCtl);
if (c is TextBox)
{
c.PreviewKeyDown += (s, e) =>
{
if (e.KeyData == Keys.PageDown) sCtl.AutoScrollPosition =
new Point(sCtl.AutoScrollPosition.X,
-sCtl.AutoScrollPosition.Y + 10);
if (e.KeyData == Keys.PageUp) sCtl.AutoScrollPosition =
new Point(sCtl.AutoScrollPosition.X,
-sCtl.AutoScrollPosition.Y - 10);
};
}
}
}
あなたはこのように一度セットアップでそれを呼び出します。
hookUpTextBoxesIn(ParentPanel, ParentPanel);
MouseEnter
には、次のように書くことができます。
if (!(ActiveControl is TextBox)) textBox1.Focus();
必要に応じてスクロール量を変更します。垂直スクロールのみをコード化してテストしました。他のキーまたは高度なキーコンビネーションのためにそれを展開することができます。
出典
2016-06-28 15:09:38
TaW
TextBoxのEnterイベントをコードします:textbox1.Focus(); ? – TaW
と20 TextBoxのそれを行うのですか?あまりにもそれほどですか? –
それがうまくいけば、動的に&再帰的に同じイベントにワイヤリングし、送信者をTextBoxにキャストすることができます。 - しかしscrllUp&Downメッセージをキャッチすることは別の方法です。 – TaW