DOBON.NETプログラミング道掲示板
(現在 過去ログ2 を表示中)
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
[
親記事をトピックトップへ
]
このトピックに書きこむ
過去ログには書き込み不可
[ トピック内全5記事(1-5 表示) ] <<
0
>>
■33684
/ inTopicNo.1)
Re[4]: エンターキーでのコントロール移動
▼
■
□投稿者/ み
一般人(30回)-(2017/09/29(Fri) 15:06:17)
返信ありがとうございます。
コードはProcessDialogKeyを参照しました。
改修案2のtabに置き換える改修案でいきます。
コンボボックスでSendKeys.Send("{TAB}");でProcessDialogKeyがもう一度
実行されてしまっていました。テキストボックスはそんなことならないのは
不明です・・・
話しは違いますがコンボボックスにデータをセットする時テキストチェンジなどが
走り変更フラグなど制御等がむずかしいですね・・
解決
済
み!
引用返信
削除キー/
編集
削除
■33683
/ inTopicNo.2)
Re[3]: エンターキーでのコントロール移動
▲
▼
■
□投稿者/ 魔界の仮面弁士
大御所(1084回)-(2017/09/28(Thu) 11:32:03)
■
No33682
に返信(みさんの記事)
> 以下が実装コードです。
…!?
No33678
で提示頂いた ProcessDialogKey の実装と
No33682
で提示頂いた ProcessDialogKey の実装が
まったく別のコードになっているのようですが、
これは一体どういうことなのでしょうか…。orz
> SendKeys.Send("{TAB}");
> SendKeys.Send("+{TAB}");
この処理が余計ですね。
ProcessDialogKey を抜ける前に、割り込みで SendKeys してはマズイです。
下記のそれぞれを試してみて、目的の動作に近いものを探ってみてください。
改修案1)SendKeys による送出を使わず、元の SelectNextControl 実装に戻す。
void MoveNextControl(bool forward = true)
{
SelectNextControl(ActiveControl, forward, true, true, true);
}
改修案2)ProcessDialogKey のオーバーライドで Enter を Tab に置換する。
case Keys.Enter:
keyData = Keys.Tab | (keyData & Keys.Modifiers);
break;
改修案3)ProcessDialogKey のオーバーライドで Enter を握りつぶす。
case Keys.Enter:
this.MoveNextControl();
return true;
改修案4)ProcessDialogKey を抜けた後で呼ばれるよう、遅延呼び出しする。
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop();
MoveNextControl(timer1.Tag as bool? ?? true);
}
protected override bool ProcessDialogKey(Keys keyData)
{
switch (keyData & Keys.KeyCode)
{
case Keys.Enter:
timer1.Start();
break;
}
return base.ProcessDialogKey(keyData);
}
改修案1は、最初の質問時(
No33678
)のコードに近いものになります。
改修案3(return true;)は、最初に提示頂いた URL でも紹介されています。
引用返信
削除キー/
編集
削除
■33682
/ inTopicNo.3)
Re[2]: エンターキーでのコントロール移動
▲
▼
■
□投稿者/ み
一般人(29回)-(2017/09/28(Thu) 10:21:03)
返信ありがとうございます。
以下が実装コードです。
画面としてはテキストボックス、コンボボックスを複数置きます。
機能としてファンクションキーも対応してますのでswitchになっています。
コンボボックスにカーソルがある状態でリターンキーを押下すると
次の次のコントロールに飛びます。
protected override bool ProcessDialogKey(Keys keyData)
{
switch (keyData & Keys.KeyCode)
{
case Keys.Enter:
this.MoveNextControl();
break;
}
return base.ProcessDialogKey(keyData);
}
public void MoveNextControl(bool forward = true)
{
if (forward)
{
SendKeys.Send("{TAB}");
}
else
{
SendKeys.Send("+{TAB}");
}
}
引用返信
削除キー/
編集
削除
■33681
/ inTopicNo.4)
Re[1]: エンターキーでのコントロール移動
▲
▼
■
□投稿者/ 魔界の仮面弁士
大御所(1083回)-(2017/09/22(Fri) 10:27:56)
■
No33678
に返信(みさんの記事)
> 以下のURLコードにより
> エンターキーによる(TABによる遷移)を実装しました。
サイトで紹介されているサンプルとは、微妙に異なっていますね。
元のコードとは異なり、Tab キーによる標準遷移が殺されてしまっていますし、
Shift キーを併用した逆送りも無くなって、使いにくくなっているように
感じるのですが、あえてそうしているのでしょうか。
> 通常のテキストボックスは正常に動作するのですが
> コンボボックスは2度ProcessDialogKeyが実行されて
> 次の次のコントールに移動してしまいます。
元のコードと、今回提示頂いたコードの両方を試してみましたが、
当方では再現しませんでした。
他にコードを書いていたりはしないですよね?
【Enter 時に、ProcessDialogKey が 2 度以上呼ばれたケース】
・該当現象を確認できず。
【Enter 時に、ProcessDialogKey が 1 度だけ呼ばれたケース】
・DropDownStyle = DropDown (ドロップダウンしていない状態)の場合
・DropDownStyle = DropDownList (ドロップダウンしていない状態)の場合
【Enter 時に、そもそも ProcessDialogKey が呼ばれなかったケース】
・DropDownStyle = Simple (テキスト部がアクティブ)の場合
・DropDownStyle = Simple (リスト部がアクティブ)の場合
・DropDownStyle = DropDown (ドロップダウンしている状態)の場合
・DropDownStyle = DropDownList (ドロップダウンしている状態)の場合
引用返信
削除キー/
編集
削除
■33678
/ inTopicNo.5)
エンターキーでのコントロール移動
▲
▼
■
□投稿者/ み
一般人(28回)-(2017/09/21(Thu) 17:06:59)
環境/言語:[Windows10 Vstudio2012 C#]
分類:[.NET]
以下のURLコードにより
エンターキーによる(TABによる遷移)を実装しました。
https://dobon.net/vb/dotnet/control/enterliketab.html
通常のテキストボックスは正常に動作するのですが
コンボボックスは2度ProcessDialogKeyが実行されて
次の次のコントールに移動してしまいます。
この回避方法があれば教えて下さい
protected override bool ProcessDialogKey(Keys keyData)
{
switch (keyData)
{
case Keys.Enter:
this.SelectNextControl(
this.ActiveControl, true, true, true, true);
break;
}
return true;
}
引用返信
削除キー/
編集
削除
トピック内ページ移動 / <<
0
>>
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-